Backtest'in Bana Yalan Söylediği Gece
Bir gece, bir backtest bana mütevazı bir başlangıç bakiyesini 2.792 trilyon won’a çevirdiğimi söyledi — gezegendeki çoğu ekonominin yıllık üretiminden daha fazlasına. Ona baktım. Birkaç dakika boyunca, içimdeki sessiz, açgözlü bir parça bunun gerçek olabileceğine dair sebepler aramaya koyuldu.
Gerçek değildi. Bir hataydı. Ve bu hata, kazandıran herhangi bir stratejinin olabileceğinden daha öğreticiydi, çünkü bir backtest’in var olma sebebi olan tek şeyle ilgili bir hataydı: gerçeklik.
Beni korkutması gereken sayı
Bir parametre araması yürütüyordum — binlerce yapılandırma, her biri tarihsel veriler üzerinde yeniden oynatılıyor ve nihai sonuca göre sıralanıyordu. Çoğu sıradan geri döndü. Biri çılgınca geri döndü.
Lehine-çılgınlık, bir sistemin üretebileceği tek başına en tehlikeli çıktıdır, çünkü başarının yüzünü takınarak gelir. Kaybeden bir koşu seni hata ayıklamaya iter. “İşe yarayan” bir koşu seni kutlamaya iter. İncelemenin kendisi asimetriktir ve tam da yanlış yönde işler: hoşlanmadığımız sonuçları sorguya çekeriz, sevdiklerimizi ise geçiştiririz. Ben de neredeyse bunu geçiştiriyordum.
Zor yoldan öğrenmem gereken içgüdü bunun tersidir. Sonuç ne kadar göz alıcıysa, bir şeyin bozuk olduğu o kadar kesindir. Piyasalar ilk kez bir şey inşa eden birine küçük bir ülkenin GSYİH’sini vermez. Eğer simülasyonun verdiklerini söylüyorsa, simülasyon yalan söylüyordur ve senin tek görevin bunu nasıl yaptığını bulmaktır.
Birinci hata: her seferinde tüm hesabı yatırmak
İlk kusur pozisyon boyutlandırmasındaydı. Her işlem esasen tüm hesap kadar boyutlandırılıyor ve kârlar doğrudan bir sonraki bahse bileşik olarak geri dönüyordu. Bunu yaptığın an, alım satımı modellemeyi bırakır ve geometrik bir seriyi modellemeye başlarsın. Hafifçe bile lehte olan sonuçların yeterince uzun bir dizisi — ya da yeterince sık doğru yönde kırılan saf gürültü — büyümez, patlar. Matematik gerçeklikten kaçar ve bir daha asla geri dönüp bakmaz.
Tamamen bileşik bir backtest’in baştan çıkarıcı yanı budur: harika bir sayı üretmek için iyi bir stratejiye ihtiyaç duymaz. Yalnızca yeterince işleme ve bahsin sürmesine izin verecek kadar cömert bir simülatöre ihtiyaç duyar. Bileşik etki, soluk, anlamsız istatistiksel bir eğilimi üstel bir eğriye çevirir ve binlerce işlem üzerinden üstel bir eğri, kader gibi görünen ama hiçbir şey ifade etmeyen bir sayı üretir. Astronomik bakiye bir avantajın kanıtı değildi. Rastgeleliğe uygulanan tam-hesap maruziyetinin kanıtıydı.
İkinci hata: ölemeyen bir simülatör
İkinci kusur daha kötüydü, çünkü felsefiydi. Backtester’ımın yutucu bir bariyeri yoktu — hesabın basitçe ölü olduğu bir nokta yoktu. Bu yüzden kötü işlemlerden oluşan bir dönem bakiyeyi %99,99 aşağı sürüklediğinde, simülasyon durmadı. Cesedi masada tuttu ve işlem yapmaya devam etmesine izin verdi. Ve o sıfıra yakın bakiyeden, şanslı bir seri hesabı “diriltti” ve onu saçma bir yüksekliğe geri taşıdı.
Gerçek bir hesapta, o toparlanma imkânsızdır. Sıfır sıfırdır. Tasfiye edilmiş bir bakiye ikinci bir perde almaz — oyunun dışındasın, kalıcı olarak, ve gelecekteki hiçbir kazanma serisi zamanı geriye doğru uzanıp seni kurtaramaz. İflas etmiş bir hesabın işlem yapmaya devam etmesine izin vererek, kodum sessizce tüm alım satımdaki en önemli kuralı silmişti: yıkımın nihai olduğunu. Bunun altındaki her şey — tüm o fantezi — eksik tek bir kısıttan mantıksal olarak çıkıyordu. Simülasyon hayatta kalan bir stratejiyi modellemiyordu. Ölmesine izin verilmiş, sonra da ölü kalması yasaklanmış bir stratejiyi modelliyordu.
Optimize edici benim kör noktamı avlıyordu
Anlamam en uzun süren kısım şu: parametre araması o saçma yapılandırmaya kazara rastlamadı. Onu aramaya gitti.
Binlerce yapılandırma üzerindeki bir arama tarafsız bir gözlemci değildir. Ona verdiğin her metrik için optimize eden bir hasımdır. Eğer metriğin “nihai bakiye” ise ve simülatörünün bir zayıf noktası varsa — gerçekçi olmayan şeylerin sessizce gerçekleşmesine izin verilen bir yer — arama o zayıf noktayı bulacak ve tüm ağırlığıyla üzerine yüklenecektir. En iyi stratejiyi ödüllendirmez. Simülasyonun ile gerçeklik arasındaki boşluğu en verimli şekilde sömüren yapılandırmayı ödüllendirir.
Yani trilyon won’luk sonuç, rastgele yüzeye çıkan tek bir talihsiz hata değildi. Güçlü bir optimize ediciyi kandırılabilen bir simülatöre doğrultmanın öngörülebilir sonucuydu. Bir backtest’te bıraktığın her zayıflık, arama altında bir stratejiye dönüşür. Optimize edici, tam da uygulamayı unuttuğun varsayımları keşfeden bir makinedir.
Belirti
O hataları bir araya getir ve mucizeler imal eden bir makine elde edersin. Her şeyden sağ çıkabilir, bu yüzden her şeyden sağ çıkar; her şeyi yatırır, bu yüzden sağ çıktığında muazzam şekilde sağ çıkar; ve bir arama, sessizce onu her ikisini de olabildiğince güçlü yapmaya ayarlar. Çıktı bir stratejinin performansı değildir. Çok büyük sayılarla çizilmiş, hatanın kendisinin şeklidir.
İşte bu yüzden “önce hayatta kalma” bir slogan değildir. İflas edemeyen bir backtest, içinden arama yapılacak yeterince yapılandırma verildiğinde, her zaman eninde sonunda dahi gibi görünen birini yüzeye çıkaracaktır — bu yapılandırma iyi olduğu için değil, arama sabırla simülatörünün kör noktasını kazdığı için. Etkileyici sayı semptomdur. Eksik iflas ise hastalıktır.
Sıkıcı düzeltme
Onarım gösterişsizdi. Pozisyon boyutları, tüm hesap yerine hesabın küçük, sabit bir kesri haline geldi; böylece bir kazanç saçmalığa dönüşemez ve bir kayıp ya hep ya hiç olamazdı. Simülatör gerçek bir yıkım koşulu kazandı: asgari bir hayatta kalma bakiyesinin altına düş ve koşu biter, ölü olarak işaretlenir, tam durak. Ve asgari bir emir boyutu kazandı; böylece gerçek piyasada var olamayacak kadar küçük işlemler, ölmekte olan bir hesabı sessizce yaşam desteğinde tutamazdı.
Bunların hiçbiri zekice fikir değil. İçlerinde bir içgörü yok, bir avantaj yok. Bunlar, simülasyonun nihayet gerçekliğin asla gevşetmediği kısıtlara uymayı kabul etmesidir — seni affetmeyen maliyetler, sonsuz olmayan likidite ve geri dönemeyeceğin bir sıfır. Dürüst bir backtest inşa etmenin işinin çoğu tam olarak budur: onu daha akıllı yapmak değil, hile yapmasına izin vermeyi reddetmek. Dürüst bir backtest’in ilk sorumluluğu sana kâr göstermek değildir. Sana yıkımı gösterebilecek yetenekte olmaktır.
Neden iyi haberlere güvenmeyi bıraktım
İşte rahatsız edici kısım. Hata kolaydı. Zor olan şey, neredeyse bakmamış olmamdı — çünkü sayı benim lehimeydi ve onun doğru olmasını istiyordum. Seni çürüten bir sonuç sorguya çekilir. Seni pohpohlayan bir sonuca inanılır.
İşte bu asimetri, bu işteki kendini kandırmanın çoğunun yaşadığı yerdir. İnsanların hatalarını bulamaması değil sorun; bir hata onlara ödeme yapmaya başladığı an bakmayı bırakmalarıdır. Piyasa, hiç kontrol etmediğin her rahat varsayım için eninde sonunda tam ücreti tahsil edecektir — ama bir backtest, o varsayımı aylarca tutmana memnuniyetle izin verecektir, çünkü o, kuruluşu gereği, yanılmanın bedava olduğu tek yerdir.
Aslında neyi değiştirdi
Yani sahte bir trilyon won’dan elimde tuttuğum disiplinin pozisyon boyutlandırmasıyla neredeyse hiç ilgisi yok. Güvenimin sırasını değiştirdi. İyi görünen bir sonuç artık aksi kanıtlanana kadar suçludur: “bunu nasıl yaptı?” diye sormadan önce, “burada ne bozuk?” diye soruyorum — ve piyasa fırsatını bulmadan önce, kasıtlı olarak onu kendim kırmaya çalışıyorum. O düşmanca muameleden sağ çıkan sonuçlar, kendime inanmama izin verdiğim tek sonuçlardır ve bunlar olmasını istediğimden çok daha azdır.
Her şeyini kaybedemeyen bir backtester iyimser değildir. Yalan söylüyordur. Ve söyleyebileceği en tehlikeli yalan, zaten duymayı umduğun yalandır.
— Sinyal yok, getiri yok, yatırım tavsiyesi değildir.