4 September 2026 · ujian semula

Henti rugi dan sasaran anda kedua-duanya berada dalam bar yang sama. Yang mana dipilih oleh ujian semula?

Henti rugi dan sasaran anda kedua-duanya berada dalam bar yang sama. Yang mana dipilih oleh ujian semula?

Posisi beli dari 84,120. Henti rugi pada 84,036, sasaran pada 84,271. Bar minit seterusnya muncul: buka 84,118, tinggi 84,290, rendah 84,010, tutup 84,240.

Kedua-dua paras berada dalam bar itu. Henti rugi tersentuh dan sasaran tersentuh, tetapi empat angka OHLC langsung tidak memberikan maklumat tentang yang mana berlaku dahulu. Ujian semula anda tetap menghasilkan satu angka. Di suatu tempat dalam gelung kod, ada baris yang membuat keputusan itu — mungkin baris yang tidak anda anggap sebagai andaian pemodelan semasa menulisnya.

Inilah punca tunggal terbesar prestasi palsu yang saya lihat dalam strategi jangka pendek, mengatasi yuran dan gelinciran, kerana ia tidak kelihatan seperti satu andaian. Ia kelihatan seperti kerja rutin dalam kod.

Cara salah pertama: biarkan rantaian if membuat keputusan

Bentuk yang lazim:

if bar.high >= target:
    exit(target, "tp")
elif bar.low <= stop:
    exit(stop, "sl")

Tiada siapa memilih "sasaran diselesaikan sebelum henti rugi." Semakan sasaran ditaip dahulu kerana itulah laluan yang diharapkan dan itulah yang sedang anda fikirkan. Tukar susunan kedua-dua cabang itu, lalu lengkung ekuiti berubah; itu sahaja sudah menunjukkan bahawa sebahagian P&L strategi anda bergantung pada editor yang anda gunakan.

Saya menjalankan strategi scalping pulih ke min yang sengaja biasa-biasa pada kontrak perpetual BTCUSDT, menggunakan bar 1 minit selama tiga bulan, 4,812 dagangan, henti rugi 0.10% dan sasaran 0.18% daripada harga masuk. Isyarat dan yuran sama; hanya konvensyen pemutus seri yang berubah.

12.6%dagangan menyentuh kedua-dua paras dalam satu bar
2.31Sharpe, sasaran diselesaikan dahulu
0.18Sharpe, henti rugi diselesaikan dahulu
0.94Sharpe, diselesaikan menggunakan bar 1 saat

Satu perlapan daripada dagangan menentukan keseluruhan hasil. Begitulah kira-kira bagi pasangan henti rugi dan sasaran yang rapat: dagangan yang kabur ialah dagangan yang harganya bergerak ke dua-dua arah, iaitu kebanyakan dagangan yang menarik, dan setiap satunya bernilai jarak penuh antara henti rugi dengan sasaran, bergantung pada lambungan syiling. 12.6% dagangan × julat 0.28% bersamaan 3.5% daripada pusing ganti nosional kasar bagi setiap unit sampel, jauh mengatasi kelebihan sebenar strategi itu.

Kadar ini bergantung pada saiz bar berbanding jarak antara paras anda, dan cepat meningkat apabila bar semakin panjang. Henti rugi dan sasaran sama, isyarat sama, tetapi data disampel semula:

Tempoh barDagangan dengan kedua-dua paras dalam satu barSharpe (sasaran dahulu)
1s0.3%0.91
1m12.6%2.31
5m34%3.60
15m49%4.42
1h71%5.88

Perhatikan maksud sebenar jadual itu. Bar yang lebih kasar menjadikan ujian semula nampak lebih baik. Naluri setiap penyelidik mengatakan bar sejam lebih konservatif: kurang hingar, kurang terlebih padan pada mikrostruktur. Tetapi dengan konvensyen intrabar yang memihak kepada anda, bar yang lebih kasar cuma kotak lebih besar yang membolehkan anda mengandaikan nasib menyebelahi anda. Dengan bar 1h, tujuh daripada sepuluh dagangan bergantung sepenuhnya pada konvensyen. Ujian semula itu bukan menguji strategi; ia menguji susunan dua pernyataan `if` sebanyak 3,400 kali.

Cara salah kedua: anggap henti rugi diisi pada harga henti rugi

Katakan anda sudah membetulkan susunannya. Henti rugi diselesaikan dahulu, anda merekodkan kerugian tepat 0.10% ditambah yuran taker, lalu berasa teliti. Namun dua perkara berasingan masih salah.

Pertama, henti rugi ialah pencetus, bukan harga isian. Di Binance USDⓈ-M, pesanan STOP_MARKET menjadi pesanan pasaran sebaik sahaja syarat pencetus dipenuhi, lalu mengambil kecairan yang tersedia dalam buku pesanan. Dalam minit yang tenang, gelincirannya cuma satu atau dua tick. Dalam minit yang benar-benar mencetuskan henti rugi anda — minit dengan badan lilin 40 mata dan gelombang pembubaran di bawahnya — buku pesanan nipis tepat pada sisi yang anda lintasi. Dalam sampel saya, apabila pencetus henti rugi dipadankan dengan pita tick, isian median berada 1.4 bps melepasi pencetus dan persentil ke-95 ialah 11 bps. Dengan henti rugi 10 bps, ekor taburan itu menambah kos sebanyak satu persepuluh daripada risiko yang anda sangka sudah ditetapkan.

Perkara kedua lebih halus dan khusus kepada kontrak perpetual: harga mana yang mencetuskannya. Binance menetapkan harga mark sebagai harga lalai untuk pencetus pesanan henti rugi, dan harga mark dibina daripada indeks serta asas yang dilicinkan, bukannya daripada dagangan terakhir di venue itu. Siri OHLC anda menggunakan harga terakhir. Kedua-duanya siri yang berbeza dan paling banyak menyimpang semasa peristiwa yang tepat mencetuskan henti rugi.

Harga terakhir (kline anda)Harga mark (pencetus lalai)
Sumberdagangan di venue iniindeks beberapa venue + asas
Tingkah laku sumbupergerakan penuhdiredam dengan ketara
Penyimpangan lazim1–3 bps ketika tenang, 20–35 bps dalam minit gelombang pembubaran
Kesan pada ujian semulahenti rugi yang tercetus sedangkan sepatutnya tidak, dan sebaliknya

Jadi, sumbu 25 bps pada pita harga terakhir menyebabkan anda dihentikan dalam ujian semula, sedangkan harga mark langsung tidak menghampiri pencetus anda dalam jarak 10 bps. Atau keadaan sebaliknya, pada hari indeks bergerak tetapi venue anda ketinggalan. Jika anda menetapkan workingType kepada CONTRACT_PRICE, sekurang-kurangnya tingkah laku dagangan langsung sepadan dengan data anda; biasanya itulah pilihan yang tepat untuk penyelidik, kerana simulasi pencetus berdasarkan harga mark dengan betul memerlukan siri kedua dibawa melalui seluruh enjin isian anda.

Versi kejadian ini yang paling saya ingat: seseorang dalam pasukan kami "menambah baik" strategi dengan mengalihkan ambil untung daripada 0.18% kepada 0.21%. Sharpe meningkat daripada 2.3 kepada 3.1. Tiada kelebihan baharu. Sasaran itu cuma beralih ke luar bahagian tebal taburan sumbu 1 minit, maka lebih sedikit dagangan masuk ke dalam kelompok kabur yang kodnya diam-diam memberikan kemenangan. Mereka mengoptimumkan pemutus seri.

Cara salah ketiga: sentiasa andaikan keadaan terburuk dan anggap itu konservatif

Reaksi spontan ialah bersikap pesimis. Jika kedua-dua paras tersentuh, ambil henti rugi. Selesai, tiada lagi optimisme, teruskan.

Dulu saya juga buat begitu. Ia lebih baik daripada pilihan satu lagi, tetapi masih salah atas dua sebab.

Ia mematikan strategi yang sebenarnya baik. Penyelesaian pesimis pada 12.6% dagangan menurunkan Sharpe strategi ini sebanyak 2.1 mata berbanding 0.94 yang diperoleh apabila diselesaikan menggunakan tick. Jika angka sebenar ialah 0.94 tetapi konvensyen anda melaporkan 0.18, anda buang idea itu lalu mengusahakan sesuatu yang lebih buruk. Konservatisme yang tersasar sebanyak dua mata Sharpe bukan konservatisme; itu hingar dengan sikap bermoral.

Lebih buruk lagi, ia merosakkan pengoptimuman. Berikan sapuan parameter pemutus seri yang pesimis, lalu pengoptimum akan belajar mengelakkan kekaburan kerana kekaburan kini menjadi penalti mutlak. Ia akan cenderung memilih henti rugi yang luas dan sasaran yang dekat, atau bar perlahan yang jarang memuatkan kedua-dua paras serentak, lalu memberikan parameter yang dipilih berdasarkan konvensyen isian anda dan bukannya pasaran. Kegagalannya sama seperti versi yang terlalu murah hati, cuma tandanya berlawanan, dan sama-sama tidak kelihatan dalam helaian prestasi.

Panduan ringkas yang kami gunakan terlebih dahulu: jika stop_distance + target_distance lebih kecil daripada julat persentil ke-75 bagi tempoh bar anda, andaian intrabar anda memberi kesan lebih besar kepada P&L berbanding isyarat anda. Kira kedua-dua angka itu. Hanya empat baris kod diperlukan, dan semakan ini telah menamatkan lebih banyak semakan strategi berbanding mana-mana semakan tunggal yang lain.

Apa yang benar-benar berkesan

Laluan harga dalam bar ialah data. Dapatkannya, atau hadkan kesan perkara yang tidak dapat anda peroleh.

  1. Selesaikan menggunakan siri paling terperinci yang anda ada. Binance aggTrades bagi minit yang berkaitan cuma beberapa ratus baris dan memberikan jawapan muktamad: paras mana disentuh dahulu, dan pada harga berapa sapuan itu diisi. Anda tidak perlukan data tick untuk seluruh ujian semula, hanya untuk bar yang kabur. Dalam sampel saya, jumlahnya 606 minit daripada 129,600. Itu muat turun kecil, bukannya projek infrastruktur.
  2. Jika data tick tiada, turunkan satu atau dua aras rangka masa untuk penyelesaian sahaja. Gunakan isyarat pada 15m, dan selesaikan keluar menggunakan bar 1s atau 1m. Kekaburan turun daripada 49% kepada pecahan kecil peratus, dan baki kes cukup kecil untuk diabaikan dengan jujur.
  3. Sentiasa laporkan julatnya. Jalankan setiap ujian semula dua kali, dengan penyelesaian optimistik dan pesimistik, kemudian paparkan kedua-dua nilai Sharpe di sebelah nilai yang diselesaikan. Jurang itu ialah ketidakpastian intrabar anda dan patut dipaparkan dalam helaian prestasi, bersebelahan selang keyakinan bagi Sharpe itu sendiri. Jika julatnya 0.2–2.3, tiada kesimpulan dalam julat itu yang boleh dipercayai.
  4. Jejaki kadar kekaburan sebagai metrik utama. Kadar kami dipaparkan di bahagian atas setiap kad strategi, bersebelahan bilangan dagangan dan pusing ganti. Kadar melebihi kira-kira 5% bermaksud logik keluar, bukannya logik masuk, yang sedang diuji.
  5. Modelkan pencetus secara berasingan daripada isian. Cetuskan berdasarkan siri harga yang benar-benar digunakan oleh venue; isi pada harga pencetus ditambah gelinciran yang diambil daripada taburan terkalibrasi pita dagangan, bukannya pada harga pencetus itu sendiri.

Ekuiti menghadapi masalah yang sama dalam bentuk berbeza. Henti rugi pada 62.00 bagi saham yang membuka jurang ke 58.40 semalaman tidak diisi pada 62.00; isian berlaku pada suatu harga di bawah harga pembukaan. Ujian semula bar harian yang merekodkan gelinciran −$0.00 bagi jurang melepasi henti rugi akan dengan senang hati memberitahu anda bahawa lapisan henti rugi mengurangkan susut nilai. Sebenarnya tidak. Strategi itu cuma tidak pernah diuji pada hari yang penting. Penggantungan dagangan juga menyebabkan hal serupa: lelongan pembukaan semula ialah saat henti rugi anda benar-benar dilaksanakan, pada harga yang tidak ditunjukkan oleh paras rendah bar.

Semua ini bukan perkara luar biasa. Ia sekadar pengiktirafan bahawa bar ialah ringkasan, dan strategi henti rugi serta sasaran ialah pertaruhan tentang susunan peristiwa yang dibuang oleh ringkasan itu. Apabila enjin dagangan kertas akhirnya menguji strategi itu pada pita langsung, pita tersebut menentukan susunan itu, dan langsung tidak peduli cabang pernyataan if yang anda taip dahulu.

isian intrabarpesanan hentiujian semulaniaga hadapan kriptomikrostruktur pasaran
← Semua catatan