6 Oktober 2026 · riset

Mengapa backtest saya bertransaksi pada harga yang tak pernah ditampilkan pasar?

Mengapa backtest saya bertransaksi pada harga yang tak pernah ditampilkan pasar?

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 tersediaInformasi yang dapat dipastikanInformasi yang tidak dapat dipastikan
Bar OHLCVRentang harga transaksi dan volume yang teramati selama suatu intervalUrutan harga, bid dan ask, atau ketersediaan saat order tiba
Catatan transaksiEksekusi yang dilaporkan, beserta stempel waktu dan hargaLikuiditas yang belum dieksekusi atau posisi Anda dalam antrean
Kuotasi top-of-bookBid dan ask terbaik yang ditampilkan pada waktu pengambilan sampelKedalaman di luar level terbaik atau apakah kuotasi bertahan di antara waktu pengambilan sampel
Peristiwa order bookPerubahan kedalaman yang ditampilkan dan peristiwa antrean, bergantung pada cakupan feedLikuiditas 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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:

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.

backtestingdata pasareksekusirekayasa data
← Semua artikel