Anda bercerita bahwa proses paper trading Anda mengalami crash semalaman. Anda memulainya lagi sebelum keputusan berikutnya, tidak melihat error, lalu mengira prosesnya melanjutkan dari kondisi sebelumnya. Namun, proses itu mengirim order beli untuk aset yang sudah Anda miliki. Anda ingin tahu apakah strategi tersebut memiliki bug.
Bisa jadi. Namun, pertama-tama periksa apakah proses yang dimulai ulang mengetahui hal yang sama dengan akun paper. Memulai ulang adalah masalah pemulihan state: posisi, kas, order terbuka, dan semua memori strategi yang memengaruhi keputusan berikutnya harus selaras. Menjalankan kembali kodenya adalah bagian yang mudah.
Apa yang diyakini strategi sebelum mengalami crash?
Catat keputusan terakhir yang dibuat proses sebelum berhenti. Untuk setiap instrumen yang diperdagangkan, rekam posisi yang dituju, posisi aktual di akun, order yang masih terbuka, serta state sinyal yang akan memengaruhi tindakan berikutnya. Jika catatan itu tidak tersedia, Anda tidak bisa memastikan apakah proses yang dimulai ulang memulihkan state atau sekadar menginisialisasi strategi baru.
Misalkan strategi per jam Anda membeli 1 unit saat sinyal trennya berubah positif, lalu menahannya sampai sinyal berubah negatif. Proses mengirim order beli pada pukul 14:00, tetapi mengalami crash sebelum mencatat bahwa order tersebut diterima. Venue paper mengeksekusi order itu. Saat dimulai ulang, strategi tidak melihat posisi yang tercatat dan sinyal masih positif, jadi strategi mengirim order beli lagi. Sinyalnya bertindak konsisten. Ingatannya tentang aset yang dimiliki akun sudah kedaluwarsa.
Karena itu, posisi akun terkini harus dicocokkan dengan state strategi yang tersimpan sebelum order baru diizinkan. Snapshot lokal bisa berguna, tetapi akun atau venue menjadi sumber acuan untuk mengetahui apa yang benar-benar telah tereksekusi.
State apa saja yang harus bertahan setelah proses dimulai ulang?
Mulailah dari state yang dapat mengubah order berikutnya. Simpan catatan persisten dengan timestamp dan versi untuk setiap pembaruan; buat salinan sebelum mengubah logika pemulihan agar kegagalan tersebut bisa diputar ulang nanti.
| State | Mengapa penting | Pemeriksaan pemulihan |
|---|---|---|
| Posisi dan kas | Menentukan eksposur dan daya beli yang tersedia | Bandingkan nilai yang tersimpan dengan akun paper |
| Order terbuka | Order mungkin tereksekusi saat proses tidak berjalan | Periksa status order dan cocokkan eksekusi parsial |
| Memori sinyal | Persilangan, masa jeda, dan periode kepemilikan dapat berlangsung melewati beberapa keputusan | Pulihkan input keputusan terakhir yang telah dikomit |
| Peristiwa terakhir yang diproses | Menentukan titik tempat strategi melanjutkan konsumsi data | Putar ulang peristiwa setelah titik itu tanpa menerapkannya dua kali |
Memori sinyal mudah terlewat. Strategi yang bertransaksi berdasarkan persilangan dapat menyimpan nilai indikator kemarin untuk mendeteksi persilangan baru. Jika strategi dimulai dengan nilai kosong, kondisi yang sudah ada bisa dianggap sebagai peristiwa baru. Timer masa jeda menghadapi masalah yang sama: proses yang dimulai ulang tidak boleh diam-diam mengatur ulang aturan yang seharusnya tetap berlaku.
Bagaimana cara membuat pemulihan bisa diulang dengan konsisten?
Beri setiap order client ID yang stabil, diturunkan dari run strategi dan keputusan asalnya. Jika proses mencoba lagi setelah timeout, proses dapat memeriksa apakah keputusan tersebut sudah membuat order, alih-alih mengirim order duplikat. Catat perubahan state hanya setelah peristiwa akun terkait terkonfirmasi, dan simpan ID order serta eksekusi yang menjelaskan perubahan itu.
Lalu uji kondisi yang memicu insiden Anda. Jalankan strategi hingga membuat keputusan, simpan state, hentikan proses, lalu pulihkan dengan posisi dan riwayat order dari akun paper. Bandingkan keputusan berikutnya dan order yang dihasilkan dengan run tanpa gangguan. Ulangi dengan order yang hanya terisi sebagian dan dengan crash di antara pengiriman dan konfirmasi. Run yang dilanjutkan seharusnya tidak menciptakan posisi baru atau mengulangi tindakan yang sudah selesai.
Simpan log pemulihan: peristiwa terakhir yang diproses, waktu snapshot akun, status order terbuka, versi strategi yang dipulihkan, dan keputusan pertama setelah proses dimulai ulang. Dengan begitu, “prosesnya sudah berjalan lagi” menjadi sesuatu yang dapat diaudit.
Apa yang bisa Anda percayai setelah proses dimulai ulang?
Percayai proses hanya setelah state akun dan strategi selaras, status order tertunda diketahui, dan keputusan berikutnya sesuai dengan keputusan yang diharapkan jika run berlangsung tanpa terputus. Jika Anda tidak bisa menjelaskan ketidakcocokan, jeda pengiriman order paper dan periksa jejak peristiwanya. Proses yang berjalan bukan bukti bahwa strategi berhasil dipulihkan.
Crash itu sudah mengungkap bagian yang berguna: asumsi yang biasanya tidak perlu Anda hadapi kini terlihat. Jadikan proses dimulai ulang sebagai skenario yang dapat diulang, sehingga Anda tahu apa yang diingat strategi sebelum memintanya bertransaksi lagi.
← Semua artikel


