Fungsi itu dipanggil enter_pack. Itu sepatutnya menjadi amaran. Seorang ejen penyelidikan telah menulis cash-and-carry BTC: apabila perpetual didagangkan lebih daripada lapan basis point di atas spot, beli spot, short perp, duduk diam. Funding dan basis akan melakukan yang selebihnya. Backtest mengisi kedua-dua kaki dalam milisaat yang sama, pada mid, ditambah satu tick kesopanan. Lengkung ekuiti adalah sebuah tangga. Tiada siapa yang akan memanggilnya mengujakan. Itulah titik jualannya.
Kami naikkan ke dagangan kertas pada hari Isnin.
Isnin: pek yang sentiasa terisi
Isyarat pertama mendarat pada 11:17 UTC. Basis pada skrin ialah 9.4 bps, perp mahal. Dalam backtest, enter_pack mengembalikan dua fill dan residual sifar. Dalam dagangan kertas ia mengembalikan fill spot 0.40 BTC pada ask, dan short yang berehat pada perp yang tidak berdagang.
Spot telah membayar yuran taker 4 bp dan spread kira-kira 1 bp. Harga perp yang kami mahukan masih ada pada buku, kemudian ia tiada. Dua puluh saat kemudian basis yang dipetik ialah 5 bps, kerana kami baru sahaja mengangkat spot. Empat puluh saat kemudian perp terisi, selepas pergerakan. Kami sudah terpek. Kami terpek pada basis yang tidak lagi membayar kos masuk dan keluar.
Backtest akan membukukan "+9.4 bps carry, residual 0." Blotter mempunyai kos taker spot 4 bps, long tanpa lindung nilai selama 40 saat, dan jurang kemasukan kira-kira 5. Saya mempunyai sampel satu dan, masih, terlalu yakin dengan tangga itu.
Selasa: kami buka fungsi itu
enter_pack mengambil senarai kaki dan mid sasaran. Ia berulang, mengisi setiap kaki pada mid * (1 ± slip), dan menulis satu baris portfolio. Tiada cap masa kedua. Tiada cabang di mana kaki dua tidak wujud. Ujian unit menegaskan residual == 0.
Itu ujian yang membuat kita berasa seperti orang dewasa. Ia tidak akan pernah gagal.
Kami pecahkan pek kepada dua order dengan keadaan masing-masing: submitted, partial, filled, canceled. Incomplete menjadi objek kelas pertama. Replay sejarah masih tidak mempunyai buku sebenar, jadi kami curang. Tunda fill kedua dengan cabutan daripada tempoh menunggu Isnin (min 26 saat, ekor yang saya tidak suka), dan hanyutkan harganya mengikut apa yang spot lakukan dalam tetingkap itu. Kasar, tetapi tangga itu menumbuhkan takuk sebelum makan tengah hari: pek yang masuk pada 3 bps, pek yang tidak pernah menjadi pek.
Rabu: tiga saat, kemudian buang
Jika kaki kedua tidak masuk dalam masa tiga saat, flatten yang pertama. Kami sepatutnya bermula di situ. Ia kedengaran konservatif sehingga anda kira kos abort. Flatten bermaksud anda menyeberang spot untuk masuk dan anda menyeberangnya untuk keluar. Dua yuran taker, dua spread, tiada carry, tiada funding. Dalam replay yang ditulis semula abort itu tidak jarang. Mereka berkumpul pada bar di mana basis kelihatan paling "nyata," yang biasanya bar di mana sesuatu sudah mengalir melalui spot.
Menjelang malam Rabu kami mempunyai tujuh belas isyarat dagangan kertas untuk dipertikaikan.
| Backtest, pagi Isnin | Dagangan kertas, menjelang Rabu | |
|---|---|---|
| Kemasukan | Kedua-dua kaki pada mid, satu cap masa | Spot pada ask; perp 5–40s kemudian, atau tidak pernah |
| Residual | Sentiasa 0 | Tanpa lindung nilai pada 10 daripada 17 isyarat |
| Yuran pada dagangan yang berjalan | Dua taker | Dua taker, atau empat jika kami abort |
| Pemacu PnL | Basis + funding | Apa sahaja yang spot lakukan semasa kami menunggu |
Seorang rakan sekerja masih mempunyai notebook yang menganggap pek sebagai produk tersenarai, BTC_CARRY, dengan "cukai pelaksanaan" rata 2 bp. Saya suka notebook itu. Ia menghasilkan tangga yang sama seperti ejen. Cukai ialah min. Orphan ialah taburan. Min tidak digilis dalam jam yang nipis; 0.40 BTC spot tertinggal boleh.
Khamis: tertinggal, kemudian kopi
Tiga saat membatalkan hampir segala-galanya apabila kami juga menunggu dalam queue. Kami longgarkan dagangan kertas kepada lima belas. Pada 02:11 UTC Khamis, spot terisi dan perp tidak. Saya masih dalam fasa duka "ia akan berehat, ia akan terangkat" apabila saya pergi membuat kopi.
02:11:08 terisi BTCUSDT 0.40 beli
02:11:08 dihantar BTCUSDT-PERP 0.40 jual, post-only
02:11:41 masih working
02:26:00 tanda residual −18.1 bps
BTC turun 18 bps dalam tetingkap yang senyap. Residual ialah keseluruhan dagangan. Funding, apabila ia dicetak, mengkreditkan perp yang kami tidak miliki. Spot hanya duduk di situ sebagai long. Laluan semalaman backtest asal tidak pernah mengandungi posisi satu kaki, jadi ia tidak pernah bertanya soalan yang kami tanya pada setiap buku lain: apakah bar terburuk yang tertinggal ini boleh cetak, dan di manakah stop untuk posisi yang kami tidak berniat untuk pegang?
Tujuh pek penuh itu pun bukan wira. Menjelang kaki kedua dicetak, angkatan spot kami sendiri sudah menekan indeks, dan basis kemasukan adalah 3–5 bps lebih buruk daripada snapshot yang mencetuskan isyarat. Ambang lapan-bps ialah nombor tentang sebuah skrin.
Apa yang akan kami langkau lain kali
Kami tidak akan hantar multi-leg sebagai fungsi fill tunggal. Peraturan yang sama untuk carry perp-spot, calendar, atau call vertical yang ejen hantar sebagai dua limit lalu meraikan apabila kedua-duanya "terisi" pada mid.
- Keadaan order setiap kaki, termasuk partial. Anggap pek sebagai induk dua tiket.
- Pemasa max-orphan yang benar-benar mencetus, dan laluan flatten yang membayar dua spread semasa keluar.
- Mark-to-book pada residual, dengan stop yang disaizkan untuk yang tertinggal. Net yang terpek ialah nosional yang salah.
- Tiada carry dikreditkan, tiada funding diakru, sehingga kedua-dua kaki masuk. Tidak lengkap ialah tidak lengkap.
- Tolak mid-on-mid sebagai lalai untuk apa-apa yang mempunyai dua tiket. Jika anda mesti meneka, teka lebih buruk pada kaki nipis dan lebih kemudian pada fill kedua.
Dan kami tidak akan biarkan test_pack_is_atomic masuk ke repo. Atomic ialah sifat enjin padanan, bukan fungsi pembantu. BTC spot dan BTC perpetual ialah dua buku yang kadang-kadang berima. Dagangan kertas ialah tempat mereka berhenti berima, yang merupakan satu-satunya sebab tangga itu pernah menarik.



