Not defterini pazar gecesi gönderdin; o zamandan beri ikinci monitörümde açık. Kesitsel momentum, 30 günlük dolar hacmine göre en büyük 150 Binance USDⓈ-M perp'i, haftalık yeniden dengeleme, en üst dilimde uzun, en alt dilimde kısa pozisyon, 2021-01 ile 2026-06 arası. Sharpe 2.31, maksimum düşüş %14.2 ve bana dürüst görünen bir maliyet modeli: taker olarak gir, taker olarak çık, her aralıkta biriken funding ve emir defterine göre pozisyon büyüklüğünle ölçeklenen bir kayma terimi. Zor kısımları doğru yapmışsın. Sonra altı haftalık kâğıt işlemin yatay sonuçlandığını, avantajın aşınıp aşınmadığını sordun.
Aşınmadı. Backtestte zaten hiç yoktu. 4. hücreye bak:
info = requests.get(BASE + "/fapi/v1/exchangeInfo").json()
symbols = [s["symbol"] for s in info["symbols"]
if s["status"] == "TRADING" and s["quoteAsset"] == "USDT"]
Bu uç noktayı Haziran 2026'da çağırıp yanıtı Mart 2021'de neyin alınıp satılabileceğini tanımlamak için kullandın. O listedeki her sembol, liste böyle oluşturulduğu için Haziran 2026'ya kadar hayatta kalmıştı. Hatanın tamamı bu; etkisi, maliyet modelinin geri kalanından bile büyük.
Uç noktanın söylemediği şey
exchangeInfo içinde geçmiş bilgisi yok. asOf parametresi, arşivi, değişiklik günlüğü yok. Şu anın fotoğrafı bu ve Binance hiçbir zaman başka bir şey olacağını vadetmedi. Bir kontrat listeden çıkarıldığında kaydı yanıttan siliniyor; API açısından da sembol artık yok. Binance, 2019'dan bu yana 600'den fazla USDⓈ-M perpetual listeledi ve bunların yüzü aşkınını emekliye ayırdı. BTS, COCOS, TOMO, RAY, FTT, SC ve 2021 altcoin sezonundan, bir muhteşem çeyrek geçirip ardından işlem hacmi sönene kadar incelen ve sonunda platformun kaldırdığı uzun kuyruktaki kontratlar.
Kendine sor: 30 günlük momentum taraması hangi isimleri sever? BTC'yi değil. Listeleme sıçraması ve Twitter döngüsüyle az önce üçe katlanan şeyi sever. Bu grubun gelecekte listeden çıkarılacaklarla kesişimi büyük; evren filtresi de bu kesişimi sildi.
Çalışmanı anlık görüntü arşivimiz, zamanın o anındaki evren, aynı sinyal ve aynı maliyetlerle yeniden kurdum; Sharpe 0.74, düşüş %31 çıktı. Farkın kabaca beşte ikisi, elde tutmana hiç izin verilmeyen ve listeden çıkarılmış isimlerden geliyor. Bir çeyreği de bunun ayna görüntüsü olan, daha ince ve sanırım daha az hoşuna gidecek sorundan kaynaklanıyor.
Zaman makinesinin öbür ucu: henüz var olmayan semboller
Özelliğin 90 günlük getiri. Kayan penceren min_periods=20; ısınma döneminin örneğin ilk çeyreğini silmesini önlemek için bir kez ayarladın ve bir daha dönüp bakmadın. Böylece 21 gün önce listelenen bir kontrat, listelemeden sonraki üç haftalık fiyat hareketiyle momentum puanı alıyor; listeleme iyi gittiyse genellikle en üst dilime girip portföyüne ekleniyor.
Bu kısmın meşru olduğu savunulabilir. Meşru olmayan şu: veri sağlayıcın, bazı sembollerin perp kontratı henüz yokken spot veya endeks verilerini geriye dönük doldurmuş; bu yüzden bir avuç kontratın kline geçmişi kendi onboardDate tarihinden öncesine uzanıyor. Bunu yaklaşık bir dakikada kontrol edebilirsin. Fiyat tablonu listeleme tarihleriyle birleştirip listelemeden önceki satırları say. Verinde listeleme öncesi mumları bulunan 41 sembol var. Bunlardan biri, 2023 yazında, kontratın var olmasına daha dokuz gün varken alınan pozisyondan özsermaye eğrisine tek haftada %6 kazanç ekliyor.
Bir ticker metni kimlik değildir. Borsa bunu bazen iki kez kiraya verdiği bir etikettir.
Bu da yeniden adlandırmaları gündeme getiriyor. MATICUSDT, POLUSDT oldu. FTMUSDT, 1:1 dönüşümle SUSDT oldu. Mayıs 2022'deki LUNA olayından LUNCUSDT ve sonradan, değerinin neredeyse tamamını yitiren bir şeyle aynı ticker kökünü paylaşan yepyeni bir LUNAUSDT çıktı. Yükleyicin sembol metnine göre anahtarlama yapıp bulduğu dosyaları birleştiriyorsa, elinde fiyat hareketi olmayan bir süreksizliğe sahip en az bir seri var demektir; momentum özelliğin de bu süreksizliği kesitteki en güçlü sinyal olarak okuyacaktır.
Fark ettirmeden değişen diğer her şey
Sembol listesinin zaman içinde değiştiğini kabul ettiğinde, aynı mantık bu yanıttaki diğer bütün alanlar için de geçerli. Hepsinde bugünkü değerleri kullanıyorsun.
| Alan | Nasıl değişiyor | Neyi bozuyor |
|---|---|---|
| status | TRADING → SETTLING → yok | Hayatta kalma yanlılığı; hiç işlem görmemiş bir kapanış fiyatından hayalî çıkışlar |
| onboardDate | Her hafta yeni listelemeler; ölü sembollerde tarih yok | Henüz var olmayan kontratlarda işlem yapmak |
| tickSize / stepSize | Fiyat seviyeleri değiştikçe yeniden ayarlanıyor | Emir yuvarlama ve o tarihte reddedilecek limit fiyatları |
| minNotional | Sığ emir defterlerinde zamanla yükseltiliyor | Canlı yönlendiricinin reddedeceği küçük pozisyon bacakları |
| fundingIntervalHours | Yıllarca 8h, sonra birçok sembolde 4h veya 1h | Taramanın tuttuğu altcoinlerde taşıma getirisi tam da 2–3× hatalı hesaplanıyor |
| leverage brackets | Kademe seviyeleri ve sürdürme teminatı yeniden düzenleniyor | Likidasyon modellemesi ve teminat kapasitesi |
Senin durumunda en çok can yakan funding aralığı. Birikim döngün, tüm geçmiş boyunca günde üç ödeme varsayıyor. Altcoin portföyünün kayda değer bir kısmı dört saatlik funding'e geçti; yüksek funding'li isimlerdeki kısa pozisyon bacakları, simüle edilmiş PnL'inin büyük bölümünü oluşturuyor. Buradaki hata yuvarlama farkı değil. Kat düzeyinde.
Listeden çıkarılma başlı başına bir olay; sen bunu modellemiyorsun
Zamanın o anındaki verilerle yaptığım yeniden çalıştırmada stratejiye cömert bir çıkış verdim. Gerçek liste kaldırmaları bir senaryoyu izler: duyuru, genellikle 7 ila 14 gün önceden; ardından yalnızca pozisyon azaltmaya izin verilen bir pencere; sonra da mark fiyatından zorunlu uzlaşma. Duyuru herkese açık bilgidir ve harekete geçebilirsin; bu yüzden dürüst simülasyonda duyuru gününün kapanışında çıkış yapılmalı. Ama tipik bir altcoin liste kaldırmasında bu kapanış önceki haftaya göre zaten %10-20 aşağıdadır, emir defteri sığdır ve kayma teriminin farklı bir rejimde çalıştığını bilmesi gerekir. Dolum motorun sana hiçbir etki olmadan uzlaşma fiyatını veriyorsa, ölen varlıkları sessizce gerçeğe uygun değerden işlem yapılabilir hâle getirmişsin demektir.
exchangeInfo'yu hiç arşivlemediysen işin bitmiş sayılmaz. data.binance.vision/data/futures/um/monthly/klines/ adresindeki herkese açık döküm, API onları unuttuktan çok sonra bile listeden çıkarılmış sembollerin dizinlerini tutuyor. Dizin listesini çıkar; her sembolün ilk ve son aylık dosyası, herhangi bir veri sağlayıcı kullanmadan listeleme ve listeden çıkarılma aralığını makul ölçüde belirlemeni sağlar. Bu bir yeniden kurma çalışması, kayıt değil ve tick size ya da funding aralıklarını geri getirmez. Ama kimin ne zaman var olduğunu söyler; pazartesi günü ihtiyacın olanın %80'i de bu.
Sinyale yeniden dokunmadan önce kurmanı istediğim şeyler
- Araştırdığın her platformdan exchangeInfo'yu her gün çeken ve tarihe göre anahtarlanmış nesne depolamaya yazan bir cron işi. Gzip ile sıkıştırıldığında yarım megabayttan küçük. 10 yıllık depolama S3 maliyetinde yuvarlama hatası kadar tutar; ileride satın alamayacağın bir araştırma olanağı kazandırır.
- Bu anlık görüntülerden türetilen bir varlık ana tablosu: tüm alanları içeren ve her (platform, sembol, valid_from, valid_to) kombinasyonu için bir satır. Ardışık anlık görüntüleri karşılaştırarak oluştur; herhangi bir alan değişikliğini yeni satır olarak işle.
- Zorunlu zaman damgası argümanı olan bir evren işlevi.
universe(ts), aslauniverse(). Varsayılanı öyle ayarla ki kimse, gelecekte sabaha karşı 1'de sen bile, yanlışlıkla hayatta kalanların listesine başvuramasın. - Veri yükleyicide listeleme öncesini denetleyen bir doğrulama: hiçbir mum
onboard_tstarihinden bir gün öncesine ait olamaz. Uyarı verme; çalışmayı durdur. - Yeniden adlandırmalarda sabit kalan bir dahili enstrüman kimliği; ticker ise bir niteliğe dönüşsün. POL ve MATIC'i tek bir kimliğe eşle; süreklilik mantığının bunları birleştirmeyi reddedebilmesi için yeniden değerlemeleri işaretle.
Bunları yap ve yeniden çalıştır. Sonucun benim bulduğum 0.74 civarında olacağını tahmin ediyorum; asıl ilginç soru, ölü isimleri de içeren 0.74'te kâğıt üzerinde işlem yapmaya değer bir şey kalıp kalmadığı. Belki vardır. Perp'lerde kesitsel momentum hiç de boş bir fikir değil; evreni düzelttikten sonra geriye kalanın bir kısmı kısa taraftaki gerçek taşıma getirisi. Kâğıt üzerindeki sonuçlarınla backtest'in de örtüşmeye başlayacak; çünkü kâğıt işlemler zaten hep zamanın o anındaki evrende yürütülüyordu. Başka seçeneği yoktu.
Not: Bu kriptoya özgü bir tuhaflık değil, sadece burada daha belirgin. Hisse senedi araştırmacıları CRSP verileri yayımlamaya başladığından beri listeden çıkarılma getirileri ve yeniden kullanılan ticker'larla uğraşıyor; tahmin piyasalarında ise bu durum en uç noktaya varıyor: her kontrat tasarımı gereği sona eriyor, dolayısıyla evren tamamen listelemelerden ve kapanışlardan ibaret. Bu taramayı Kalshi'ye taşırsan önce varlık ana tablosunu oluştur. Orada başka tür bir geçmiş yok.
← Tüm yazılar

