Geleceğin Geçmişe Sızmasına İzin Verdim
İşin başlarında, beni mutlu etmesi gereken kadar iyi bir backtest sonucu vardı. Bunun yerine, birkaç dakika ona bakıp durduktan sonra beni derinden tedirgin etti. Simülasyondaki kârlar büyük, pürüzsüz ve fazlasıyla temizdi — gerçek, gürültülü, hasmane bir piyasada asla yaşanmayacak türden bir performans. Ve bunun gerçek bir piyasada yaşanmamasının nedeni, testimin sessizce ve ben fark etmeden geleceği görebiliyor olmasıydı.
Bilerek değildi. eğer sonra ne olacağını biliyorsan, hile yap diye bir şey yazmamıştım. Gelecek, geçmişe bir düzine ufak, masum görünüşlü ek yerinden sızmıştı ve bunların her biri sistemimi, gerçek para ortaya konduğunda asla, asla sahip olamayacağı bir tür kâhinlik için ödüllendiriyordu.
Backtest’teki en baştan çıkarıcı hata
Bunun genel adı ileriye bakma yanlılığı (look-ahead bias) ya da sızıntıdır. Simülasyonunuzdaki bir karara, gerçek hayatta o karar verildiği anda henüz var olmamış olacak bir bilgiyi kullanma izni verildiğinde ortaya çıkar.
Bunun üzerinde durmaya değer, çünkü kulağa geldiğinden daha incedir. Bir backtest’in, tarihin sadık bir yeniden canlandırması olması beklenir: her an, sistem yalnızca o anda gerçekten bilinebilir olanı bilebilir ve yalnızca onu kullanarak hareket etmek zorundadır. Sızıntı, o duvardaki herhangi bir çatlaktır — yarının bilgisinden bir kıymığın bugünün kararına süzüldüğü herhangi bir yer. Ve bu olduğu an, backtest’iniz “bu nasıl performans gösterirdi” ölçmeyi bırakıp “eğer gözetleyebilseydi bu nasıl performans gösterirdi” ölçmeye başlar.
Gelecek nasıl içeri sızar
Burada kendi sistemimin ayrıntılarını anlatmamaya özen göstermek istiyorum, bu yüzden konuyu bu sızıntıların aldığı genel biçimler düzeyinde tutayım, çünkü onlar dikkat çekecek kadar yaygın.
Klasik bir biçim: aslında ancak karar veriyormuş gibi yaptığınız andan sonra kesinleşmiş bir değeri bir kararda kullanmak. Bir başkası: verinizi, simüle edilen anınızda henüz gerçekleşmemiş olan kısım da dahil olmak üzere, tüm tarih boyunca hesaplanmış istatistikleri — bir ortalama, bir aralık, tipik bir büyüklük — kullanarak ölçekleyerek ya da normalize ederek hazırlamak. Bir başkası: verinizi sonradan görmenin sağladığı avantajla filtrelemek ya da etiketlemek; sonuçların nasıl çıktığını zaten bildiğiniz için yapabileceğiniz bir şekilde bazı durumları sessizce dışlamak.
Bunların her biri tek başına, makul görünen bir satır koddur. Yazarken hiçbiri hile gibi hissettirmez. Ve her biri sisteminize gelecekten gelen küçük, istikrarlı bir bilgi akışı verir.
Yakalanması neden bu kadar zor
Sızıntıyla ilgili en zalim şey, bir hataya benzememesidir. Kod hatasız çalışır. Hiçbir şey çökmez. Ve ürettiği sonuç bir uyarı işareti değildir — harika bir sayıdır. Harika sayılar çoğu insanda şüphe tetiklemez. Kutlama tetikler, bir ekran görüntüsü, bir şeyin peşinde olabileceğinize dair sessiz bir his.
İşte bu hata sınıfını bu kadar tehlikeli kılan tam olarak budur. Başarı gibi görünen sonuçların içinde saklanır ki bu, bir hatanın saklanabileceği en kötü yerdir, çünkü başarı, sorgulamak için en az motive olduğunuz tek sonuçtur. Bir çökme düzeltilmeyi talep eder. Güzel bir equity curve ise sizi bakmayı bırakmaya davet eder.
İşaret: gerçek olamayacak kadar iyi sonuçlar
Uzun süre sahip olduğum tek güvenilir alarm, kendi inanmazlığımdı. Bir backtest, makul olarak bekleyebileceğiniz her şeyden çarpıcı biçimde daha iyi döndüğünde — piyasanın izin verme hakkına sahip olduğundan daha pürüzsüz, daha kârlı, daha tutarlı — doğru ilk hipotez “parlak bir şey buldum” değildir. “Bir yerden bilgi sızıyor ve bunu bulmam gerekiyor” hipotezidir.
Bu, gerçekten yararlı bir ön kabuldür ve onu güçlü bir şekilde benimsemeye başladım: bir backtest’te mükemmellik, çoğu zaman bir avantajın kanıtı olmaktan ziyade bir hatanın belirtisidir. Piyasa zordur. Onun kolay olduğunu düşündüren sonuçlar genellikle size piyasa hakkında değil, kodunuz hakkında bir şey anlatıyordur.
Sızıntıları bulmak
Sızıntı avlamanın asıl işi sıkıcı ve tamamen gösterişsizdir ve onun yerini alabilecek bulduğum hiçbir akıllıca kestirme yol yoktur. Disiplin şudur: bir karara giren her tek değeri alın ve onu, gerçek hayatta bilinir hale geleceği tam ana kadar geriye doğru izleyin. Sonra açıkça sorun: “hareket ediyormuş gibi yaptığım anda, bu sayıya gerçekten sahip olabilir miydim?”
Çoğu sızıntı, sonunda onları köşeye sıkıştırdığınızda, tek bir zaman damgası kadarlık hile olarak ortaya çıkar — gerçekten var olmadan bir an önce kullanılan bir değer, veriye izin verilenden bir adım daha ileri uzanan bir hesaplama. Küçük ek yerleri. Ama küçük bir ek yeri, binlerce karara tekrarlandığında, baştan sona hayali bir servet imal etmeye yeter.
Daha derin ilke: zamanın okuna saygı gösterin
Tüm bunların altında, artık neredeyse kutsal saydığım tek bir ilke yatıyor: zamanın okuna saygı gösterin. Bir backtest, özünde bir vaattir — şimdide hareket etmek için yalnızca geçmişi kullandığınıza, asla geleceği kullanmadığınıza dair bir vaat. Her sızıntı, küçük bir bozulmuş vaattir; kodunuzun kendine yardım etmek için sessizce zamanda ileriye uzandığı bir yerdir.
Yani güvenilir bir simülasyon inşa etmenin, akıllıca modellemeyle çok daha az, bir sınırı savunmakla çok daha fazla ilgili olduğu ortaya çıktı: bir anda bilinen ile yalnızca daha sonra bilinebilir olan arasındaki çizgi. Mühendislik çabasının çoğu, kimsenin hakkında hayranlık dolu mesaj dizileri yazmadığı kısmı, sadece o sınırı kendi kodunuzun sürekli, gelişigüzel gözetleme eğilimine karşı korumaktır.
Artık en iyi sonuçlarıma neden güvenmiyorum
Tüm bunlardan kalıcı değişim, iyi haberle ilişkimin tersine dönmesi oldu. Hayal kırıklığı yaratan bir backtest sadece hayal kırıklığı yaratır; ona bakar, omuz silker ve yoluma devam ederim. Muhteşem olan biri ise artık beni mutlu etmeden önce gerginleştiriyor. Sonuç ne kadar iyiyse, onu üreten sızıntıyı o kadar sıkı ararım.
Kulağa neşesiz geliyor ve bazen öyle de. Ama bu, bu özel oyunun kendini kandırmayı nasıl cezalandırdığına dair zorlukla kazanılmış bir saygıdan geliyor. Bir sistemin size söyleyeceği en tehlikeli yalanlar, çirkin başarısızlıklar değildir. Muhteşem başarılardır — tam olarak bulmayı umduğunuz şeye benzeyen ve tam da bu nedenle şüphe etmeyi en son akıl ettiğiniz olanlar.
— Sinyal yok, getiri yok, yatırım tavsiyesi değildir.