26 September 2026 · penyelidikan

Kami Cuba Menghasilkan Semula Ujian Balik Strategi. Inilah Punca Angkanya Berbeza.

Kami Cuba Menghasilkan Semula Ujian Balik Strategi. Inilah Punca Angkanya Berbeza.

Kami menjalankan semula ujian balik yang disimpan dan mendapat lengkung ekuiti yang berbeza. Kod strategi sama, julat tarikh sama, simbol sama. Baki akhir berbeza sebanyak 1.8%, dan tiga dagangan beralih sebanyak satu bar.

Itu sudah cukup untuk menjejaskan keyakinan terhadap hasil penyelidikan. Jika rakan sepasukan, versi diri anda pada masa hadapan atau perkhidmatan dagangan kertas tidak dapat menghasilkan semula larian itu, anda tidak dapat menentukan sama ada perubahan itu memperbaik strategi atau sekadar mengubah percubaan. Inilah langkah demi langkah yang kami ikuti untuk mencari puncanya.

Hari 1: Kami catatkan maksud “larian yang sama”

Kesilapan pertama kami ialah menganggap fail strategi itu sebagai percubaan. Sebenarnya tidak. Larian itu turut bergantung pada data input, versi enjin, kalendar, metadata instrumen dan tetapan pelaksanaan. Kod hanya menerangkan satu bahagian pengiraan.

Kami menyediakan manifes larian sebelum mengubah apa-apa. Manifes itu merekodkan commit strategi, pengecam petikan data, julat tarikh, venue, jadual yuran, sumber pendanaan, model isian dan versi perisian. Kami turut menyimpan pesanan dan isian yang terhasil, kerana lengkung ekuiti sahaja tidak dapat menunjukkan titik pertama dua larian mula berbeza.

ArtifakPerkara yang perlu direkodkanSebabnya penting
Data pasaranID petikan, versi skema, pelarasanVendor membaiki sejarah dan menyemak tindakan korporat
PelaksanaanTahap yuran, siri pendanaan, tetapan isian dan impakTetapan lalai dan andaian akaun mengubah hasil
Persekitaran masa jalanCommit kod, versi enjin dan kebergantunganPustaka boleh mengubah susunan, pembundaran atau penunjuk
OutputPesanan, isian, posisi dan metrikMenunjukkan titik mula perbezaan antara larian

Hari 2: Kami membandingkan dagangan, bukan Sharpe

Metrik ringkasan mengalih perhatian kami. Kedua-dua larian mempunyai Sharpe yang hampir sama, tetapi log isian menunjukkan ketidakpadanan pertama pada penyelesaian pendanaan. Satu larian mengenakan kadar pada posisi yang terbuka pada cap masa penyelesaian; satu lagi menggunakan posisi selepas imbangan semula pada cap masa itu.

Kod strategi tidak berubah. Susunan peristiwa dalam enjin yang berubah. Kemas kini versi kecil menjadikan turutan itu jelas, sedangkan sebelum ini ia bergantung pada cara dua peristiwa kebetulan disusun.

Kami menetapkan kontrak larian supaya menyatakan susunannya: kenakan pendanaan pada posisi yang dibawa masuk ke penyelesaian, kemudian proses keputusan strategi untuk cap masa itu. Konvensyen tepatnya boleh berbeza mengikut venue dan enjin. Membiarkannya tersirat itulah pepuncanya.

Hari 3: Fail data yang kononnya “sama” rupa-rupanya berbeza

Selepas menetapkan susunan peristiwa, ketidakpadanan yang tinggal tertumpu pada beberapa dagangan ekuiti. Vendor telah membetulkan pelarasan pecahan saham yang bersejarah. Fail kami mempunyai nama dan bilangan baris yang sama seperti sebelumnya, jadi ia kelihatan tidak berubah.

Kini kami menghasilkan cap jari bagi setiap petikan data yang tidak berubah dan menyimpan dasar pelarasan bersamanya. Hash memberitahu kami sama ada bait berubah; hash tidak menjelaskan sebabnya. Oleh itu, manifes turut menyertakan sumber, masa pengambilan dan versi transformasi. Bagi data yang disemak dari semasa ke semasa, butiran itu sebahagian daripada hasilnya.

Ujian balik yang boleh dihasilkan semula perlu menjawab soalan “versi masa lalu yang mana dilihatnya?”

Hari 4: Kami menemui satu tetapan lalai yang tersembunyi

Perbezaan terakhir ialah yuran maker yang ditetapkan kepada sifar kerana konfigurasi strategi tidak menyertakan medan itu. Enjin yang lebih baharu menggunakan yuran lalai akaun. Tetapan lalai tunggal itu mengubah dagangan bermargin secukupnya untuk menjelaskan sebahagian besar jurang baki akhir.

Kami menetapkan tetapan yang bermakna dari segi ekonomi secara jelas dan meminta enjin mencetak konfigurasi yang telah digunakan ke dalam rekod larian. Tetapan lalai memudahkan penerokaan. Namun, tetapan itu bukan bukti yang kukuh apabila membandingkan hasil merentas masa.

3punca perbezaan ditemui
1.8%perbezaan baki akhir pada mulanya
0nilai Sharpe yang sepadan sahaja

Perkara yang akan kami elakkan lain kali

Kami menghabiskan setengah hari membandingkan metrik agregat sebelum melihat isian pertama yang berbeza. Jangan mulakan di situ. Isih kedua-dua log peristiwa mengikut cap masa dan bandingkan perbezaan pertama; perbezaan seterusnya sering berpunca daripada satu sebab itu.

Kami juga akan mengetepikan anggapan bahawa imej kontena dengan sendirinya menjadikan larian boleh dihasilkan semula. Imej itu menetapkan banyak bahagian persekitaran perisian, tetapi bukan fail data luaran, jadual yuran yang diambil semasa masa jalan atau sejarah vendor yang disemak semula.

Apabila ujian balik berubah, simpan kedua-dua manifes dan log larian, kemudian betulkan satu punca perbezaan pada satu masa. Hasil yang berguna bukan sekadar lengkung yang boleh dijalankan semula. Hasil itu ialah rekod yang menerangkan data dan andaian yang menghasilkannya, serta sebab larian seterusnya mungkin berbeza.

kebolehulanganujian balikkejuruteraan datadagangan kertas
← Semua catatan