KenKem Journal

Bagaimana Anda Tahu Hasil Sebuah Sistem Trading Itu Jujur?

· #research-integrity #overfitting #backtesting #systematic-trading #quant-research

Anda tidak bisa menilainya dari kurva ekuitas, karena kurva mudah dibuat mulus. Yang bisa Anda periksa adalah apakah penulisnya menerbitkan pengujian yang merugikan dirinya sendiri, menyebutkan ukuran sampel yang benar-benar berlaku alih-alih yang terdengar bagus, dan mengatakan klaim mana dari dirinya sendiri yang sudah ia tarik kembali. Penulis yang belum pernah menarik apa pun entah sedang beruntung, atau belum pernah benar-benar memeriksa.

Seni garis abstrak hasil kode di atas grid
Digambar dengan kode, bukan difoto. Ilustrasi KenKem.

MasterVP · Systematic Trading Journey

Ditulis oleh pendiri KenKem, seorang insinyur perangkat lunak dengan dua puluh tahun pengalaman yang dulu memperdagangkan emas secara manual sebelum membangun tumpukan riset di balik MasterVP. Dalam proses pengembangan quant saya, justru hasil yang tidak nyaman itulah yang layak diterbitkan, karena itulah bagian yang tidak bisa pembaca dapatkan dari halaman penjualan. Setiap angka di bawah ini adalah hasil backtest, simulasi, atau pengukuran audit pada data tick nyata, bertanggal dan berlabel.

Apa yang ditemukan sebuah tinjauan kritis terhadap sistem trading saya sendiri?

Bahwa infrastruktur risetnya kuat, dan pelaporan risetnya adalah kelemahannya.

Pada Agustus 2026 saya memesan audit bersudut pandang luar untuk Master Volume Profile. Pengarahannya bukan pembacaan yang ramah. Peninjau mengambil sikap seorang quant luar yang kritis, diminta mencari bagian terlemah dari proses itu dan mengatakannya terus terang, dengan syarat setiap angka diturunkan ulang dari repositori, bukan dikutip dari tulisan saya sendiri.

Putusannya terbelah dengan cara yang tidak saya duga. Untuk infrastrukturnya, kata-kata auditor adalah bahwa ia akan merekrut proses ini: pemisahan lapisan yang jelas, satu pemblokir paritas yang keras, dan hasil-hasil negatif yang disimpan serta bisa ditelusuri. Lalu datang paruh yang lain. Angka ketahanan yang saya tempatkan paling depan ternyata tidak bisa gagal. Uji yang bisa gagal memang sudah gagal, dan saya membicarakan diri saya melewatinya. Kesimpulannya bukan bahwa keunggulan itu palsu. Kesimpulannya adalah bukti saya tidak mampu menunjukkan bahwa ia bukan palsu, sementara dokumen investor saya menggambarkannya seolah-olah mampu.

Saya menerbitkan apa yang ditemukan tinjauan itu, bukan bagian yang menyanjung saya. Tinjauan yang hanya saya kutip ketika ia setuju dengan saya hanyalah pemasaran dengan langkah tambahan.

Mungkinkah sebuah uji ketahanan mustahil untuk gagal?

Bisa, dan uji saya memang begitu.

Selama berbulan-bulan saya memimpin bagian bukti dengan Deflated Sharpe Ratio, ukuran yang memang dibuat untuk menangkap hasil yang lahir dari pencarian berlebihan. Skornya berada di puncak rentangnya, jadi saya mengutipnya sebagai bukti terkuat yang saya punya.

Auditor tidak membaca putusannya, ia mengerjakan ulang aritmetikanya. Ambang yang harus dilewati sebuah hasil tumbuh seiring sebaran hasil antar percobaan, dan hanya tumbuh menurut logaritma dari jumlah percobaan. Sebaran percobaan yang saya catat kira-kira hanya seperdelapan dari hasil itu sendiri. Pada sebaran itu, pencarian tersebut butuh sekitar seratus triliun percobaan sebelum gerbangnya mungkin gagal. Ia bukan sedang lulus. Ia secara aritmetika tidak sanggup melakukan hal lain.

Lebih buruk lagi, saya sebenarnya sudah mengumpulkan bukti penegasnya dan membacanya terbalik. Sebuah studi sebelumnya menemukan bahwa membuang percobaan duplikat hanya menggeser skornya seperseribu. Saya mencatat itu sebagai stabilitas. Sebenarnya itu jarum yang memang tidak bergerak.

Sementara itu uji yang benar-benar mampu membedakan, yaitu probabilitas overfitting backtest, keluar di atas setengah pada delapan dari sembilan sel, di ketiga konfigurasi yang sudah dirilis. Artinya konfigurasi yang saya pilih di dalam sampel jatuh di bawah median luar sampel lebih sering daripada lemparan koin. Alasan saya mengabaikannya adalah karena konfigurasi yang dirilis duduk di persentil luar sampel yang tinggi, padahal itu hanya tiga tarikan dari persis distribusi yang baru saja dinyatakan tidak dapat diandalkan oleh uji tersebut. Pertanyaannya tidak pernah soal merilis atau tidak. Pertanyaannya adalah uji mana yang memimpin bagian bukti, dan saya menempatkan yang jenuh di depan.

Seberapa besar sebenarnya sebuah sampel trading?

Lebih kecil daripada jumlah transaksinya, sering kali sampai satu orde besaran.

Saya biasa mengutip 1.423 transaksi terhadap minimum literatur 192, yaitu margin sekitar tujuh kali lipat. Audit itu mengukur aliran risetnya dengan benar. Pada 3.502 transaksi, distribusinya punya kemiringan 3,49 dan kurtosis berlebih 19,5, sama sekali tidak seperti kurva lonceng yang diasumsikan oleh angka minimum tadi. Dikonversi ke sampel efektif setara Gauss, 3.502 transaksi hanya bernilai sekitar 326 observasi.

Jadi margin sebenarnya adalah 326 lawan 192, bukan 1.423 lawan 192. Tetap sebuah margin. Bukan margin yang saya iklankan. Ini pola kegagalan yang sama seperti yang saya tulis di apa yang perlu ditanyakan sebelum memercayai sebuah backtest, hanya saja kali ini orang yang perlu bertanya adalah saya sendiri.

Apa artinya ketika tiga puluh transaksi memikul seluruh sistem?

Artinya angka rata-rata jauh lebih rapuh daripada penampakannya.

Ambil aliran riset itu, urutkan, lalu buang tiga puluh transaksi terbaik dari 3.502. Itu 0,86% dari sampel, dan seluruh sistem berubah menjadi negatif. Satu persen teratas saja sudah menyumbang lebih dari seluruh hasil bersihnya, yang berarti sembilan puluh sembilan persen sisanya secara kolektif negatif.

Ini bukan cacat yang saya ciptakan. Ini bentuk alami trading breakout, di mana sedikit pergerakan besar membayari ekor panjang kerugian kecil. Tetapi ini mengubah nilai sebuah profit factor. Rasio yang dikutip di atas distribusi semiring itu bukan statistik yang memadai, dan saya telah mengutipnya seolah-olah memadai.

Bukti tandingannya harus ada di sini, bukan di catatan kaki, karena auditnya sendiri menuntut demikian. Bootstrap dua puluh ribu tarikan pada aliran yang sama menunjukkan hasilnya tahan terhadap pengambilan ulang sampel itu. Yang tidak bisa dilakukan bootstrap adalah berbicara tentang risiko perubahan rezim pasar, karena ia hanya mengocok ulang dua setengah tahun yang sama dan mengandaikan dua setengah tahun berikutnya memuat populasi peristiwa ekor yang sebanding. Pernyataan yang bisa saya pertahankan lebih sempit daripada yang dulu saya buat: keunggulannya nyata pada rezim yang saya uji, ia dipikul oleh sedikit peristiwa, dan apakah ia bertahan benar-benar belum teruji.

Apakah pemeriksaan otomatis menangkap bug yang justru memperindah hasil?

Hanya jika Anda menjadikannya pemblokir, dan itulah seluruh maksudnya.

Pemeriksaan yang paling saya andalkan justru yang paling tidak menarik. Sebelum apa pun dirilis, produk yang sudah dikompilasi memutar ulang satu sesi referensi yang dibekukan, dan setiap transaksi harus cocok satu per satu, sampai ke tingkat byte. Ia membuktikan nilainya pada rilis 1.17, ketika sebuah cacat menyelinap ke salah satu kaki sistem dan laba yang dilaporkan keluar lebih tinggi dari referensinya, bukan lebih rendah.

Kalau saya hanya melihat kurva ekuitas dengan mata, saya akan mengangguk lalu merilisnya, karena angkanya bergerak ke arah yang saya inginkan. Pemeriksaan paritas tidak peduli ke arah mana sebuah galat menunjuk. Ia menggagalkan build tersebut. Saya mempertahankannya sebagai pemblokir keras, bukan peringatan, karena saya tidak bisa memercayai diri saya untuk mengabaikannya dengan benar tepat pada saat angkanya terlihat bagus.

Pada musim audit yang sama, ditemukan enam preset cacat di antara pengaturan yang sudah saya rilis, termasuk dua konfigurasi lima menit yang berhenti bertransaksi pada April 2024 dan tidak pernah mulai lagi. Keduanya tidak crash. Keduanya diam-diam menepi, dan itu terlihat seperti kehati-hatian sampai Anda memeriksa tanggalnya. Keenamnya ditarik, sehingga rilis 1.18 keluar dengan lebih sedikit produk daripada rilis sebelumnya. Bagaimana salah satu pengaturan pelindung itu bisa mengunci akun yang sebenarnya masih bisa pulih saya tulis di mengapa bot trading meledakkan akun.

Apa yang saya prediksi tentang sistem saya sendiri dan ternyata salah?

Seberapa banyak bagiannya yang sebenarnya hasil penyetelan.

Audit itu menyoroti bahwa saya punya sekitar 180 input Expert Advisor dan 336 tombol mesin, berhadapan dengan sekitar 326 observasi efektif, dan hampir tidak satu pun pernah diuji lepas secara sistematis. Saya memprediksi kurang dari 25 parameter yang benar-benar berpengaruh, lalu menjalankan 436 pemutaran ulang di tiga kaki yang sudah dirilis untuk membuktikannya.

Dari 231 kunci mesin, 82 diterapkan oleh sebuah preset, 49 mengubah transaksi mana yang terjadi, dan 33 dirilis pada nilai yang sudah disetel. Prediksi saya salah, dan salahnya ke arah yang merugikan saya: 49, bukan di bawah 25. Itu setara kira-kira sembilan belas sampai dua puluh observasi efektif per parameter tersetel, sebuah rasio yang tipis. Penyebut yang jujur adalah 33, bukan 191 seperti yang mungkin disimpulkan pembaca dari daftar inputnya, dan prediksi yang terbantahkan dicatat memang sebagai terbantahkan.

Mendaftarkan tebakan sebelum menjalankan ujinya adalah satu-satunya alasan saya bisa membedakan antara benar-benar benar dan meyakinkan diri sendiri bahwa saya benar setelah melihat hasilnya.

Mengapa rekam jejak nyata sebanyak 62 transaksi belum menyelesaikan apa pun?

Karena sampelnya terlalu kecil untuk mendukung kesimpulan ke arah mana pun.

Aliran uang nyata itu adalah akun prop firm yang menjalankan sistem lima menit, dan pada saat audit ia baru menghasilkan 62 transaksi, statistik t sebesar minus 0,36. Itu bukan bukti bahwa sistemnya gagal. Itu juga bukan bukti bahwa sistemnya bekerja. Itu adalah pernyataan jujur bahwa belum ada apa pun yang tegak.

Rekomendasi peringkat teratas dari audit itu bukan sapuan parameter lagi. Rekomendasinya adalah menjalankan kaki berjangka waktu lebih lambat pada ukuran minimum selama enam bulan dan mengumpulkan eksekusi nyata, karena semua hal lain di repositori itu mengukur dua setengah tahun sejarah yang sama. Proses yang tervalidasi dan uji nyata yang belum berhak berpendapat adalah dua hal berbeda, dan siapa pun yang menyajikannya sebagai satu hal sedang menjual sesuatu.

Apa yang berubah setelah audit itu?

Gerbang rilisnya, skema buku besar eksperimennya, dan urutan penyajian buktinya.

Audit yang menghasilkan dokumen tanpa perubahan kode adalah pertunjukan. Sebulan setelah audit ini, gerbang rilis mencetak putusan yang berbeda. Catatan lock kini terbaca "PBO-PASS/DSR-NONBINDING": ketika ambang deflasi berada di bawah tiga puluh persen dari hasilnya, Deflated Sharpe tidak lagi dicetak sebagai lulus, ia dicetak sebagai tidak mengikat, dan uji yang mampu membedakan yang memimpin sebagai gantinya. Buku besar eksperimen mendapat kolom baru untuk ukuran sampel efektif, kurtosis berlebih, dan hasil bersih tanpa tiga puluh transaksi terbaik, sehingga setiap lock berikutnya menyebutkan angka yang tidak nyaman di samping angka yang menyanjung tanpa perlu ada yang bertanya.

Per rilis 1.26, buku besar itu memuat 158 eksperimen yang dideklarasikan lebih dulu: 52 ditolak, 5 dihentikan di tengah jalan, 83 hanya untuk riset, dan 11 sampai ke keputusan kunci. Audit itu menghitung 137 pada Agustus. Tingkat penguncian sekitar satu banding empat belas dengan setiap kegagalan tetap bisa ditelusuri adalah angka yang ingin saya lihat dari orang lain, dan karena itulah ia angka yang saya pertahankan.

Butuh waktu cukup lama bagi saya untuk membangun kerangka kerja DQuants saya sendiri demi mempercepat secara signifikan seluruh proses pengembangan, dari validasi hipotesis sampai ke penerapan. Bagian yang paling akan saya bela dari kerangka itu bukan kecepatannya. Melainkan bahwa ia membuat tindakan diam-diam membuang hasil yang tidak saya sukai menjadi sangat mahal.

Pertanyaan yang sering diajukan

Bagaimana cara tahu sebuah backtest itu jujur? Cari apa yang penulisnya terbitkan untuk merugikan dirinya sendiri: bulan terburuk yang disebut namanya, ukuran sampel efektif di samping jumlah transaksi nominal, daftar gagasan yang ditolak, dan setidaknya satu klaim yang sudah ia tarik. Presentasi tanpa satu pun penarikan biasanya belum diaudit, baru ditulis.

Apa itu Deflated Sharpe Ratio dan mengapa ia bisa menyesatkan? Ia memperkirakan probabilitas bahwa sebuah hasil bukan keberuntungan, dengan memperhitungkan berapa banyak konfigurasi yang dicoba. Ia bisa jenuh. Ambang yang harus dilewati tumbuh seiring sebaran antar percobaan dan hanya tumbuh secara logaritmik terhadap jumlah percobaan, sehingga ketika sebaran percobaan kecil dibanding hasilnya, tidak ada lebar pencarian realistis yang bisa membuatnya gagal. Dalam kasus saya butuh sekitar seratus triliun percobaan.

Apa itu probabilitas overfitting backtest, atau PBO? Uji yang berulang kali membelah data, memilih konfigurasi terbaik pada satu paruh, lalu memeriksa di mana ia mendarat pada paruh lainnya. Di atas setengah berarti pemenang di dalam sampel berkinerja di bawah median luar sampel lebih sering daripada lemparan koin. Milik saya keluar di atas setengah pada delapan dari sembilan sel, dan kini saya memimpin dengan uji ini alih-alih dengan uji yang lulus.

Mengapa ukuran sampel efektif lebih kecil daripada jumlah transaksi? Karena statistik yang menetapkan syarat sampel minimum mengasumsikan sesuatu yang mendekati distribusi normal, sedangkan hasil per transaksi miring dengan ekor tebal. Aliran riset saya menunjukkan kemiringan 3,49 dan kurtosis berlebih 19,5, yang menyusutkan 3.502 transaksi nominal menjadi sekitar 326 observasi setara Gauss.

Apakah masalah kalau sedikit transaksi menghasilkan sebagian besar laba? Itu bukan otomatis sebuah cacat, karena sistem breakout memang berbentuk begitu. Tetapi artinya rata-rata tidak bisa diandalkan. Membuang 30 transaksi terbaik dari 3.502 transaksi riset saya, kurang dari satu persen sampel, membuat seluruh aliran menjadi negatif.

Sebaiknya pemeriksaan paritas backtest jadi peringatan atau pemblokir? Pemblokir. Pada rilis 1.17 sebuah cacat membuat laba yang dilaporkan lebih tinggi dari referensi bekunya, bukan lebih rendah, dan peringatan persis itulah yang orang bicarakan untuk dilewati ketika angkanya bergerak menguntungkan dirinya.

Berapa banyak transaksi yang dibutuhkan sebuah rekam jejak nyata agar berarti? Lebih dari 62. Pada saat audit saya, sampel uang nyata adalah 62 transaksi statistik t minus 0,36, terlalu kecil untuk mendukung kesimpulan ke arah mana pun. Syarat ukuran sampel bergantung pada distribusinya, itulah sebabnya ukuran sampel efektif adalah angka yang layak ditanyakan.

Apa yang sebaiknya saya tanyakan kepada pengembang yang menjual sistem trading? Tanyakan uji mana di bagian bukti mereka yang sebenarnya bisa gagal, dan apa yang terjadi ketika mereka menjalankannya. Tanyakan ukuran sampel efektif, bukan jumlah transaksi. Tanyakan apa yang sudah mereka tarik kembali. Jawabannya lebih informatif daripada kurva mana pun.

Kalau Anda ingin melihat bagaimana pekerjaan ini menjadi produk, MasterVP adalah metode intraday saya sendiri yang dibangun di atas teori volume profile yang sudah terbuka untuk umum. Ia dirilis sebagai indikator Master Volume Profiler di TradingView dan MetaTrader 5, yang menampilkan pembacaannya dan menyerahkan keputusan order kepada Anda, dan sebagai Master Volume Sniper di pasar MQL5, sebuah Expert Advisor yang menjalankan aturan serta pengaturan risiko yang Anda konfigurasikan. Keduanya didokumentasikan dengan seluruh catatan pembatas di atas, karena catatan itulah yang membuat sisanya layak dibaca.


Artikel ini disusun dari rangkaian tulisan audit diri dalam catatan pembangunan MasterVP. Hanya untuk tujuan edukasi. Bukan nasihat keuangan. Angka yang dikutip adalah hasil backtest, simulasi, dan audit pada data tick nyata, dan kinerja masa lalu tidak menjamin hasil di masa depan. Setiap trader tetap bertanggung jawab atas pengaturan risiko dan keputusannya sendiri.

← All journal articles

Chat