Backtesting ve gerçeklik: o kusursuz beklenti sana yalan söylüyor
Senin backtest'in: 8R beklenti. Kâr faktörü 3,5. 10.000 $'lık hesapta 50.000 $ kâr.
Canlıya geçiyorsun. İlk hafta: -2R beklenti. Kâr faktörü 0,4. Hesap %12 aşağıda.
Ne oldu? backtest'in yalan söyledi.
🚨 Açık konuşalım
backtest'lerin çoğu düpedüz hayal ürünüdür. Kusursuz gerçekleşmeleri, sıfır slippage'ı, spread'siz bir dünyayı ve canlı piyasada var olmayan sihirli girişleri varsayarlar.
backtest'in gerçek olamayacak kadar iyi görünüyorsa, gerçekten de öyledir. Sinyale değil, gürültüye uydurmuşsun.
Bu derste öğreneceklerin:
- backtest'lerin %90'ı canlıya çıkınca neden çöker
- 4 ölümcül günah: aşırı uyum, ileriye bakma yanlılığı, gerçekçi olmayan maliyetler, hayatta kalan yanlılığı
- slippage ve spread'leri gerçeği yansıtacak biçimde nasıl modellersin
- Örneklem içi ile örneklem dışı (önemi olan tek doğrulama)
⚡ Yarın için hızlı kazanımlar (açmak için tıkla)
- backtest'ine gerçekçi maliyetleri ekle — İşlem başına %0,03-0,05 slippage artı gerçek spread'i hesaba kat. Sonuç çöküyorsa üstünlüğün sahteydi.
- Verini 70/30 böl — Verinin %70'inde optimize et, hiç görmediğin %30'unda doğrula. Örneklem dışı tutmuyorsa eğriye uydurmuşsun.
- Canlıdan önce 30 gün kâğıt üzerinde işle — Kâğıt üzerindeki sonuçlar backtest'ten belirgin biçimde ayrılıyorsa bir şeyler ters. Örtüşene kadar canlıya çıkma.
Gerçek örnek: 1,3R beklentili «kusursuz» bir backtest, canlıda nasıl -0,45R'lik bir felakete dönüştü
Arka plan: Mart 2024'te Chris (bileşik örnek), 6 aylık optimizasyonun ardından bir kırılım stratejisi geliştirdi. backtest inanılmaz görünüyordu: 1,3R beklenti, 4,9 kâr faktörü, %67 kazanma oranı, 2 yıllık SPY verisiyle (2022-2023) sınanmış. Nisan 2024'te 50.000 $ sahaya sürüldü. Haziran 2024'e gelindiğinde hesap 8.400 $ eksideydi (-%16,8). İşte tam otopsi.
«Kusursuz» backtest (2022-2023 verisi)
| Ölçüt | Değer | Chris ne düşündü |
|---|---|---|
| Toplam işlem | 156 | İyi bir örneklem |
| Kazanma oranı | 67.3% (105W / 51L) | «İnanılmaz! Ortalamanın çok üstünde.» |
| Ort. kazanç / ort. kayıp | +2.4R / -1R | «R:R harika, kazananlar kaybedenlerin 2,4 katı.» |
| Kâr faktörü | 4.9 | «Profesyonel düzeyde bir sayı.» |
| Beklenti değeri | İşlem başına +1,3R | «Kutsal kâse toprakları.» |
| Azami drawdown | -8.2% | «Minicik bir drawdown. Son derece güvenli.» |
| Toplam getiri (2 yıl) | +$40,600 (+406%) | «Bu o. İşimi bırakıyorum.» |
Chris'in optimizasyon süreci:
- 50 farklı EMA periyodu denedi (EMA(34)'ü «kusursuz» buldu)
- Stoplar için 20 ATR çarpanı denedi (1,47× ATR'yi «en uygun» buldu)
- 15 kâr hedefi seviyesi denedi (2,8R'yi «en iyi» buldu)
- Nihai strateji: EMA(34) kesişimi + 1,47× ATR stop + 2,8R hedef
- Denenen toplam bileşim: 50 × 20 × 15 = 15.000 varyasyon
Chris'in backtest'e koymadıkları:
- slippage (tam fiyattan kusursuz gerçekleşme varsaydı)
- Alış-satış farkı (spread'i sıfır varsaydı)
- Komisyonlar (modellemeyi unuttu)
- Emrin reddi (%100 gerçekleşme varsaydı)
- Örneklem dışı sınama (hiç görülmemiş veride hiç denemedi)
Canlı işlemin gerçeği (Nisan-Haziran 2024, 10 hafta)
| Ölçüt | backtest | Canlıdaki gerçek | Fark |
|---|---|---|---|
| Kazanma oranı | 67.3% | 51.4% (19W / 18L) | 15,9 puan daha kötü |
| Ort. kazanç | +2.4R (+$1,200) | +1.8R (+$900) | %25 daha küçük |
| Ort. kayıp | -1R (-$500) | -1.3R (-$650) | %30 daha büyük |
| Kâr faktörü | 4.9 | 1.46 | %70'lik çöküş |
| Beklenti değeri | +1.3R | maliyetler düşülünce -0,45R | -1,75R EKSİDE |
| Azami drawdown | -8.2% | -21.4% | 2,6 kat daha kötü |
| Toplam getiri (10 hafta) | +9.600 $ öngörülen | -$8,400 (-16.8%) | 18.000 $'lık uçurum |
Eksiksiz maliyet dökümü: 18.000 $ nereye gitti
| Maliyet kalemi | Açıklama | Etki |
|---|---|---|
| 1. Aşırı uyum (eğriye uydurma) | EMA(34) + 1,47× ATR, 2022-2023 verisinde kusursuz çalışıyordu ama tarihsel gürültüye optimize edilmişti. 2024'ün piyasa koşulları = başka bir gürültü. | -$6,200 |
| 2. slippage (modellenmedi) | İşlem başına ortalama %0,08 slippage × 25.000 $ ortalama pozisyon × 37 işlemin gidiş dönüşü = 1.480 $ slippage maliyeti | -$1,480 |
| 3. Alış-satış farkı | SPY spread'i 0,01 $ × ortalama 500 hisse × 37 işlem = 185 $. Opsiyonlar (kaldıraç için kullanıldı) spread = hisse başına 0,03 $ × sözleşme başına 100 hisse × 20 sözleşme × 37 işlem = 2.220 $ toplam spread maliyeti | -$2,405 |
| 4. Komisyonlar | Opsiyonlar: sözleşme başına 0,65 $ × 20 sözleşme × 37 işlem × 2 (gidiş dönüş) = 962 $ | -$962 |
| 5. Emrin reddi | 8 işlemde limitli emirler hiç gerçekleşmedi (5 kazanan, 3 kaybeden kaçtı). Net fırsat maliyeti: kaçan 5 kazanan × +1,8R (-9R) eksi kaçınılan 3 kaybeden × -1,3R (+3,9R) = -5,1R = 2.550 $ | -$2,550 |
| 6. İleriye bakma yanlılığı | backtest kodu girişi close[0] ile hesaplıyor ama aynı mumun kapanışında giriyordu (canlıda imkânsız). Canlı girişler bir sonraki mumun açılışında olur. Ortalama %0,3 daha kötü giriş = 2.775 $ bozulma | -$2,775 |
| 7. Uygulama gecikmeleri | Platform gecikmesi + emri gözden geçirme süresi = 2-8 saniyelik gecikme. Hızlı kırılımlar gerçekleşmeden önce ortalama %0,15 kaçtı = gecikmelerden 1.387 $ slippage | -$1,387 |
| BACKTEST'E GÖRE TOPLAM BOZULMA: | -$17,759 | |
Matematiği:
- backtest'in öngördüğü kâr (10 hafta): +9.600 $
- Eksi bozulma maliyetleri: -17.759 $
- Beklenen canlı sonuç: -8.159 $
- Gerçekleşen canlı sonuç: -8.400 $ — hesap, gerçekte olanla 250 $ farkla örtüşüyor
Ne yapılmalıydı: doğru doğrulama
| Adım | Chris ne yaptı (yanlış) | Ne yapılmalı (doğru) |
|---|---|---|
| 1. Verinin bölünmesi | 2022-2023 verisinin tamamını optimizasyonda kullandı | 2022'yi optimizasyonda kullan, 2023'ü örneklem dışı sınama için ayır |
| 2. Optimizasyon | 15.000 parametre bileşimi denedi | Standart parametreler kullan (EMA 20/50, 2× ATR stop). Denemeyi 10 varyasyonun altında tut |
| 3. Maliyet modellemesi | Maliyetleri sıfır varsaydı | İşlem başına %0,10 slippage + 0,01 $ spread + 2 $ komisyon modelle = en az -30 $ |
| 4. İleriye bakma denetimi | Hem sinyal hem uygulama için aynı mumun kapanışını kullandı | Sinyal close[0]'da, uygulama open[1]'de (bir sonraki mum). Gerçekçi zamanlama. |
| 5. Örneklem dışı sınama | Hiç görülmemiş veride hiç denemedi | 2023 verisinde sına (el sürülmemiş). Performans %30'dan fazla bozuluyorsa strateji aşırı uyumludur |
| 6. Walk-forward | Tek bir backtest dönemi | 6 aylık optimizasyon pencereleri, sonraki 3 ayda sınama. Kaydırarak yinele. Tutarlılığa bak. |
Chris'in yapması gereken örneklem dışı sınama
Doğru yöntem:
- Örneklem içi dönem: Yalnızca 2022 verisinde optimize et (2023'e dokunma)
- Parametreleri bul: EMA(34) + 1,47× ATR (aynı sonuç, ama yalnızca 2022 kullanılarak)
- Parametreleri kilitle: ARTIK DEĞİŞİKLİK YOK. Parametreler donduruldu.
- Örneklem dışı sınama: Tam olarak aynı parametreleri 2023 verisinde çalıştır
- Sonuçları karşılaştır: 2023 performansı 2022'nin %70'inin altına düşüyorsa strateji aşırı uyumludur
Ne olurdu:
| Dönem | Beklenti değeri | Kâr faktörü | Karar |
|---|---|---|---|
| 2022 (örneklem içi) | +1.4R | 3.1 | Optimize edilmiş performans |
| 2023 (örneklem dışı) | +0.4R | 1.4 | ⚠️ %71 bozulma |
| Sonuç: Strateji fena hâlde aşırı uyumlu. 2023 beklentisi 2022'nin %29'u. Gerçekçi maliyetlerle (işlem başına -30 $ = -0,15R) net beklenti +0,25R'de kalıyor (sıfırın az üstü). SAHAYA SÜRME. | |||
Ders: Chris'in backtest'i bir hayaldi. 15.000 parametre bileşimi denersen, tarihsel gürültüye kusursuzca oturan birini bulman garantidir. O «kusursuz» 1,3R beklenti, eğriye uydurulmuş çöptü. Örneklem dışı bir sınama, 8.400 $ kaybedilmeden önce bunu ortaya çıkarırdı. backtesting, geçmişin en iyi performansını bulmak değil, bundan sonra tutacak olanı bulmaktır. Bunun için de görülmemiş veri, gerçekçi maliyetler ve sıfır ileriye bakma yanlılığı gerekir.
Kusursuz stratejin canlıda neden çökecek
Rahatsız edici gerçekten başlayalım: bir stratejiyi tarihsel veriye uysun diye optimize ettiysen, bir üstünlük bulmadın. Gürültü buldun.
Eğriyi rastgele gürültüye uydurmak
Nedir: backtest kusursuz görünene kadar parametreleri optimize etmek
Örnek:
- 100 farklı EMA periyodu deniyorsun (10, 11, 12… 110)
- EMA(47), backtest'te 4,2R beklenti veriyor
- «Sihirli sayıyı» bulduğunu sanıyorsun
Gerçek: EMA(47) yalnızca o veri kümesine tesadüfen oturmuştu. İleriye dönük sınamada? -0,8R beklenti. Sinyali değil, gürültüyü öğrendin.
Daha iyisi: Optimizasyonu sınırla. Standart parametreler kullan. Görülmemiş veride sına.
Geleceğin verisini kullanmak (canlıda imkânsız)
Nedir: Bugünkü kararı vermek için gelecekteki mumlara «göz atan» kod
Örnek:
if close[0] > high[5]: # GELECEKTEKİ 5 mumu kullanıyor
enter_long()
Sorun: backtesting'de geleceğin verisi elinde olur. Canlı işlemde olmaz.
Gerçek: Bu kod canlıda düpedüz çalışamaz. backtest'in, var olmayan bir stratejiyi sınıyor.
Daha iyisi: Yalnızca karar anında elinde olan veriyi kullan.
Kusursuz fiyatlardan kusursuz gerçekleşme varsaymak
backtest'in varsayımı: «Tam 100,00 $'dan alıyorum»
Gerçek: Piyasa emri 100,12 $'dan gerçekleşiyor (spread + slippage)
100 işlemdeki etkisi:
- backtest kârı: 5.000 $
- Spread maliyeti (işlem başına 0,10 $): -1.000 $
- slippage (işlem başına 0,05 $): -500 $
- Komisyonlar (işlem başına 2 $): -200 $
Gerçek: Gerçek kâr = 3.300 $ (backtest'ten %34 az)
Yalnızca hayatta kalanlarda sınamak
Nedir: backtesting'i yalnızca bugünkü S&P 500 hisseleriyle yapmak
Sorun: Kottan çıkmış ya da batmış 200'ü aşkın hisseyi dışarıda bırakıyorsun
Örnek:
- 2024 S&P 500 listesiyle backtest: 1,8R beklenti, 2,1 kâr faktörü
- Ama o dönem boyunca Hertz'te (2020'de battı), SVB Financial'da (2023'te çöktü) ve sıfıra giden diğer bütün isimlerde uzun pozisyonda olurdun.
Gerçek: Beklentin, kottan çıkmaların yol açtığı yıkıcı kayıpları dışarıda bırakıyor. Gerçek beklenti: -0,2R (kaybettiren bir sistem).
💡 jeton düşme anı
backtest gerçeklik değildir. Bir benzetimdir. Ve benzetimin imkânsız varsayımlar içeriyorsa, canlı sonuçların da aynı ölçüde imkânsız olur.
Stratejileri öldüren gizli maliyetler
backtest'lerin çoğunun yok saydığı şey bu — ve seninki de bu yüzden muhtemelen %20-40 fazla iyimser:
Adım 1: alış-satış farkını modelle
Nedir: Alış fiyatı ile satış fiyatı arasındaki fark
Örnek:
- SPY alış: 450,00 $ / satış: 450,01 $ → spread = 0,01 $
- Alıyorsun: 450,01 $ ödüyorsun (farkın yarısı = 0,005 $)
- Satıyorsun: 450,00 $ alıyorsun (farkın yarısı = 0,005 $)
Gidiş dönüş başına maliyet: $0.01
1.000 hisse için: 0,01 $ × 1.000 = işlem başına 10 $
100 işlem: 1.000 $ spread maliyeti
Adım 2: slippage'ı modelle
Nedir: Hedeflenen fiyat ile gerçek gerçekleşme arasındaki fark
Koşullara göre gerçekçi slippage:
- Normal likidite: 0.01-0.02%
- Oynak piyasalar: 0.05-0.10%
- İnce likidite: 0.10-0.30%
- Büyük pozisyon: 0.20-0.50%
Temkinli varsayım: İşlem başına %0,05
10.000 $'lık pozisyon × %0,05 = yön başına 5 $ slippage = gidiş dönüş 10 $
Adım 3: komisyonları modelle
Örnek: Interactive Brokers
- Hisse başına 0,005 $, en az 1 $
- 200 hisse × 0,005 $ = yön başına 1 $
- Gidiş dönüş = 2 $
100 işlem: 200 $ komisyon
Adım 4: toplam gerçekçi maliyet
İşlem başına (gidiş dönüş):
- Spread: 10 $
- slippage: 10 $
- Komisyon: 2 $
Toplam: işlem başına 22 $
Stratejin işlem başına 50 $ brüt kazandırıyorsa → net 28 $ (%44 azalma!)
backtest'i düzeltme örneği
Gerçekçi maliyetlerden önce ve sonra
Strateji: 100 işlem, işlem başına ortalama 50 $ kâr
backtest (hayal):
100 işlem × 50 $ = 5.000 $ kâr
Gerçekçi maliyetlerden sonra:
- Brüt: 5.000 $
- Spread: -1.000 $
- slippage: -1.000 $
- Komisyonlar: -200 $
Net kâr: 2.800 $ (%44 azalma)
Önemi olan tek doğrulama
Profesyoneller bir stratejiyi şöyle doğrular:
Verini iki döneme böl.
- Örneklem içi (%60-70): Stratejini burada geliştirip optimize edersin
- Örneklem dışı (%30-40): GÖRÜLMEMİŞ veride doğrulama
🎯 Örnek: 6 yıllık veri (2018-2024)
Örneklem içi: 2018-2022 (burada optimize et)
- Farklı parametreler dene
- En iyi sonuç veren kuralları bul
- Giriş ve çıkış mantığını incelt
Örneklem dışı: 2023-2024 (burada doğrula)
- Stratejiyi HİÇBİR değişiklik yapmadan çalıştır
- Performansı örneklem içiyle karşılaştır
- Benzerse → aşırı uyumlu değil!
- Çok daha kötüyse → örneklem içi gürültüye uydurulmuş
Aşırı uyumun kırmızı bayrakları
🚩 Stratejinin eğriye uydurulduğuna dair işaretler
- Sharpe 3,0 üstü: Gerçek olamayacak kadar iyi
- Beklenti 5R üstü: Son derece nadir (uygulama varsayımlarını gözden geçir)
- Yalnızca 20-30 işlem: Örneklem fazla küçük (istatistiksel olarak anlamsız)
- Kusursuz sermaye eğrisi: drawdown'sız pürüzsüz bir çizgi (imkânsız)
- Yalnızca tek bir varlıkta sınanmış: Muhtemelen o rejime uydurulmuş
- 10 ya da daha fazla optimize edilmiş parametre: Sinyale değil, gürültüye uydurmuşsun
Profesyonel doğrulama yöntemi
Örneklem içi ile örneklem dışı iyidir. Walk-forward daha iyidir.
Nasıl çalışır:
📊 Walk-forward çerçevesi
Dönem 1: 2018-2019'da eğit → 2020'de sına
Dönem 2: 2019-2020'de eğit → 2021'de sına
Dönem 3: 2020-2021'de eğit → 2022'de sına
Dönem 4: 2021-2022'de eğit → 2023'te sına
Bütün dönemlerde tutarlıysa: Sağlam strateji
Performans bozuluyorsa: Aşırı uyumlu ya da rejime bağımlı
🎓 Öne çıkanlar
- Gerçekçi maliyetleri modelle: Spread, slippage, komisyonlar (%20-40 daha az kâr)
- Aşırı uyumdan kaçın: Parametreleri sınırla, birden çok piyasada sına
- Örneklem içi ile örneklem dışı: %60-70'inde geliştir, %30-40'ında doğrula
- Walk-forward sınaması: Zaman içindeki tutarlılığı doğrula
- Kırmızı bayraklar: Sharpe 3,0 üstü, beklenti 5R üstü, 30'dan az işlem
- Canlıdan önce ileriye dönük sına: En az 3-6 ay kâğıt üzerinde
🎯 backtest doğrulama alıştırması
Alıştırma: stratejini kırmızı bayrak dedektöründen geçir
Şu anki stratejini (ya da düşündüğün bir stratejiyi) al ve doğrulamadan geçir:
- Verinin %60'ında backtest yap (örneklem içi). Kaydet: işlem sayısı, beklenti, Sharpe, azami DD
- Kullanılan parametreleri yaz (EMA'lar, eşikler vb.). Bunları birden çok değer deneyerek mi seçtin?
- Kalan %40'lık veride sına (örneklem dışı). Sonuçları örneklem içiyle karşılaştır.
- Şablondaki doğrulama karnesini kullan (8 kategori, en fazla 60 puan)
- Puanını hesapla: 50-60 = devam, 40-49 = gözden geçir, 40'ın altı = çöpe at
- Puan 50 ve üzeriyse: canlıya çıkmadan önce kâğıt üzerinde 30-60 işlem yap
Amaç: Eğriye uydurmayı, ileriye bakma yanlılığını ve gerçekçi olmayan varsayımları, gerçek hesabını yıkmadan ÖNCE yakala. Kötü bir stratejiyi backtesting aşamasında çöpe atmak, gerçek para kaybetmekten iyidir.
🎮 Hızlı kontrol
S: Bir stratejiyi backtest ediyorsun: 5,2R beklenti, 4,2 Sharpe oranı, 25 işlemde sınanmış, 100 farklı periyot denendikten sonra en iyi sonucu verdiği için EMA(47) kullanılmış. Burada ne yanlış?
2010-2024 arası SPY üzerinde ortalamaya dönüş stratejisini backtest ediyorsun. Sonuçlar: 2,8R beklenti, %68 kazanma oranı, 120.000 $ kâr. Veri yalnızca bugünkü S&P 500 bileşenlerini içeriyor (bugün endekste olan hisseler). 2025'te canlıya çıkıyorsun ve tutmuyor. Ne ters gitti?
Stratejini walk-forward ile sınıyorsun: 2018-2020'de eğit, 2021'de sına (geçti). 2018-2021'de eğit, 2022'de sına (geçti). 2018-2022'de eğit, 2023'te sına (geçti). Ne slippage'ı ne de komisyonları modelledin. Bu stratejiyi canlıda işlemeli misin?
backtesting'de kusursuzluk şüphe uyandırır. Üstünlüğü getiren gerçekçiliktir. Maliyetleri modelle, aşırı uyumdan kaçın, ileriye dönük sına — yoksa canlıda çökersin.
İlgili dersler
Trade günlüğünde ustalık
Canlı performansı takip et ve backtest sonuçlarıyla karşılaştır.
Dersi oku →Pozisyon büyüklüğü
backtest'lerde doğru pozisyon büyüklüğü kullan ki sonuçlar gerçekçi olsun.
Dersi oku →⏭️ Sırada
Ders #33: İleri risk yönetimi — profesyonel çerçeveler — Kelly ölçütünü, dinamik pozisyon büyüklüğünü ve drawdown protokollerini öğren.
Yalnızca eğitim amaçlıdır. İşlem yapmak önemli ölçüde kayıp riski taşır. Geçmiş performans gelecekteki sonuçları garanti etmez.
💬 Tartışma (0 yorum)
Yorumlar yükleniyor…
Signal Pilot ile işlem yapmaya hazır mısın?
Öğrendiklerini profesyonel göstergeler ve gerçek zamanlı piyasa analizi araçlarıyla uygula.
Signal Pilot'a dön →Yalnızca eğitim amaçlıdır. İşlem yapmak önemli ölçüde kayıp riski taşır. Finansal tavsiye değildir. Geçmiş performans gelecekteki sonuçları garanti etmez.