Apa yang Membuat Sebuah Sistem Trading Tahan Lama?
· #systematic-trading #robustness #research-process #backtesting #risk-management
Sebuah sistem trading disebut tahan lama ketika hasilnya bertahan pada kondisi yang tidak pernah dipakai untuk menyetelnya: rezim biaya yang berbeda, jendela sesi yang digeser, setelan parameter tetangga, tahun yang bukan saya yang pilih. Tahan lama bukan berarti angkanya lebih besar. Artinya ketergantungan pada keberuntungan lebih kecil, dan tidak seperti kebanyakan hal di trading, itu bisa diukur.
Berikut rangkaian pemeriksaan yang saya jalankan pada pekerjaan saya sendiri, termasuk yang gagal dilewati strategi saya.
Mengapa memperlambat sebuah keputusan justru memperbaikinya?
Karena kecepatan menghapus tahap di mana saya bisa tahu bahwa saya keliru tanpa membayar mahal.
Cara berpikir instan membuat setiap setup terasa mendesak, setiap hasil terasa final, dan setiap kerugian terasa personal. Versi sistematis dari keputusan yang sama terasa lebih lambat dan lebih membosankan: amati, ukur, bandingkan, baru putuskan. Loop itulah alur kerja dari Dquants engine yang saya kembangkan sendiri, dan tidak ada satu pun keputusan di dalamnya yang diambil dari satu kali lihat pada satu jendela data.
Ada contoh kecil yang menunjukkan loop itu membayar dirinya sendiri. Seseorang bertanya apakah menolak entry baru pada lima belas menit terakhir sebuah sesi akan membantu. Terdengar masuk akal. Saya mengukurnya alih-alih mengasumsikannya, dan ternyata tidak memberi nilai tambah, jadi tidak diadopsi. Dalam rangkaian tes yang sama, menutup posisi di akhir sesi ternyata kurang lebih netral secara uang, dan keluar rata setiap Jumat malam adalah perubahan yang benar-benar berarti. Tiga ide yang sama masuk akalnya, satu yang layak bertahan. Saya tidak akan bisa menebak yang mana.
Apa yang terjadi pada sistem tanpa titik invalidasi?
Sistemnya jadi lengket secara emosional dan mulai membela diri.
Aturan yang tidak tahu di mana dirinya salah akan terus meminta ruang tambahan. Karena itu di dalam Dquants engine, sebuah aturan hanya dikirim bersama titik invalidasinya yang sudah ditetapkan di depan, sehingga harga tempat hipotesis itu mati diputuskan sebelum ada uang di atasnya, bukan saat uang sudah di sana.
Logika yang sama berlaku untuk ide besar, bukan cuma untuk satu transaksi. Sepanjang program riset ini saya sudah menguji puluhan varian dan menolak sebagian besar di antaranya, termasuk beberapa yang tampak menguntungkan sampai statistik deflated atau jendela out-of-sample membongkarnya sebagai keberuntungan. Sejauh ini ada dua edge yang lolos semuanya. Kuburan idelah bagian dari catatan yang paling saya percaya.
Mengapa saya menjaga logikanya tetap ringkas?
Karena setiap komponen tambahan adalah satu hal lagi yang bisa ter-fit ke derau, dan satu hal lagi yang harus saya debug pada saat paling buruk.
Master Volume Profile adalah sekumpulan kecil aturan volume profile, bukan tumpukan indikator, dan itu soal kendali, bukan minimalisme demi minimalisme. Ketika ada yang bertingkah, saya ingin bisa melacaknya ke satu input yang punya nama.
Memangkas juga bagian dari itu. Saya menguji Kaufman Efficiency Ratio sebagai filter entry dan hasilnya tidak memberi peningkatan out-of-sample, jadi ia tidak ada di dalam produk. Lagi pula tidak ada satu alat pun yang menjadi edge: DuckDB, C++ dan Python menangani riset, MQL5 menangani eksekusi, dan tidak satu pun bernilai jika berdiri sendiri. Edge ada pada bagaimana semuanya saling terpasang dan pada apa yang ditolak oleh prosesnya.
Apakah membatasi jam trading benar-benar membantu, atau itu takhayul?
Itu pertanyaan yang adil, dan ada tes jujurnya.
Filter sesi gampang disalahgunakan. Persempit jamnya cukup jauh dan strategi apa pun akan terlihat lebih baik, karena Anda diam-diam sudah memilih jam yang kebetulan bekerja. Maka pada satu konfigurasi emas, saya sengaja menggeser jendela sesinya dua sampai tiga jam lalu menjalankannya ulang. Hasilnya bertahan. Itu memberi tahu saya bahwa edge-nya bukan artefak waktu yang rapuh, dan hanya karena itulah saya nyaman mengirim filter sesi sama sekali.
Satu pemeriksaan terkait dari hari tes yang sama: konfigurasi itu dipilih pada feed satu broker lalu dievaluasi pada feed broker lain, sehingga evaluasinya tidak membawa bias seleksi langsung dari proses pencariannya. Status jujurnya, memakai kata yang sama seperti yang saya pakai secara internal, adalah kandidat, belum tersertifikasi. Ia masih berutang plateau sensitivitas pada feed kedua, walk-forward berjangkar, dan forward test di akun demo.
Angka apa yang saya periksa sebelum memercayai ceritanya?
Ekspektansi, dan bentuk distribusi di bawahnya.
Cerita mudah dijual, ekspektansi sulit dipalsukan. Kalau rata-rata hasil per transaksi lemah setelah biaya, strategi itu bermasalah sebagus apa pun penjelasannya. Kalau rata-rata itu ditopang segelintir transaksi beruntung yang langka, strategi itu rapuh bahkan ketika angka utamanya kelihatan bagus.
Konfigurasi emas yang paling banyak saya validasi berjalan pada profit factor 1.42 di 1,423 transaksi dengan data tick nyata, dan rata-rata kemenangannya kira-kira sebesar rata-rata kerugiannya. Itu lebih penting daripada kedengarannya: edge-nya datang dari win rate yang positif, bukan dari geometri payoff, yang merupakan hal yang lebih sempit dan lebih rapuh untuk diandalkan, sekaligus alasan bagus untuk tidak mengutip angka win rate seolah itu sebuah prestasi. Semua angka di sini adalah hasil backtest dan run konfirmasi MetaTrader 5, tertanggal Juli 2026. Tidak satu pun merupakan rekam jejak live.
Sebenarnya statistik melindungi saya dari apa?
Sebagian besar dari diri saya sendiri.
Statistik tidak membuat trading menjadi pasti. Ia memberi tahu saya kapan sebuah hasil terlalu kecil, terlalu berisik, terlalu terkonsentrasi, atau terlalu rapuh untuk memikul beban yang ingin saya taruh di atasnya. Dalam praktiknya itu berarti Deflated Sharpe, Probabilistic Sharpe, dan panjang rekam jejak minimum, semuanya diberi jumlah konfigurasi yang benar-benar saya cari, bukan angka yang enak dilihat. Untuk konfigurasi emas itu, Deflated Sharpe terbaca 1.000 terhadap ambang 0.95, dan sampel minimum yang dibutuhkan adalah 192 transaksi terhadap 1,423 yang saya punya.
Hal yang lebih berguna dari kerangka itu adalah kemampuannya menandai bagian lemah dari strategi saya sendiri. Kaki mean-reversion di dalam Master Volume Profile hanya punya 51 transaksi di belakangnya, jauh di bawah lantai 192 transaksi tadi, dan menyumbang sekitar 1.4 persen dari laba bersih. Ia tetap menyala karena positif dan tidak berkorelasi. Yang tidak ia dapatkan adalah deskripsi sebagai separuh mesin, karena sampelnya tidak menopang kalimat itu.
Seperti apa sistem yang menua dengan baik?
Membosankan, dan sedikit lebih buruk daripada versi terbaiknya sendiri.
Sinyal paling jelas yang saya temukan adalah bahwa optimasi ulang justru merugikan. Pada tes walk-forward saya, konfigurasi terkunci yang tetap menghasilkan lima dari lima fold positif, sementara mengoptimasi ulang parameter untuk setiap fold hanya mencapai empat dari lima. Versi yang lebih sedikit beradaptasi justru lebih baik. Di samping itu, profit factor out-of-sample tercatat 1.327 melawan 1.203 di training, dan out-of-sample di atas in-sample adalah kebalikan dari tanda tangan curve fitting.
Saya juga hanya menerima parameter yang duduk di sebuah plateau, di mana setelan tetangganya berperilaku serupa. Hasil yang bekerja tepat di satu setelan adalah ranjau dengan tangkapan layar yang bagus.
Tidak ada satu pun dari itu yang membuat sistemnya kebal. Sebelas dari dua belas bulan kalender positif dalam walk-forward, dan yang kedua belas tidak: Agustus 2025 mencatat profit factor 0.69 dan minus 21.6 persen. Dorong konfigurasi tetap yang sama ke tahun 2024, tahun dengan spread kira-kira dua kali normal relatif terhadap volatilitas, dan ia mengembalikan minus 67.1 persen pada fill nyata MetaTrader 5 dengan drawdown 74.2 persen. Catatan riset saya menyebutnya terang-terangan: tidak ada sizing yang sedang dikirim yang selamat dari tahun bertipe 2024. Menua dengan baik itu relatif, dan Sharpe jujur untuk satu siklus penuh ada di sekitar 1.8, bukan 3.8 seperti yang ditunjukkan jendela bagusnya.
Mengapa trader yang cakap tetap mandek?
Karena mereka mengoptimasi hasil padahal yang bisa diperbaiki adalah perilaku.
Ingin hasil yang lebih baik dan butuh keputusan yang lebih baik adalah dua masalah berbeda, dan hanya satu yang berada di hulu. Prediksi adalah keluaran. Prosesnyalah asetnya, dan itu satu-satunya bagian yang bisa diperiksa, diberi versi, dan diperbaiki. Ketika pasar berubah, proses yang baik memberi tahu saya harus melihat ke mana; prediksi yang baik tidak memberi tahu apa-apa.
Itulah alasan menaruh batasan di dalam kode alih-alih di dalam tekad. Pemeriksaan aturan dan batas risiko yang tertulis di kode tidak pernah mengalami minggu yang buruk.
Apa yang saya pelajari dari membangunnya, yang tidak diajarkan oleh riset?
Bahwa asumsinya ada di lapisan adapter.
Menulis lapisan eksekusi dengan MQL5 adalah pendidikan yang sebenarnya. Ide yang tampak bersih di riset baru menunjukkan cacatnya di tempat ia bertemu terminal sungguhan: perilaku fill, kasus tepi, jarak antara apa yang dikira engine terjadi dan apa yang benar-benar dilakukan broker. Karena itu engine riset dan Expert Advisor yang dikirim dipegang pada gerbang paritas byte demi byte pada aliran tick yang identik. Kalau keduanya tidak sepakat, salah satunya berbohong, dan saya lebih suka mengetahuinya di mesin saya sendiri.
Membangunnya juga cara saya tahu apa yang belum tercakup modelnya. Spread dibebankan pada setiap transaksi, tetapi slippage, latensi dan swap belum dimodelkan, jadi saya memperlakukan hasil live sebagai lebih tipis daripada backtest, bukan lebih tebal. Dan mekanisme berdiam diri pada hari-hari mahal, ketika biaya terukur relatif terhadap volatilitas terlalu tinggi, saat ini baru tervalidasi pada feed satu broker. Pada feed yang lebih lebar ia nyaris menyala permanen, sebuah informasi yang berguna dan sama sekali tidak enak untuk dipamerkan.
Saya selalu kembali ke kesimpulan yang sama. Ketahanan bukan sesuatu yang ditambahkan di akhir. Ia adalah hasil akumulasi dari setiap ide yang bersedia saya biarkan gagal lebih awal.
Pertanyaan yang sering diajukan
Apa yang membuat strategi trading robust, bukan sekadar menguntungkan? Robust berarti tidak sensitif terhadap pilihan yang Anda buat secara sembarang. Tes praktisnya adalah apakah hasilnya bertahan ketika Anda menggeser jendela sesi, pindah ke setelan parameter tetangga, mengganti feed broker, atau menjalankan tahun yang berbeda. Konfigurasi emas saya selamat dari pergeseran sesi dua sampai tiga jam dan dari pergantian feed, lalu gagal pada rezim biaya tahun 2024. Keduanya bagian dari gambaran yang sama.
Apakah mengoptimasi ulang strategi secara berkala itu ide bagus? Tidak, menurut pengujian saya. Pada fold walk-forward, konfigurasi tetap positif di lima dari lima fold sementara optimasi ulang per fold hanya empat dari lima. Optimasi ulang memberi parameter derau baru untuk di-fit. Ada strategi yang memang perlu refit berkala, tetapi itu seharusnya keputusan yang terukur, bukan kebiasaan bawaan.
Berapa banyak transaksi yang dibutuhkan agar sebuah backtest berarti? Tergantung distribusi return strategi itu sendiri, dan itulah yang diestimasi oleh perhitungan panjang rekam jejak minimum. Untuk konfigurasi emas saya, lantainya 192 transaksi dan sampel tervalidasinya 1,423. Strategi yang lebih berisik butuh sampel lebih besar untuk mengklaim hal yang sama, jadi tidak ada angka universal.
Mengapa tidak membuang saja bagian lemah dari strategi Anda? Kaki mean-reversion itu positif dan tidak berkorelasi dengan kaki breakout, jadi ia tetap menyala. Yang tidak ia dapatkan adalah klaim yang tidak bisa ia topang. Dengan 51 transaksi ia berada di bawah lantai signifikansi, dan menyumbang sekitar 1.4 persen dari laba bersih. Mempertahankannya dan mendeskripsikannya secara akurat adalah dua keputusan yang terpisah.
Apakah filter waktu sesi benar-benar memperbaiki sistem trading? Kadang ya, dan itu layak dibuktikan alih-alih diasumsikan. Mode gagalnya adalah memilih jam yang kebetulan bekerja, yang memperbaiki backtest apa pun dan tidak memperbaiki hal lain. Tes yang saya pakai adalah menggeser jendelanya dengan sengaja lalu memeriksa apakah hasilnya bertahan. Dalam putaran tes yang sama, satu aturan berbasis waktu memperbaiki hasil, satu netral, dan satu tidak memberi apa-apa lalu dibuang.
Apakah profit factor yang tinggi cukup untuk memercayai sebuah strategi? Tidak. Profit factor menggambarkan satu sampel dan mewarisi setiap keterbatasan jendela tempat ia diukur. Konfigurasi tetap yang sama di riset saya terbaca bagus di rezim yang menguntungkannya dan mengembalikan minus 67.1 persen pada fill nyata di tahun 2024. Itu bukan dua strategi, itu satu strategi yang diukur pada rentang sejarah yang lebih panjang dan kurang ramah.
Apakah Master Volume Profile punya rekam jejak live? Belum, dan saya tidak akan menyiratkan sebaliknya. Semua yang dipublikasikan sejauh ini adalah riset: backtest pada sekitar 160 juta tick broker nyata ditambah run konfirmasi MetaTrader 5. Slippage, latensi dan swap belum dimodelkan, jadi hasil live sebaiknya diperkirakan lebih tipis daripada backtest. Perlakukan setiap angka sebagai bukti historis atas sebuah hipotesis, bukan sebagai prediksi.
Apakah semua ini membuat trading menjadi aman? Tidak. Ini hanya menghilangkan beberapa cara tertentu untuk menjadi keliru, yang merupakan klaim jauh lebih kecil. Drawdown 20 sampai 30 persen realistis untuk konfigurasi yang dijelaskan di sini, dan saya merencanakan puncak 30 sampai 40 persen. Trading mengandung risiko termasuk risiko kerugian, dan sebanyak apa pun validasi tidak mengubah hipotesis menjadi kepastian.
Ditulis oleh KenKem, seorang software engineer dan founder dengan dua puluh tahun pengalaman, yang sedang belajar quantitative trading secara terbuka dan mempublikasikan seluruh prosesnya, termasuk penolakannya.
Artikel ini disusun dari post 85 sampai 96 dalam seri catatan pembangunan KenKem. Hanya untuk tujuan edukasi. Bukan nasihat keuangan. Semua angka yang dikutip adalah hasil backtest atau run konfirmasi, bukan rekam jejak live. Kinerja masa lalu tidak menjamin hasil di masa depan.