Backtest dapat melaporkan pengisian pada harga yang tak pernah ditampilkan pasar. Biasanya, simulator menyimpulkan eksekusi yang tampak masuk akal dari data yang tidak lengkap: harga tertinggi dan terendah suatu bar, titik tengah, atau harga limit yang tersentuh oleh satu transaksi. Akibatnya, catatan transaksi terlihat presisi, tetapi menyembunyikan apa yang sebenarnya ditawarkan pasar.
Mulailah dengan menanyakan harga mana yang mungkin berinteraksi dengan order Anda. Bar transaksi terakhir menunjukkan harga-harga yang diperdagangkan selama suatu interval. Bar itu tidak memberi tahu berapa bid dan ask saat order Anda tiba, berapa banyak yang tersedia pada harga tersebut, atau apakah order Anda bisa mencapai posisi terdepan dalam antrean.
Mengapa backtest saya menunjukkan pengisian di luar harga pasar?
Pertama, pastikan arti “di luar” yang dimaksud. Pengisian beli di bawah harga terendah bar atau pengisian jual di atas harga tertingginya jelas merupakan kesalahan pencatatan atau penentuan waktu. Pengisian di dalam rentang harga tertinggi-terendah pun bisa saja fiktif: harga tersebut mungkin diperdagangkan sebelum order ada, di sisi spread yang berlawanan, atau dalam jumlah yang terlalu kecil untuk mengisi order Anda.
Bayangkan bar 1 menit dengan harga pembukaan 100.00, harga terendah 99.80, dan penutupan 100.10. Strategi Anda membaca bar yang sudah selesai, mengirim order beli, lalu simulator mengisinya pada 99.80. Harga terendah itu mungkin tercapai di awal menit, 50 detik sebelum sinyal muncul. Bar tersebut tidak membuktikan bahwa harga 99.80 tersedia setelah keputusan dibuat.
| Data yang tersedia | Informasi yang dapat dipastikan | Informasi yang tidak dapat dipastikan |
|---|---|---|
| Bar OHLCV | Rentang harga transaksi dan volume yang teramati selama suatu interval | Urutan harga, bid dan ask, atau ketersediaan saat order tiba |
| Catatan transaksi | Eksekusi yang dilaporkan, beserta stempel waktu dan harga | Likuiditas yang belum dieksekusi atau posisi Anda dalam antrean |
| Kuotasi top-of-book | Bid dan ask terbaik yang ditampilkan pada waktu pengambilan sampel | Kedalaman di luar level terbaik atau apakah kuotasi bertahan di antara waktu pengambilan sampel |
| Peristiwa order book | Perubahan kedalaman yang ditampilkan dan peristiwa antrean, bergantung pada cakupan feed | Likuiditas tersembunyi, akses ke venue, atau prioritas yang terjamin |
Penyebab umum lainnya adalah mengacaukan harga titik tengah dengan harga yang bisa dieksekusi. Jika kuotasinya bid 99.99 dan ask 100.01, harga beli pada titik tengah 100.00 tampak rapi di laporan. Order beli yang langsung dieksekusi umumnya membayar harga ask, ditambah dampak dari ukurannya. Menganggap titik tengah sebagai harga pengisian diam-diam menghapus separuh spread.
Bisakah order limit terisi hanya karena pasar menyentuh harganya?
Sentuhan harga adalah bukti bahwa transaksi tercatat pada harga limit tersebut. Namun, itu bukan bukti bahwa order Anda yang menunggu akan tereksekusi. Jika ada order lain di depan Anda, volume transaksi pada harga itu mungkin terlalu kecil untuk mencapai posisi Anda dalam antrean. Transaksi tersebut juga mungkin berasal dari venue lain, sementara order Anda menunggu di tempat lain.
Misalkan limit beli Anda 50.00, lalu pasar memperdagangkan 200 saham pada harga tersebut setelah Anda memasang order. Simulator berbasis sentuhan harga mengisi semua 500 saham. Model yang lebih berhati-hati menanyakan berapa banyak yang diperdagangkan pada atau melewati 50.00 setelah order tiba, lalu memperhitungkan perkiraan antrean di depan. Tanpa data order book pada tingkat order, posisi antrean itu hanyalah asumsi. Asumsi tersebut harus terlihat dalam hasil, bukan diselundupkan seolah-olah pasti.
Untuk sistem riset kecil, saya lebih memilih menyatakan asumsi itu secara jelas dan menguji berbagai skenario daripada berpura-pura bahwa data candle mengungkap prioritas antrean. Rentang yang tepat bergantung pada venue, ukuran order, dan frekuensi strategi bertransaksi. Saham yang sepi saat pembukaan pasar dan kontrak kripto yang tipis pada pukul 03:00 UTC menghadirkan masalah eksekusi yang berbeda.
Bagaimana memilih model pengisian untuk data bar?
Sesuaikan model dengan data sekaligus klaim strategi. Backtest berbasis bar tetap berguna untuk strategi yang bergerak lambat, tetapi pengisiannya harus sesuai dengan informasi yang benar-benar ditunjukkan bar tersebut.
- Tetapkan waktu keputusan dan kedatangan order. Jika sinyal menggunakan harga penutupan bar, kirim order setelah penutupan itu. Simulasikan eksekusi berdasarkan interval atau kuotasi berikutnya yang tersedia, bukan berdasarkan harga terendah lebih awal pada bar yang sudah selesai.
- Gunakan sisi spread yang tepat. Untuk beli yang langsung dieksekusi, mulai dari ask; untuk jual, dari bid. Jika hanya memiliki bar transaksi, perkirakan spread dari sumber terpisah atau laporkan bahwa model tidak memasukkannya.
- Batasi pengisian berdasarkan likuiditas yang masuk akal. Terapkan batas partisipasi pada volume teramati serta masukkan biaya dan dampak pasar. Total volume bar bukan berarti seluruh volume itu tersedia pada harga yang Anda pilih.
- Uji asumsi dalam kondisi berat. Bandingkan pengisian pada pembukaan berikutnya dengan slippage konservatif, lalu uji apakah hasilnya tetap bertahan dengan eksekusi yang lebih buruk. Jangan menyetel model pengisian sampai strategi menang.
Ini adalah pilihan pemodelan, bukan cara untuk menemukan satu harga pengisian yang benar dari data yang tidak lengkap. Jika strategi bergantung pada perolehan beberapa basis poin, data bar mungkin bukan bukti yang memadai untuk mendukung klaim tersebut.
Bagaimana menemukan asal pengisian mustahil dalam backtest?
Telusuri satu transaksi yang mencurigakan dari sinyal hingga buku besar. Simpan stempel waktu keputusan, stempel waktu pengiriman order, waktu kedatangan simulasi, observasi pasar yang dipilih, harga pengisian, kuantitas yang terisi, dan biaya sebagai kolom terpisah. Lalu periksa, secara berurutan:
- Apakah fitur dihitung menggunakan data dari bar yang belum selesai pada saat keputusan dibuat?
- Apakah pengisian menggunakan harga tertinggi, terendah, atau penutupan bar meskipun harga itu terjadi sebelum order tiba?
- Apakah order beli dicocokkan dengan bid, atau order jual dengan ask?
- Apakah kuantitas simulasi melebihi ukuran kuotasi yang tersedia atau batas partisipasi model?
- Apakah pembulatan harga, ukuran tick kontrak, dan biaya diterapkan setelah harga pengisian dipilih?
Jika Anda tidak bisa menjawab pertanyaan tersebut dari catatan transaksi, backtest Anda kekurangan bukti eksekusi. Tambahkan kolom-kolom itu, putar ulang beberapa transaksi secara manual dengan data mentah, lalu periksa apakah pengisian yang dilaporkan mungkin terjadi menurut model yang Anda maksud. Kurva ekuitas yang mulus tidak akan mendeteksi harga yang hanya ada di dalam simulator.
← Semua artikel


