Geçen ay üretilmiş bir stratejinin öz sermaye eğrisinde 63% düşüş vardı. Derin, çirkin bir düşüş ve ardından sonraki 6 haftada temiz bir toparlanma — araştırmacının dikkatle bakıp pozisyon boyutunu küçültürse bunun katlanılabilir olduğuna karar vereceği türden bir grafik. Bunu, bakım teminatı kademesinin ne olduğunu bilen bir teminat motorunda yeniden çalıştırdım. Hesap bu düşüşün ortasında, 41. günde likide edildi; 41. günden sonraki her şey kurmacaydı.
Bildiğim en maliyetli backtest hatası bu; çünkü getirilerinizi birkaç baz puan çarpıtmıyor. Simülasyondan soğurucu bir durumu siliyor. Sıfıra inebilen bir stratejiyle inemeyen bir strateji farklı stratejilerdir ve teminatı hiç kontrol etmeyen bir backtest hangisine sahip olduğunuzu söyleyemez.
Bunun yanlış yapıldığını gördüğüm 3 yolu anlatayım.
Yanlış yol 1: getirileri çarptığınız bir sayı olarak kaldıraç
En yaygın yaklaşım bu. Sinyallerinizden bir getiri serisi hesaplar, 10x kaldıraçla çalışmaya karar verir ve çarpan uygularsınız. Bazen biraz daha gelişmiş olur — pozisyon boyutu equity * leverage / price — ama hesap durumu hâlâ yalnızca yükselip alçalan bir skalerdir. Teminat bakiyesi yoktur, nominal değer sınırı yoktur, başarısızlık koşulu yoktur.
Ortaya çıkan hasar ince ayrıntılarda gizlidir; bu yüzden incelemeden geçer. Sharpe ölçekten bağımsızdır; dolayısıyla kaldıracı 3x'ten 30x'e çıkardığınızda manşet değeriniz değişmez ve araştırmacı, kaldıracın oynaklığı getiriyle takas eden bedava bir ayar düğmesi olduğu sonucuna varır. Maksimum düşüş doğrusal ölçeklenir ve aritmetik bir tesadüf eseri 100% altında kalır; çünkü çarpılmış getirilerden oluşan bir seri asimptotik olarak sıfıra yaklaşır, ama onu hiç aşmaz. -9% olan bir günü 12 ile çarparsanız, doğru hesapta -108% elde edersiniz; basit hesapta ise bileşik mi toplamsal mı hesapladığınıza bağlı olarak “-108%, ama öz sermaye eğrisi hâlâ pozitif” çıkar. İkisini de gördüm.
Eksik olan şu: kaldıraç getirilerinize uygulanmaz. teminatınıza uygulanır ve teminat, borsanın her saniye izlediği sınırlı bir miktardır. Bakiyeniz bakım gereksiniminin altına indiğinde pozisyon artık sizin değildir.
İpucu şu: simülasyonunuz herhangi bir kaldıraç düzeyinde tam kayıp üretemiyorsa kaldıraç modellemiyordur.
Yanlış yol 2: yalnızca kaldıraçtan türetilen likidasyon fiyatı
Bir sonraki gelişmişlik seviyesi likidasyon kontrolü ekler; genellikle şöyle: 20x kaldıraçta, ters yöndeki 5% hareket teminatı siler, dolayısıyla bir long pozisyonu giriş fiyatı × 0.95 seviyesinde likide edin. Temiz, sezgisel ve aynı anda 4 ayrı açıdan yanlış.
Sürekli vadeli işlem borsaları ne zaman işinizin bittiğine karar verirken kaldıraç ayarınızı kullanmaz. Pozisyonun nominal değeriyle kademeli olarak artan bir bakım teminatı oranı kullanırlar; bu oran bir kademe tablosundadır. BTCUSDT USDⓈ-M için yaklaşık yapı — borsalar güncelledikçe değişir:
| Pozisyon nominal değeri (USDT) | Bakım teminatı oranı | Maks. kaldıraç |
|---|---|---|
| 0 – 50,000 | 0.40% | 125x |
| 50,000 – 600,000 | 0.50% | 100x |
| 600,000 – 3,000,000 | 1.00% | 50x |
| 3,000,000 – 12,000,000 | 2.50% | 20x |
| 12,000,000 – 70,000,000 | 5.00% | 10x |
Yani izole bir long pozisyonda dayanabileceğiniz ters yönlü hareket yaklaşık 1/L − MMR; 1/L değil. İkinci kademede 20x kaldıraçta bu, 5% − 0.5% = 4.5% eder. Yarım yüzde puan yuvarlama gibi gelebilir. BTC 84,000 seviyesindeyken bu, fiyatta 420 dolar demektir; sert geçen bir saatte 420 dolar, sizi pozisyondan çıkaran fitille çıkarmayan fitil arasındaki farktır. Her fitil yazı tura gibidir ve hepsini kendi lehinize çarpıtmışsınızdır.
Bir de ücretler var. Girişteki taker ücreti, emir gerçekleştiği anda teminatınızdan düşer: 500,000 nominal değer üzerinden 0.045%, 25,000 USDT teminat bakiyesinden 225 USDT demektir; pozisyon daha hiçbir şey yapmadan likidasyon fiyatını değiştirir. Fonlama da aynı etkiyi sürekli yaratır ve kaldıraçlı nominal değer üzerinden araştırmacıların beklediğinden çok daha büyüktür:
Hiçbir şey yapmayan bir pozisyon — 30 gün boyunca ters yönlü hareket yok, işlem yok — teminatının yaklaşık beşte birini tüketmiş ve likidasyon fiyatını belirgin biçimde yaklaştırmış olur. Yanlışlığın 3. ve 4. yönleri şunlar: pozisyonu büyüttükçe kademe değişir; 0.5% kademesinde başlayıp ek alımlarla 1.0% kademesine çıkan pozisyonun likidasyon fiyatı, girişte hesapladığınızdan daha kötüdür. Çapraz teminat ise pozisyonlar arasında teminatı ortak kullanır; dolayısıyla BTC long pozisyonunuzun hayatta kalması ETH short pozisyonunuzun ne yaptığına bağlıdır. Çapraz teminatı birbirinden bağımsız izole pozisyonlar olarak simüle ediyorsanız kendi hesabınızdaki korelasyon yapısını tersine çevirmişsiniz demektir.
Yanlış yol 3: likidasyonu yanlış fiyatla, yanlış anda, yanlış gerçekleşme fiyatıyla sonuçlandırmak
Diyelim ki tetikleme seviyesini doğru buldunuz. Peki: bu seviyeyi hangi fiyat aşar, ne zaman kontrol edersiniz ve emriniz hangi fiyattan gerçekleşir?
Likidasyon, mark fiyatıyla tetiklenir. Bu fiyat, yumuşatılmış bir baz bileşeni içeren ve tek bir borsadaki fitile direnmesi için özellikle tasarlanmış, birden fazla spot borsadan oluşan bir endekstir. Zarar durdurmanız ise yapılandırmanıza bağlı olarak muhtemelen son işlem fiyatıyla tetiklenir. Bu iki değer, tam da en önemli anda farklılaşır. Tasfiye dalgası sırasında sürekli vadeli işlemin son fiyatı, onlarca saniye boyunca mark fiyatının 1–2% altına sapabilir. Hem stop hem likidasyon kontrolünü aynı OHLCV düşük fiyatıyla yapan bir backtest, var olmayan bir borsayı modelliyordur.
Burada iki hata da geçerli ve birbirini götürmüyor. Son fiyatı kullanırsanız, borsanın dikkate almadığı fitillerde likide olursunuz. Mark fiyatını kullanırsanız, mark fiyatının kendisinin hareket ettiği durumu kaçırırsınız — spot borsadaki endeks sapması, işlem yaptığınız sürekli vadeli işlemde hiç oluşmamış bir fiyattan likide olmanın gerçek bir yoludur.
Sonra gerçekleşme fiyatı gelir. Basit motorlar pozisyonu likidasyon fiyatından kapatır ve zararı stop emriymiş gibi kaydeder. Gerçekte olan şu: pozisyon, iflas fiyatından — teminatınızın tam olarak sıfıra indiği, tetikleme seviyesinden daha kötü olan seviyeden — likidasyon motoruna devredilir ve bunun üzerine kademeye göre belirlenen, alt kademelerde nominal değerin yaklaşık 1%'i civarındaki tasfiye ücreti alınır. 20x kaldıraçta nominal değerin 1%'i, kalan teminatınızın 20%'sidir. Motor emri iflas fiyatının altında gerçekleştirirse aradaki farkı sigorta fonu karşılar; bazı borsalarda fon tükenirse sosyalleştirilmiş zarar, emir defterinin kârlı tarafına kadar ulaşır. Gerçekleşen zararınız, likidasyon fiyatına kadar olan düşüş değildir. Daha fazladır ve aradaki fark, emir defterinin bunu en kötü hâle getirecek kadar sığ olduğu günlerde en büyüktür.
Mum içi mekaniklerdeki zamanlama sorusu burada normalden daha ciddi sonuçlar doğurur. 1 dakikalık bir mum hem kâr al seviyenizi hem likidasyon seviyenizi içeriyorsa, çıkışları teminat kontrolünden önce yapan bir backtest kârı rahatça kaydeder. Borsa, gerçekleşmesini istediğiniz her şeyden önce, yaklaşık saniyede bir mark fiyatı güncellemesinde teminatı kontrol eder.
Motorun bunun yerine izlemesi gerekenler
Bunların hiçbiri karmaşık olmak zorunda değil. Durum bilgisi tutması gerekiyor. Hesap bir getiri serisi değil, bakiyesi olan bir nesnedir ve her mumda borsanın yapacağı sırayla güncellenir:
- Cüzdan bakiyesi ve gerçekleşmemiş PnL ayrı ayrı tutulmalı. Marj oranı, bakım teminatının teminat bakiyesine oranıdır; teminat bakiyesine gerçekleşmemiş PnL de dahildir. Bunları birbirine karıştırmak, zarardaki bir pozisyonu olduğundan daha iyi teminatlandırılmış gösterir.
- Her sembol için tarihe göre sürümlenmiş kademe tablosu. Kademeler güncellenir. 2023 backtestini 2026 kademeleriyle çalıştırmak ince bir ileriye bakış yanlılığıdır — genellikle lehinize olur; çünkü borsalar zaman içinde büyük varlıklardaki gereksinimleri çoğunlukla gevşetti.
- Sadece mum verisi değil, mark fiyatı serisi. Mark fiyatı geçmişini bulamıyorsanız sonuçlarda bunu belirtin ve ihtiyatlı bir vekil değer kullanın. Son fiyatı sessizce onun yerine koymayın.
- Mum içindeki olay sıralamasında önce teminat kontrolü; stoplardan, hedeflerden, sinyallerden veya yeniden dengelemeden önce.
- İflas fiyatından gerçekleşme ve tasfiye ücreti; ücret oranı, bakım teminatı oranıyla aynı kademe satırından alınmalı.
- Soğurucu bir terminal durum. Öz sermaye sıfıra indiğinde çalışma sona erer. Yeni bir tabana çekme yok, “yatırımcının hesaba para eklediğini varsayalım” yok, seriyi yeni bir nominal değerle sürdürmek yok.
En çok tartışma çıkaran madde sonuncusu. Birileri mutlaka gerçek bir masanın daha fazla teminat yatıracağını, dolayısıyla simülasyonu bitirmenin gerçekçi olmayacak kadar sert olduğunu söyler. Olabilir. Ama “bu strateji, battıktan sonra da para aktarmaya devam ederseniz işe yarıyor” iddiası, tam da bu sözlerle ifade edilmeyi ve özellikle test edilmeyi hak eder; para eklemeleri varsayılan olarak içeri sızdırılmamalı, açık bir girdi olmalıdır. Bunu dürüstçe yazınca çoğu kişi aslında bunu kastetmediğini fark eder.
Bütün bunların pratik faydası şu: aynı stratejiyi canlı borsaya karşı simülasyonda çalıştırdığınızda, borsanın bildirdiği marj oranıyla simülatörünüzün hesapladığı oran gün boyunca bir ya da 2 baz puan içinde birbirini izlemelidir. Bu uyum, her açık pozisyonda her dakika ücretsiz olarak kontrol edilebilir. Tüm sistemde çalıştırması en ucuz eşitlik testidir ve neredeyse hiç kimse bunu yapmaz — iki değer sapmaya başladığında haklı olan borsadır; düşüş bunu sizin yerinize bulmadan önce keşfetmeye değer bir hatanız vardır.
← Tüm yazılar


