Minggu lepas anda menghantar notebook itu: isyarat yang sama, alam semesta yang sama, data BTCUSDT perp selama 14 bulan yang sama. Satu-satunya perubahan ialah pelaksanaan. Anda berhenti mengambil spread dan mula meletakkan bida rehat satu tick di dalam spread, lalu Sharpe meningkat daripada 0.42 kepada 2.14. Anda bertanya sama ada hasil itu nyata atau anda tersilap mengubah sesuatu.
Anda memang tersilap mengubah sesuatu. Saya mahu tunjukkan dengan tepat di mana silapnya, kerana pepijat itu hanya satu baris dan pengajarannya jauh lebih besar daripada baris itu.
Inilah peraturan isian anda, disalin daripada enjin anda:
if bar.low <= limit_price: fill(limit_price)
Maksudnya: jika pasaran mencatat dagangan pada atau di bawah harga saya dalam minit itu, pesanan saya terisi pada harga saya. Apa yang sebenarnya dinyatakan oleh peraturan ini ialah harga menyentuh paras anda. Sentuhan bukan isian. Di antara kedua-duanya ada barisan, tetapi anda memodelkan barisan itu seolah-olah kosong.
Apa yang berada di hadapan anda
Apabila anda meletakkan bida pada 84,120.0 untuk BTCUSDT perp, anda berada di belakang semua pesanan yang sudah menunggu di situ. Pada aras terbaik buku pesanan kontrak itu, jumlahnya biasanya antara 4 hingga 30 BTC bergantung pada waktu; median dalam tempoh sampel anda sekitar 12 BTC. Pesanan anda 0.4 BTC. Untuk pesanan anda didagangkan, penjual perlu menghentam aras itu dengan saiz agregat yang cukup untuk menghabiskan semua pesanan yang tiba sebelum anda, dan mereka perlu berbuat demikian sebelum pesanan di aras itu dibatalkan atau pasaran bergerak naik meninggalkannya.
Jadi soalan yang patut ditanya oleh backtest anda bukanlah “adakah harga mencecah 84,120.0” tetapi “adakah sekurang-kurangnya 12.4 BTC jualan pasaran dilaksanakan pada 84,120.0 semasa pesanan saya menunggu di situ.” Kedua-duanya peristiwa yang sangat berbeza. Dalam data anda, perbezaannya kira-kira tiga kali ganda.
Tiga peraturan isian, tiga strategi berbeza
Saya jalankan semula isyarat anda dengan kemasukan yang sama dan tiga model pelaksanaan. Alpha, yuran dan funding semuanya sama. Hanya logik isian yang berubah.
| Peraturan isian | Isian | Purata edge 60s selepas isian | Sharpe |
|---|---|---|---|
Sentuhan: low <= limit | 4,180 | +2.6 bp | 2.14 |
Penembusan ketat: low < limit - 1 tick | 1,712 | +0.4 bp | 0.61 |
| Simulasi barisan berdasarkan volum pada aras harga | 1,306 | +0.9 bp | 0.77 |
Baris tengah ialah pembaikan kasar yang biasanya dicuba dahulu: kira isian hanya jika pasaran didagangkan betul-betul melepasi harga anda, dengan anggapan bahawa jika harga melangkaui anda, pesanan anda mesti sudah dipadankan. Arah fikir itu betul dan ia menghapuskan sebahagian besar fantasi tadi. Namun, ia juga berat sebelah dengan cara yang buruk, seperti yang akan saya jelaskan nanti.
Baris bawah ialah model yang patut anda bina. Ia tidak memerlukan suapan L3 atau pembinaan semula setiap pesanan. Kebanyakan datanya sudah ada pada anda.
Simulasi barisan yang boleh dibina daripada aggTrades
Dapatkan strim dagangan agregat dan bukannya klines. Setiap rekod dagangan mengandungi harga, kuantiti, cap masa dan penanda sisi maker, yang memberitahu anda sama ada pihak agresor membeli atau menjual. Itu sudah cukup untuk simulasi pesanan pasif anda yang boleh digunakan:
- Apabila pesanan anda diletakkan, ambil gambaran saiz pesanan yang sedang menunggu pada harga anda. Jika anda hanya mempunyai suapan buku pesanan 100ms, gunakan gambaran terakhir; ralatnya kecil berbanding ralat yang sedang anda betulkan.
- Tetapkan
queue_ahead = resting_size. Ambil andaian pesimistik dan anggap anda paling belakang. Memang begitu, kecuali jika anda sendiri yang mewujudkan aras itu. - Jejaki strim dagangan. Setiap rekod jualan agresor pada atau di bawah harga anda mengurangkan
queue_aheadsebanyak kuantitinya. Apabila nilainya menjadi negatif, pesanan anda terisi pada harga anda, pada cap masa itu. - Jika harga bergerak satu tick menjauhi anda, jangan tetapkan semula barisan kepada sifar. Kurangkan saiznya secara beransur-ansur. Sesetengah pesanan di hadapan anda dibatalkan apabila aras itu tidak lagi terkini, sesetengahnya kekal. Pengurangan 30-40% bagi setiap saat penuh harga tidak lagi berada pada aras anda memberikan hasil yang lebih sepadan dengan pembinaan semula saya berbanding kedua-dua andaian ekstrem.
- Jika strategi anda akan membatalkan pesanan dan meletakkannya semula, modelkan pesanan baharu itu di belakang barisan aras baharu. Inilah langkah yang sering ditinggalkan, dan di sinilah fantasi yang berbaki bersembunyi.
Langkah 2 mungkin membuat anda mahu membantah saya. Ya, kadangkala anda berada dekat di hadapan kerana anda meletakkan pesanan sebaik sahaja aras itu terbentuk. Baik — ukur perkara itu, jangan mengandaikannya. Catat saiz pesanan yang sedang menunggu ketika pesanan anda diletakkan dan biarkan data menunjukkan bahagian pesanan anda yang benar-benar tiba awal. Dalam strategi anda, nilainya 11%, kerana isyarat anda muncul selepas pergerakan harga. Ini bermakna aras yang anda sertai sudah pun wujud dan sudah pun sesak.
Isian yang anda dapat ialah isian yang anda harap tidak berlaku
Sekarang bahagian yang paling penting, dan sebab peraturan penembusan ketat itu berat sebelah.
Fikirkan keadaan apabila bida anda habis dipadankan sepenuhnya. Ini berlaku apabila tekanan jualan cukup besar untuk menghabiskan seluruh aras itu. Jadi, menurut takrifnya, inilah saat pasaran bergerak turun melepasi harga anda. Isian yang paling pasti berlaku ialah isian yang terus meletakkan anda pada posisi rugi.
Asingkan isian mengikut cara ia berlaku dan ukur mark-out 60 saat:
| Jenis isian | Bahagian isian | Mark-out pada 60s |
|---|---|---|
| Aras didagangkan, harga melantun naik | 38% | +3.1 bp |
| Aras didagangkan, harga mendatar | 21% | +0.2 bp |
| Harga didagangkan melepasi aras sebanyak 2+ tick | 41% | −2.4 bp |
Backtest naif anda memberikan ketiga-tiga kelompok itu kepada anda dan menganggap semuanya percuma. Peraturan penembusan ketat memberikan anda hampir semuanya daripada kelompok ketiga, sebab itulah edge-nya merosot lebih teruk daripada simulasi barisan. Kedua-duanya tidak tepat. Simulasi barisan memberikan anda campuran yang realistik, dan campuran itulah inti keseluruhan strategi: pelaksanaan pasif memperoleh spread tetapi menanggung kos pemilihan adverse, dan nisbah antara kedua-duanya ialah strategi sebenar anda.
Kerangka pemikiran meja ekuiti lama masih terpakai: pesanan maker ialah opsyen percuma yang anda tulis untuk pasaran. Seseorang melaksanakannya apabila berbaloi untuk berbuat demikian. Backtest anda mengutip premium tetapi terlupa bahawa opsyen itu juga mempunyai bahagian pembayaran.
Dagangan yang tidak anda peroleh mengubah strategi, bukan sekadar kosnya
Inilah perkara yang paling saya mahu anda fikirkan. Apabila model pelaksanaan taker anda tidak tepat, anda mendapat dagangan yang betul pada harga yang salah, dan pelarasan yuran membetulkan sebahagian besar masalah itu. Apabila model pelaksanaan maker anda tidak tepat, anda mendapat set dagangan yang salah sepenuhnya. Kira-kira 2,900 daripada 4,180 kemasukan anda tidak pernah berlaku. Sesetengahnya ialah isyarat terbaik anda, pada lilin yang melonjak menembusi aras lalu berbalik. Bentuk pergerakan itulah yang menunjukkan pasaran bergerak pergi tanpa anda.
Jadi, cabang tidak terisi anda perlukan logik sebenar. Apa yang strategi lakukan apabila kemasukan tidak terisi sebelum isyarat luput? Kejar dengan pesanan taker dan bayar spread serta impak? Letak semula pada harga lebih rendah dan terima asas kemasukan yang berbeza? Langkau dagangan itu dan kekal tanpa posisi? Setiap pilihan menghasilkan lengkung ekuiti yang berbeza dengan ketara, dan tiada satu pun bermaksud “anggap pesanan anda terisi.” Dalam larian kami, penambahan peraturan mengejar yang jujur (ambil harga pasaran selepas 20 saat tanpa isian, dengan gelinciran dihadkan pada 3 bp) berjaya mendapatkan semula kira-kira satu pertiga daripada dagangan yang hilang dan kira-kira separuh daripada jurang antara Sharpe naif dengan Sharpe simulasi barisan. Hasil ini benar-benar menarik, dan ia hanya muncul apabila model isian cukup nyata untuk menjadikan soalan itu bermakna.
Pemeriksaan kewarasan ringkas, sepuluh minit: ambil log dagangan kertas langsung anda dan backtest bagi tempoh yang sama. Bandingkan kadar isian, bukan PnL. Jika backtest mengisi 100% pesanan rehat sedangkan dagangan kertas hanya mengisi 34%, itu bukan perbandingan strategi; itu pepijat model isian. Betulkan perkara itu sebelum melihat walau satu angka pulangan.
Dua perkara kecil lagi sementara saya bersama anda
Penolakan post-only. Jika anda menggunakan post-only untuk menjamin peringkat yuran maker dan buku pesanan bergerak antara keputusan anda dengan pengesahan bursa, pesanan itu akan ditolak dan bukannya dibiarkan menunggu. Dalam log dagangan kertas kami, perkara ini berlaku pada 3-6% percubaan BTCUSDT pada waktu biasa dan melebihi 15% dalam minit selepas pengumuman CPI AS. Pesanan yang ditolak bukan pesanan terisi mahupun pesanan rehat yang tidak terisi; ia dagangan yang tidak pernah wujud. Jika backtest anda tidak mempunyai keadaan itu, bilangan dagangan anda meningkat secara palsu tepat dalam keadaan pasaran yang paling anda ambil berat.
Pencegahan dagangan kendiri dan kesan pesanan anda. Dengan 0.4 BTC, anda tidak menggerakkan BTCUSDT, jadi abaikan perkara ini. Tetapi anda ada menyebut mahu menjalankan strategi ini pada perp alt bermodal pasaran sederhana, yang nilai nosional buku terbaiknya sering di bawah $15k. Di situ, pesanan anda memang sebahagian besar barisan, dan angka barisan di hadapan yang anda rekod merangkumi kesan kehadiran pesanan terakhir anda. Apabila saiz anda melebihi kira-kira 10% aras pesanan rehat, simulasi perlu mengambil kira tindak balas peserta lain terhadap anda. Terus terang, pada tahap itu saya lebih percaya pada dagangan kertas daripada sebarang simulasi yang anda atau saya boleh tulis.
Jalankan semula dengan simulasi barisan dan hantarkan jadual mark-out yang diasingkan mengikut jenis isian. Jika kelompok lantunan masih membawa sebahagian besar edge dan kelompok penembusan tidak menghakis semuanya, mungkin ada sesuatu yang berbaloi untuk diuji dalam dagangan kertas. Jika semuanya bergantung pada 2,900 isian yang sebenarnya tidak akan anda peroleh, lebih baik mengetahuinya sekarang daripada mengetahuinya selepas empat minggu melihat akaun kertas tidak melakukan apa yang dijanjikan notebook.
← Semua catatan


