Fonksiyonun adı enter_pack idi. Asıl uyarı bu olmalıydı. Bir araştırma ajanı bir BTC nakit-ve-taşıma yazmıştı: perpetual spot'un üzerinde sekiz baz puandan fazla işlem gördüğünde spot al, perp'i shortla, otur. Fonlama ve baz gerisini hallederdi. Backtest her iki bacağı aynı milisaniyede, mid'den, bir tick'lik nezaket payıyla gerçekleştirdi. Özsermaye eğrisi bir merdivendi. Kimse buna heyecan verici demezdi. Zaten satış noktası da buydu.
Pazartesi günü kâğıt ticarete yükselttik.
Pazartesi: her zaman gerçekleşen paket
İlk sinyal 11:17 UTC'de geldi. Ekrandaki baz 9.4 bps, perp pahalıydı. Backtest'te enter_pack iki gerçekleşme ve sıfır artık döndürdü. Kâğıtta ise ask'ten 0.40 BTC'lik bir spot gerçekleşmesi ve işlem görmeyen, bekleyen bir perp short'u döndürdü.
Spot 4 bp taker ücreti ve yaklaşık 1 bp spread ödemişti. İstediğimiz perp fiyatı hâlâ defterdeydi, sonra yoktu. Yirmi saniye sonra kote baz 5 bps idi, çünkü az önce spot'u kaldırmıştık. Kırk saniye sonra perp gerçekleşti, hareketten sonra. Paketlenmiştik. Artık girmenin ve çıkmanın maliyetini karşılamayan bir bazda paketlenmiştik.
Backtest "+9.4 bps carry, artık 0." kaydederdi. Blotter'da 4 bps spot taker maliyeti, 40 saniyelik korunmasız bir long ve yaklaşık 5'lik bir giriş boşluğu vardı. Örneklemim birdi ve yine de merdivene fazla güveniyordum.
Salı: fonksiyonu açtık
enter_pack bir bacak listesi ve hedef bir mid alıyordu. Döngüye girip her bacağı mid * (1 ± slip) seviyesinden gerçekleştiriyor ve tek bir portföy satırı yazıyordu. İkinci bir zaman damgası yoktu. İkinci bacağın var olmadığı bir dal yoktu. Birim test residual == 0 olduğunu doğruluyordu.
Bu, insanı yetişkin hissettiren türden bir test. Asla başarısız olmaz.
Paketi kendi durumuna sahip iki emre böldük: gönderildi, kısmi, gerçekleşti, iptal. Eksik, birinci sınıf bir nesne oldu. Tarihsel replay'de hâlâ gerçek bir defter yoktu, o yüzden hile yaptık. İkinci gerçekleşmeyi Pazartesi'deki beklemeden çekilen bir süre kadar geciktir (ortalama 26 saniye, hoşlanmadığım bir kuyruk) ve fiyatını o pencerede spot ne yaptıysa o kadar kaydır. Kaba, ama öğle yemeğinden önce merdivende kertikler belirdi: 3 bps'ten giren paketler, hiç paket haline gelmeyen paketler.
Çarşamba: üç saniye, sonra boşalt
İkinci bacak üç saniye içinde gerçekleşmezse, birincisini kapat. Oradan başlamalıydık. İptalin fiyatını çıkarana kadar kulağa muhafazakâr gelir. Kapatmak, girmek için spot'ta crossing ettiğin ve çıkmak için bir daha crossing ettiğin anlamına gelir. İki taker ücreti, iki spread, carry yok, fonlama yok. Yeniden yazılan replay'de bu iptaller nadir değildi. Bazın en "gerçek" göründüğü barlarda kümeleniyorlardı; ki bu genellikle spot'tan zaten bir şeylerin aktığı barlardır.
Çarşamba gecesi elimizde tartışacak on yedi kâğıt sinyal vardı.
| Backtest, Pazartesi sabahı | Kâğıt, Çarşamba itibarıyla | |
|---|---|---|
| Giriş | Her iki bacak mid'den, tek zaman damgası | Spot ask'ten; perp 5–40s sonra, ya da hiç |
| Artık | Her zaman 0 | 17 sinyalin 10'unda korunmasız |
| İşleyen bir işlemde ücretler | İki taker | İki taker, iptal edersek dört |
| PnL kaynağı | Baz + fonlama | Beklerken spot'un yaptığı her şey |
Bir meslektaşımızın hâlâ paketi listelenmiş bir ürün gibi, BTC_CARRY, düz 2 bp'lik bir "gerçekleştirme vergisi"yle ele alan bir notebook'u var. O notebook'u severdim. Ajanın ürettiği merdivenin aynısını çıkarıyordu. Bir vergi bir ortalamadır. Yetimler bir dağılımdır. Ortalamalar sığ bir saatte ezilmez; 0.40 BTC artakalan spot ezilebilir.
Perşembe: artakalan, sonra kahve
Kuyrukta da beklemeye başladığımızda üç saniye neredeyse her şeyi iptal etti. Kâğıdı on beşe gevşettik. Perşembe 02:11 UTC'de spot gerçekleşti, perp gerçekleşmedi. Kahve yapmaya gittiğimde hâlâ yasın "bekleyecek, kaldırılacak" evresindeydim.
02:11:08 gerçekleşti BTCUSDT 0.40 alış
02:11:08 gönderildi BTCUSDT-PERP 0.40 satış, post-only
02:11:41 hâlâ çalışıyor
02:26:00 artık değeri −18.1 bps
BTC sakin bir pencerede 18 bps düştü. Artık, işlemin tamamıydı. Fonlama, yazıldığında, sahip olmadığımız bir perp'e alacak geçti. Spot orada long olarak oturuyordu. Orijinal backtest'in gecelik yolu hiç tek bacaklı bir pozisyon içermemişti; bu yüzden diğer her deftere sorduğumuz soruyu hiç sormamıştı: bu artakalının basabileceği en kötü bar nedir ve tutmayı kastetmediğimiz bir pozisyonun stop'u nerede?
Yedi tam paket de kahraman değildi. İkinci bacak yazıldığında, kendi spot kaldırmamız zaten endekse yüklenmişti ve giriş bazı, sinyali tetikleyen anlık görüntüden 3–5 bps daha kötüydü. Sekiz bps'lik eşik, bir ekran hakkındaki bir sayıydı.
Bir dahaki sefere atlayacaklarımız
Çok bacaklı bir işlemi tek bir gerçekleşme fonksiyonu olarak yayınlamazdık. Aynı kural bir perp-spot carry, bir takvim veya bir ajanın iki limit olarak gönderip ikisi de mid'den "gerçekleşti" diye kutladığı call vertical için de geçerli.
- Bacak başına emir durumu, kısmi gerçekleşmeler dahil. Paketi iki biletin ebeveyni olarak ele alın.
- Gerçekten tetiklenen bir maksimum yetim zamanlayıcısı ve çıkışta iki spread ödeyen bir kapatma yolu.
- Artık üzerinde deftere değerleme, artakalan için boyutlandırılmış bir stop ile. Paketlenmiş net, yanlış nosyonaldir.
- Her iki bacak da gerçekleşene kadar carry alacağı yok, fonlama tahakkuku yok. Eksik, eksiktir.
- İki bileti olan hiçbir şey için varsayılan olarak mid-on-mid'i kabul etmeyin. Tahmin etmek zorundaysanız, sığ bacağı daha kötü, ikinci gerçekleşmeyi daha geç tahmin edin.
Ve test_pack_is_atomic'i repoya sokmazdık. Atomic, bir yardımcı fonksiyonun değil, bir eşleştirme motorunun özelliğidir. BTC spot ve BTC perpetual bazen uyak tutan iki defterdir. Kâğıt, uyakların bozulduğu yerdir; merdivenin hiç ilginç olmasının tek nedeni de budur.



