21 September 2026 · kejuruteraan

Mulakan semula strategi anda di tengah-tengah backtest. Adakah ia masih ingat apa yang dimilikinya?

Mulakan semula strategi anda di tengah-tengah backtest. Adakah ia masih ingat apa yang dimilikinya?

Ujian backtest yang berguna tiada kaitan dengan mencari parameter yang lebih baik: hentikan proses di tengah jalan, pulihkannya, kemudian lengkapkan replay yang sama. Dengan input yang serupa dan simulator pelaksanaan yang terkawal, keputusan, pesanan dan ekuitinya sepatutnya sepadan dengan larian tanpa henti.

Jika tidak, anda telah menemui masalah pengurusan keadaan. Strategi itu bergantung pada sesuatu yang tidak anda simpan atau tidak dapat bina semula. Kebergantungan itu penting setiap kali larian penyelidikan disambung semula, worker digantikan atau perkhidmatan dagangan kertas melaksanakan kod baharu.

Saya suka ujian ini kerana jawapan yang dijangka sangat jelas. Tiada perdebatan tentang sama ada pasaran berubah. Kedua-dua larian menerima pasaran yang sama.

Berikut ialah tiga cara mula semula yang salah. Angka ini sekadar ilustrasi; setiap kegagalan boleh berlaku dalam sistem yang selain itu bersifat deterministik.

1. Muat semula beberapa bar dan anggap indikator sudah dipanaskan

Katakan strategi menggunakan purata bergerak eksponen 100 tempoh. Kemas kininya ialah:

alpha = 2 / 101
ema_next = alpha * close + (1 - alpha) * ema_previous

Proses yang berjalan tanpa henti membawa nilai EMA terkumpul ke hadapan. Proses yang dimulakan semula mengambil 100 bar, menetapkan nilai awal EMA kepada harga penutupan pertama, lalu menganggap indikator 100 tempoh memerlukan 100 pemerhatian.

Andaian itu mengelirukan parameter pelicinan indikator dengan tetingkap ingatan terhingga. EMA mengekalkan sumbangan yang semakin susut daripada keadaan awalnya. Jika dua versi bermula dengan perbezaan EMA sebanyak 10 unit harga, harga seterusnya yang serupa akan mengecilkan perbezaan itu seperti berikut:

Kemas kini sejak pemulaanPerbezaan yang tinggalBahagian daripada ralat awal
1001.35313.53%
2500.06740.674%
5000.0004540.00454%

Pengiraannya ialah 10 * (99 / 101)^k. Mengambil 100 bar hanya memberi anda 99 kemas kini jika pemerhatian pertama digunakan sebagai nilai benih.

Masalah biasanya timbul berhampiran sempadan keputusan. Satu larian melihat harga di atas EMA; satu lagi melihatnya di bawah. Perbezaan angka yang kecil menghasilkan satu dagangan tambahan. Selepas itu, tempoh bertenang, tunai tersedia dan keputusan seterusnya juga boleh menyimpang.

Simpan keadaan indikator rekursif, status pemulaannya dan peristiwa terakhir yang diproses. Sebagai alternatif, ulang main dari keadaan awal yang diketahui. Tempoh pemanasan yang lebih panjang boleh menghasilkan anggaran yang memadai, tetapi tentukan panjangnya berdasarkan toleransi ralat yang jelas dan periksa sama ada toleransi itu boleh mengubah keputusan. “Lima kali tempoh” ialah kelaziman, bukannya bukti.

Indikator pula bukan keseluruhan sejarah. Persentil bergulir memerlukan tetingkapnya. Model dalam talian mungkin memerlukan keadaan pengoptimumnya. Peraturan yang menunggu 3 bar selepas kerugian perlu mengingati kerugian itu dan kaunternya.

2. Simpan posisi dan lupakan pesanan yang sedang berjalan

Posisi sasaran anda ialah 10 unit. Pesanan beli sebanyak 10 telah diisi sebanyak 4, dengan baki 6 masih belum diisi. Anda membuat checkpoint bagi posisi sebanyak 4, memulakan semula proses, lalu menghantar pesanan beli baharu untuk baki 6 itu.

Jika baki asal dan pesanan gantian kedua-duanya diisi, anda memiliki 16.

Versi pepijat ini dalam backtest sering tersembunyi kerana proses memulakan semula enjin pengisian memadamkan pesanan aktif secara senyap. Dalam dagangan kertas, simulator atau perkhidmatan luaran mungkin mengekalkannya. Kod pemulihan yang sama kemudian menghasilkan pendedahan berbeza, bergantung pada komponen yang masih hidup.

Semasa mula semulaKeadaan sebenarApa yang dilihat oleh pemulihan posisi sahaja
Posisi sasaran1010
Posisi yang telah diisi44
Kuantiti belian tertunggak60
Kuantiti tambahan yang diperlukan06

Masalahnya berupa lonjakan pesanan yang tidak dapat dijelaskan sejurus selepas pemulihan. Kadangkala pendedahan berganda. Kadangkala posisi ditutup sedangkan pesanan perlindungannya masih aktif, lalu pesanan itu berupaya membuka posisi baharu kemudian.

Checkpoint perlu menyimpan identiti dan status kitar hayat pesanan bersama-sama dengan posisi. Sebelum menghasilkan tindakan baharu, pemulihan mesti menyelaraskan rekod tersebut dengan sistem pelaksanaan. Pesanan yang hasilnya tidak diketahui perlu disiasat; menganggap “tiada pengesahan disimpan” bermaksud “tidak pernah dihantar” ialah punca pesanan pendua tercipta.

Pengecam pesanan klien yang stabil membantu anda menyemak apa yang berlaku. Pengecam ini hanya mencegah pendua apabila sistem penerima benar-benar menguatkuasakan peraturan keunikan atau idempotensi yang diperlukan. Simpan juga pengecam pelaksanaan yang telah diproses supaya fill yang dimainkan semula tidak meningkatkan posisi dua kali.

Saya memang suka skrin status pesanan yang membosankan itu. Pada hari mula semula, baris-baris kecilnya tiba-tiba menjadi antara muka paling menarik dalam bangunan.

3. Pulihkan posisi dan mulakan lejar P&L baharu

Pertimbangkan contoh spot tanpa leveraj dan tanpa yuran. Mulakan dengan tunai $10,000, beli 10 unit pada harga $100 dan buat checkpoint apabila harga tanda mencecah $110.

Keadaan yang betul ialah tunai $9,000 ditambah posisi bernilai $1,100: ekuiti sebanyak $10,100. Jika pemulihan mengembalikan 10 unit tetapi menetapkan semula tunai kepada $10,000 asal, ia melaporkan $11,100. Anda telah mencipta $1,000 dengan memulakan semula proses.

Versi lain kurang ketara. Pemulihan mengekalkan ekuiti tetapi menetapkan semula harga masuk kepada $110. Jumlah ekuiti mungkin kekal betul sedangkan pengelasan untung rugi terealisasi dan belum terealisasi berubah. Jika henti rugi atau syarat keluar merujuk harga masuk, jalan pintas perakaunan itu kini mengubah tingkah laku dagangan.

Atau sistem terlupa paras tertinggi ekuiti sebelumnya. Katakan ekuiti memuncak pada $10,600 sebelum jatuh kepada $10,100. Susut nilainya kira-kira 4.72%. Tetapkan semula paras tertinggi semasa pemulihan, lalu strategi itu tiba-tiba menganggap susut nilainya sifar. Sebarang kawalan risiko berasaskan susut nilai baru sahaja ditetapkan semula tanpa kebenaran.

Jadi, masalahnya boleh berupa perubahan mendadak pada ekuiti, susut nilai yang kelihatan mencurigakan lebih baik, atau peraturan risiko yang berhenti berfungsi selepas pelaksanaan baharu. Kekalkan lejar dan keadaan strategi yang bergantung pada perakaunan: pergerakan tunai, posisi, asas kos yang berkenaan, caj terakru dan ingatan kawalan risiko. Selaraskan ekuiti yang dipulihkan dengan lejar pada cap masa penilaian yang sama.

Checkpoint memerlukan titik sempadan yang konsisten. Menyimpan tunai selepas fill tetapi kuantiti posisi sebelum fill itu menghasilkan keadaan yang tidak pernah wujud. Simpan keadaan yang berkaitan secara serentak, atau rekodkan jujukan peristiwa berkekalan yang boleh digunakan untuk membinanya semula. Simpan kursor peristiwa bersama keadaan itu supaya pemulihan tidak melangkau fill atau menerapkannya dua kali.

Ujian yang akan saya kekalkan dalam rangka kerja penyelidikan menjalankan satu replay rujukan tanpa henti, kemudian memulakan semula larian kedua pada titik yang sengaja dipilih kerana rumit: semasa pemulaan indikator, selepas fill separa dan ketika had risiko sedang aktif. Gunakan turutan peristiwa yang sama dan kekalkan sebarang keadaan rawak simulator. Bandingkan keputusan pertama selepas pemulihan, rekod pesanan dan fill, serta laluan ekuiti. Baki akhir yang sepadan sahaja boleh menyembunyikan ralat yang saling mengimbangi.

Untuk ranap selepas penghantaran tetapi sebelum pengesahan, rangka kerja ujian juga perlu mengekalkan keadaan perkhidmatan pelaksanaan secara berasingan daripada proses strategi. Jika tidak, anda memadamkan ketidakpastian yang cuba diuji.

Spesifikasi strategi merangkumi perkara yang diingatinya. Jadikan ingatan itu cukup jelas supaya anda boleh mematikan proses di tengah-tengah replay dan menunjukkan dengan tepat bagaimana ia kembali bekerja.

keadaan strategibacktestingpemulihan checkpointdagangan kertas
← Semua catatan