Enam minggu selepas kami menjalankan ujian belakang, kami menjalankannya semula dengan kod, konfigurasi dan julat tarikh yang sama. Ekuiti akhir berbeza. Perbezaannya tidaklah besar, tetapi cukup untuk mengubah nisbah Sharpe daripada 1.31 kepada 1.08 dan mengubah set parameter yang kelihatan terbaik.
Strategi itu tidak berubah. Data sejarah yang berubah. Vendor telah menyemak beberapa hari data dagangan dan bar, dan larian pertama kami tidak menyimpan petikan input yang tepat. Kami menghabiskan beberapa hari berikutnya untuk menentukan sama ada keputusan baharu itu berpunca daripada pembetulan data, pepijat saluran paip atau proses penyelidikan yang tidak dapat kami ulangi.
Isnin: larian semula memberikan keputusan berbeza
Petunjuk pertama ialah jurang kecil pada pasangan spot yang cair. Bar asal kami menunjukkan paras tertinggi 62,418. Larian semula menunjukkan 62,431. Perbezaan itu nampak tidak penting sehinggalah kami menjejaki kemasukan strategi: ambangnya terletak di antara kedua-dua harga itu. Beberapa bar yang berubah menghasilkan isyarat berbeza, lalu membawa kepada kedudukan berbeza beberapa hari kemudian.
Kami membandingkan jumlah dagangan harian dan mendapati ketidakpadanan itu bermula pada satu tarikh sahaja. Kemudian kami membandingkan baris mentah yang digunakan untuk tarikh itu. Respons vendor yang terkini mengandungi beberapa dagangan yang dibetulkan serta bar agregat yang disemak. Tiada log perubahan disertakan dengan respons yang kami gunakan.
Ini tingkah laku data yang biasa. Bursa membaiki rekod; vendor mengisi jurang, membetulkan cetakan harga yang salah dan melaraskan logik pengagregatan. Pertanyaan untuk “data Januari” boleh memberikan jawapan yang berbeza pada bulan Mac.
Selasa: kami menemui bukti yang hilang
Kami telah menyimpan nama vendor, simbol dan julat tarikh dalam rekod larian. Kami tidak menyimpan respons itu sendiri atau cincangan kandungan bagi setiap partisi input. Ini bermakna kami boleh membuktikan apa yang kami minta, tetapi bukan bait yang dikembalikan vendor.
Kami mendapatkan fail cache tertua yang dapat kami temui lalu membandingkannya dengan respons terkini. Perbezaannya bukan pelarasan pecahan saham atau penukaran zon waktu. Ia ialah sebilangan kecil rekod dagangan yang dibetulkan dan kemudiannya diproses oleh pembina bar kami. Ini menolak satu teori, tetapi cache itu tidak lengkap, jadi kami masih tidak dapat membina semula setiap bar yang terjejas dengan tepat.
| Perkara yang direkodkan | Perkara yang dapat dijawab | Perkara yang tiada |
|---|---|---|
| Vendor, simbol, julat tarikh | Permintaan yang dibuat oleh larian itu | Kandungan respons |
| Versi saluran paip | Kod yang membina bar | Baris input yang tepat |
| Cap masa larian | Masa tugas itu dijalankan | Semakan vendor yang tersedia ketika itu |
Kami menganggap “pertanyaan yang sama” bermaksud “data yang sama”. Andaian itu membuatkan eksperimen tersebut kelihatan lebih mudah diulang daripada keadaan sebenarnya.
Rabu: pembetulan itu mengubah ceritanya
Kami mengulangi pemprosesan tarikh yang terjejas menggunakan kedua-dua versi data yang tersedia. Bar yang disemak menghapuskan dua kemasukan dan mengalihkan satu keluar sebanyak satu bar. Tiga dagangan itu menyumbang sebahagian besar perubahan Sharpe. Strategi itu sensitif terhadap beberapa pemerhatian berhampiran pencetusnya, walaupun keseluruhan siri harga kelihatan hampir sama pada carta.
Ini tidak bermakna keputusan asal itu palsu atau keputusan yang disemak secara automatik lebih baik. Ini bermakna dakwaan itu memerlukan skop yang jelas: larian lama menggambarkan petikan data yang kami miliki ketika itu, manakala larian semula menggambarkan sejarah terkini vendor. Kami tidak boleh secara jujur menyifatkan satu sebagai pengulangan yang menghasilkan keputusan sama dengan satu lagi.
Khamis: kami mengubah rekod penyelidikan
Kami menambah petikan input yang tidak boleh diubah pada larian penyelidikan baharu. Setiap partisi mendapat cincangan kandungan, dan manifes larian merekodkan sumber, masa pengambilan, versi skema, dasar pelarasan dan versi kod transformasi. Untuk set data yang besar, kami menyimpan fail sebenar dalam storan beralamat kandungan supaya partisi yang serupa boleh dikongsi tanpa menulis ganti versi terdahulu.
Apabila peraturan storan atau pelesenan menghalang kami daripada menyimpan data mentah, kami mengekalkan bukti paling kukuh yang dibenarkan oleh terma: cincangan, parameter permintaan, pengecam semakan sumber dan sampel kecil baris yang dihuraikan untuk tujuan diagnosis. Cincangan tidak dapat memulihkan data, tetapi boleh memberitahu kami apabila dua larian tidak menggunakan bait yang serupa.
Ujian belakang yang boleh diulang memerlukan identiti input, bukan sekadar URL data. Rekodkan apa yang diterima, bila ia diterima dan bagaimana ia menjadi baris yang digunakan oleh strategi anda.
Jumaat: perkara yang akan kami abaikan lain kali
Kami tidak akan membandingkan metrik utama sahaja. Sharpe yang berubah memberitahu anda bahawa sesuatu telah berganjak; ia tidak mengenal pasti puncanya. Mulakan dengan jumlah baris dan cincangan partisi, kemudian cari tarikh input pertama yang berbeza. Selepas itu, bandingkan baris yang telah ditransformasikan, isyarat, pesanan dan pelaksanaan mengikut turutan tersebut.
Kami juga tidak akan menggantikan data lama secara senyap dengan sejarah yang telah dibetulkan. Pembetulan memang berguna, tetapi larian lama patut kekal terikat pada input asalnya. Set data baharu patut menghasilkan larian baharu, dengan hubungannya kepada larian terdahulu ditunjukkan dengan jelas.
Peraturan praktikal kami sekarang mudah: jika larian semula bertujuan mengulangi eksperimen, tetapkan petikan data yang digunakan. Jika larian itu bertujuan memanfaatkan sejarah yang telah dibetulkan, tandakannya sebagai eksperimen baharu. Kami mengambil masa beberapa hari untuk mempelajari perbezaan itu, sedangkan ia hanya memerlukan satu baris dalam manifes larian.
← Semua catatan


