Backtesting & doğrulama beginner 13 dk okuma

MT5'te backtest nasıl yapılır (ve raporun iki düşüş rakamından hangisine inanmalısınız)

MT5'te backtest nasıl yapılır: Strategy Tester'ı açmak beş dakika sürer, asıl iş rapordaki rakamları doğru okumaktır. Veri ve ayar seçimlerinden tek bir çalışmanın baştan sona alıntılanmış kaydına kadar her adım burada — ve kimsenin bakmadığı rakam da: yayımlanan 23 çalışmanın hepsinde özsermaye düşüşü, bakiye düşüşünden daha derin çıktı.

Yayınlandı · İncelendi

MT5’te bir backtest’i, View > Strategy Tester ile (ya da Ctrl+R) Strategy Tester’ı açıp Expert Advisor’ı, sembolü, zaman dilimini, tarih aralığını ve modelleme modunu seçerek, sonra da Start’a basarak çalıştırırsınız. Beş dakika sonra elinizde bir rapor olur. Asıl mesele oraya nasıl varılacağı değil — o rapordaki sayılardan hangisinin sandığınız anlama geldiğidir.

Bu rehber iki yarıyı birden ele alıyor: yordamı ve okumayı. Bu sayfadaki kanıt okuma tarafından geliyor, çünkü elimizde tamamlanmış 23 çalışma var ve raporları, neredeyse hiç kimsenin bakmadığı bir noktada kendi kendileriyle çelişiyor.

Tamamlanmış bir çalışmadan elinize ne geçer

Ortaya çıkan ürün iki yarısı olan bir rapordur: bir sonuç bloğu (işlemler, kâr faktörü, düşüş, net) ve arkasındaki işlem listesi. İkisi de önemlidir, alıntılanan ise yalnızca ilkidir.

Sonunda söyleyebilmeniz gereken şey “3.023 USD kazandırdı” değildir. Şudur: bu kural seti, bu sembol ve zaman diliminde, bu pencerede, bu tick modeliyle, 10.000 USD’lik bir hesapta, şu kadar işlem üretti, şu kâr faktöründe ve en kötü anında şu kadar zararda kalmış olarak. O cümledeki her öğe sizin seçtiğiniz bir ayardır ve herhangi birini değiştirmek cevabı değiştirir. Ayarların burada yordamdan önce gelmesinin sebebi de budur.

Kurulum: cevabı belirleyen veri ve ayarlar

Aşağıda, çalıştırıp yayımladığımız gerçek bir çalışma var; girdilerle çıktıyı yan yana tutabilesiniz diye alıntılandı. 5 dakikalık grafikte yalnızca alış yönünde çalışan bir USD/JPY stratejisi olan Stillwater’ın arkasındaki kayıt bu.

AyarBu çalışmaNeden böyle ayarlandı
ExpertStillwater (19 girdi)Raporun taşıdığı doğrulanmış her girdi — çalışmayı yeniden üretmek için yeniden girmeniz gereken yüzey
SembolUSDJPY_DUKAÇalışma tekrarlanabilir olsun diye canlı fiyatlanan sembolden ayrı tutulan, tick geçmişine ayrılmış bir sembol
PeriodM5Kuralların üzerinde değerlendirildiği grafik; trend filtresi EA’nın içinden M30’u okuyor
Tarih aralığı2019-01-01 → 2026-07-017,5 yıl; birden fazla rejimi içerecek kadar uzun
ModellingEvery tick based on real ticks (Model 4)Gün içinde işlem yapan her şeyin bar içi yolu ölçülmüş olmalı, ara değerlerle üretilmiş değil
Deposit10.000 USDDüşüş yüzdeleri karşılaştırılabilir kalsın diye buradaki her çalışmada sabit
Kaldıraçİstenen 1:500 — çalışan 1:100Aşağıya bakın. Bu satır göründüğü şey değil
OptimisationDevre dışıTek geçiş. Parametre aramak, kendi tuzakları olan başka bir iştir

Bu satırlardan ikisi bir tablo hücresinden fazlasını hak ediyor.

Veri kalitesi, sonucun üzerine oturduğu ayardır. Rapordaki diğer her rakam, test cihazının kullandığı fiyat serisinin üzerine hesaplanır; dolayısıyla modelleme kalitesi rakamı, raporun geri kalanının ne kadarının gerçekten sizin stratejinizle ilgili olduğunu sınırlar. Yukarıdaki çalışmanın yayımlanmış kaydı, doğrudan test cihazının raporundan okunmuş olarak 229 milyon gerçek tick üzerinde %100 geçmiş kalitesi bildiriyor. Ara değerlerle üretilmiş bar verisi üzerinde bir çalışma yalnızca farklı gerçekleşmeler değil, farklı bir işlem kümesi üretirdi — test cihazı bildiği fiyatlar arasında pürüzsüz bir yol varsayar ve dar stoplu bir strateji tam da o varsayımın üzerinde işlem yapar. Terminalinizin o sembol için gerçekte hangi tick verisini tuttuğunu okumadıysanız, stratejiden önce bakılacak ilk şey odur.

Kaldıraç alanı bir taleptir, bir ayar değil. Kayıtlı 23 çalışmanın tamamında test cihazından 1:500 istendi ve test 1:100 ile çalıştı — istenen rakam 23’te 0 kez geçerli oldu. Bu, alanı geri okuyarak yapılmış bir tahmin değil: testin içinde bir pozisyonun gerçekte tükettiği teminat ölçülerek saptandı, 126,39 USD; bu da kaldıraç 100 hesabına uyuyor, kaldıraç 500 hesabına değil. Pratikteki sonucu şu: teminata duyarlı bir tasarım — bir grid, bir martingale, pozisyon üst üste yığan herhangi bir şey — hiçbir zaman görmeyeceği bir kaldıraçta backtest’i geçebilir ya da kullanmayacağı bir kaldıraçta kalabilir. Yazdığınız kutuya güvenmek yerine rapordaki teminat rakamını kendi hesabınızla karşılaştırın.

Adım adım: testi MT5’te çalıştırın

  1. View > Strategy Tester’ı açın (Ctrl+R). Panel terminalin altına yerleşir; sekmeleri Settings, Inputs, Agents ve Journal’dır.
  2. Settings sekmesinde önce Expert Advisor’ı, sonra Symbol ve Period’u seçin. Gerçekten işlem yapacağınız sembolü seçin — yalnızca fiyat değil, sembol tanımı da oradan gelir ve aynı paritenin bir aracı kurumdaki farklı çeşitleri arasında sözleşme büyüklüğü ile teminat kuralları değişir.
  3. Tarih aralığını belirleyin. “Last month” yerine açık From ve To tarihleri olan özel bir dönem kullanın; böylece çalışma, yalnızca raporunuzu okuyan biri tarafından yeniden üretilebilir olur.
  4. Modelling modunu seçin. Gün içi çalışan her şey için Every tick based on real ticks; daha yavaş sistemler için M1 barlarından üretilen Every tick; kaba modlar ise parametre taramak içindir, yayımlayacağınız bir rakam için asla.
  5. Deposit, para birimi ve kaldıracı belirleyin ve ilk geçiş için Optimisation’ı devre dışı bırakın. İstediğiniz kaldıracı not edin — onu varsaymak yerine raporun teminat rakamlarına karşı doğrulayacaksınız.
  6. Inputs sekmesini açın ve her değeri okuyun. Önceki çalışmanın düzenlemelerini sessizce taşıyan sekme budur; kayıtlarımızın girdileri, yüklediğimizi sandığımız dosyaya karşı değil tamamlanmış rapora karşı doğrulamasının sebebi de budur. Bu kümedeki bir çalışma 362 girdi taşıyor.
  7. Start’a basın. Giriş mantığında hata ayıklamıyorsanız Visual mode’u kapalı bırakın — çok daha yavaştır ve sizi ölçmek yerine izlemeye ayartır.
  8. Bittiğinde Results, Graph ve Backtest sekmelerini açın, sonra raporun içine sağ tıklayıp kaydedin. Daha sonra karşılaştıracağınız şey, sermaye eğrisinin ekran görüntüsü değil kaydedilmiş rapordur.
  9. Terminal sürümünü sonucun yanına kaydedin. 23 çalışmamız 6090 ile 6140 sürümleri arasına yayılıyor; aynı stratejinin farklı sürümler altındaki iki çalışması kendiliğinden aynı deney sayılmaz.
  • Sembolün gerçekte hangi geçmişi tuttuğunu kontrol edin
  • Modelleme modunu elde tutma süresine göre seçin
  • Sembolü, dönemi ve açık bir tarih aralığını belirleyin
  • Inputs sekmesindeki her değeri okuyun
  • Optimizasyon kapalıyken tek bir geçiş çalıştırın
  • Ekran görüntüsünü değil raporu kaydedin
  • Kâr satırından önce iki düşüş satırını da okuyun
Kararların verilmesi gereken sıra — ayarlardan önce veri, çalışmadan önce ayarlar

Sonuçları okumak: rapor sayılarla gerçekte neyi kastediyor

Aynı çalışmanın çıktısını ele alalım. Geri gelen şey şuydu:

SonuçDeğerDevam etmeden önce neyi geçmesi gerekir
Toplam işlem416Ortalamanın bir fıkrayı değil bir örneklemi anlatmasına yetecek kadar
Kâr faktörü1,281,0’ın üstünde, modellemediğiniz maliyetleri kaldıracak bir farkla
Net kâr3.023,01 USD10.000’lik depozito üzerinde — bir puan değil, bir getiri
Bakiye düşüşü%5,82 (747,57)Kapanmış işlemlerdeki en kötü çukur
Özsermaye düşüşü%6,11 (787,60)Açık pozisyonlar dahil en kötü çukur — izlemek zorunda kalacağınız olan
Kazanma oranı%60,82Tek başına anlamsız; burada 100 ve 200 pip olan stop ve hedefle birlikte okuyun
Test koşulları
Deney kimliğiEXP-BACKTEST-RUNBOOK-001
Çalışma kimliğistillwater__gate_v2_duka_realticks__2019-01-01_2026-07-01
MT5 sürümü6140
Sözleşme tanımıExness-MT5Trial5
Sembol / zaman dilimiUSDJPY_DUKA M5
Dönem2019-01-01 – 2026-07-01
ModelEvery tick based on real ticks (Model 4)
Depozito10,000 USD
İstenen kaldıraç1:500
Geçerli kaldıraç1:100
Ölçüm2026-08-23
Son doğrulama2026-08-25

O rapordaki üç şey düzenli olarak yanlış okunuyor.

İki düşüş satırı iki ayrı sorudur. Bakiye düşüşü kapanmış işlemlerin sermaye eğrisini ölçer; özsermaye düşüşü ise hâlâ açık olan pozisyonlardaki değişimi de içerir. 23 çalışmamızın hepsinde özsermaye satırı daha derindi ve aradaki farkın büyüklüğü stratejinin tanımından kestirilemiyor: en dar fark 0,04 puandı (%0,67’ye karşılık %0,71), en geniş fark ise 11,10 puan (%14,52’ye karşılık %25,62; oran olarak 1,76). Hızlı kapatan bir stratejide fark küçüktür. Aleyhine hareketin içinde oturan bir stratejide büyüktür ve düşüşünü fonlamadan önce en çok bilmeniz gereken strateji tam olarak odur.

23 / 23Özsermaye düşüşünün bakiye düşüşünden daha derin çıktığı yayımlanmış çalışmalar
11,10 puanTek bir çalışmada iki düşüş satırı arasındaki en geniş fark — %14,52'ye karşılık %25,62
0 / 23Test cihazından istenen kaldıracın, testin çalıştığı kaldıraç olduğu çalışmalar

MT5 her düşüşü iki kez, iki ayrı tanımla yazdırır. Maximal düşüş, tutarın en büyük olduğu anda ölçülür; Relative ise yüzdenin en büyük olduğu anda. Bunlar aynı çalışmanın içindeki farklı anlardır; dolayısıyla iki rakam tek bir olayın iki görünümü değildir. Çalışmalarımızın 16’sı Maximal tanımıyla, 5’i Relative tanımıyla kayıtlı — ve o kayıtları yazan boru hattı, Maximal bir bakiye rakamını Relative bir özsermaye rakamıyla eşleştirmeyi reddediyor, çünkü ikisini birden gösteren bir sayfa iki farklı anı karşılaştırıyor olurdu. Bir düşüşü alıntıladığınızda tanımını da yanında söyleyin.

Raporun kendi toplamları yuvarlanmıştır ve penceresi kastettiğiniz pencere olmayabilir. Yayımlanan işlem listesinden yeniden hesaplandığında aynı çalışmanın kâr faktörü, rapordaki 1,28 değil 1,2843 çıkıyor — burada zararsız, ama üç ondalık basamak farkla iki adayı karşılaştırırken zararsız değil. Daha da önemlisi, o 416 işlemlik çalışma 2026-04-01 yayın kesme tarihine kadar 404 işleme ve sonrasında 12 işleme ayrılıyor. Sonraki 12 işlem 2,3317’lik bir kâr faktörü döndürdü. İkisi de yanlış değil; farklı soruları yanıtlıyorlar ve kesme tarihi, test cihazının yazdırdığı bir şey değil bir insanın seçtiği bir tarih. Bir çalışmayı “üzerine uydurduğum kısım” ile “uydurmadığım kısım” diye ikiye böleceksiniz, çizginin nerede olduğunu ikinci yarıya bakmadan önce yazın. MT5 backtest raporu nasıl okunur o bölmeyi 23 çalışmanın tamamında yapıyor ve başlığın ne kadar oynadığını gösteriyor.

Bir çalışmayı sessizce geçersiz kılan tuzaklar

Geliştirin: tek bir şeyi değiştirin, yeniden çalıştırın, karşılaştırın

Döngü bilerek sıkıcıdır. Tek bir değişkeni değiştirin, yeniden çalıştırın ve iki sonucu da yazın. Aynı anda iki değişken olursa farkı ikisinden birine atfedemezsiniz.

Çalışma başına en çok bilgiyi getiren sıra şudur:

  1. Stratejiyi değiştirmeden önce pencereyi değiştirin. 2019–2022 ve 2022–2026 dönemlerini ayrı ayrı çalıştırın. İki yarı birbiriyle çelişiyorsa parametreler tek bir dönemi anlatıyordur ve bunu hiçbir ince ayar düzeltmez.
  2. Sembolü değiştirin. Yalnızca tek bir paritede çalışan bir kural, o parite hakkında bir olgudur. Kümemizin USD/JPY, EUR/GBP, AUD/CAD, NZD/USD, bir endeks ve bir kripto paritesi genelinde aynı geniş yaklaşımları içermesinin sebebi tam olarak budur.
  3. Modelleme modunu değiştirin. Hayatta kalan adayı daha kaba bir modelde yeniden çalıştırın. Sonuç çöküyorsa avantaj barın içinde yaşıyordu ve bar içi yol, herhangi bir benzetimin en az güvenilir kısmıdır.
  4. Ancak ondan sonra parametreleri değiştirin — ve aramak zorunda kaldığınız her ayarı, önceden seçtiğiniz bir ayardan daha zayıf bir iddia sayın.

Bir değişiklik sonucu önceki çalışmaların gürültüsünün dışına taşımaz olduğunda ya da ayarları son raporun söylediğine göre seçtiğinizi fark ettiğinizde durun. Asıl durma koşulu ikincisidir ve insanların beklediğinden erken gelir. Backtest analizcisi burada işe yarar, çünkü kaydedilmiş bir raporun başlık rakamlarını geri okur; bu da iki çalışmayı karşılaştırmayı hafıza işi olmaktan çıkarıp aritmetik işi haline getirir.

Sonraki adımlar: gerçek hesaba geçmeden önce ileri test

Temiz tek bir backtest, dört adımın ilkidir; bitiş çizgisi değil.

Kuralın aranmaya değer parametreleri varsa optimize edin. Kazanan geçişi değil, arama aralığının tamamını kaydedin — aramak zorunda kaldığınız bir sonuç, arama hakkında kanıttır ve okuyucuya ne kadar çok baktığınızı söyleyen şey aralıktır. Parametre optimizasyonu o geçişi adım adım anlatıyor ve kendi kayıtlı sekiz aramamızı okuyor: 116 kombinasyon ve yayımlamaya razı olduğumuz tek bir ayar bile yok.

Sonra walk-forward yapın. Bir bölümde uydurun, sonraki bölümde ölçün ve tekrarlayın. Dört adım içinde aşırı uyuma doğrudan saldıran tek adım budur; daha uzun bir backtest’ten daha değerli olmasının sebebi de budur.

Sonra demo hesapta ileri test edin. Gecikme, yeniden fiyatlama ve gerçek spread genişlemesi deneye nihayet burada girer. Stratejinin kaybedip toparlanmasını izleyecek kadar uzun çalıştırın, çünkü gerçekte ihtiyacınız olan sayı getiri değil — yukarıda ölçtüğünüz düşüşün içinde oturup oturamayacağınızdır.

Sonra karar verin. Sizi onu kapatmaya götürecek zararı önceden yazın. Fonlamadan önce belirlediğiniz bir sınır bir karardır; düşüşün ortasında belirlediğiniz ise bir tepkidir.

Kendinizinkini çalıştırmadan önce işlenmiş bir referans isterseniz, yayımlanan EA kataloğundaki her kayıt eksiksiz kapanmış işlem listesini, her iki düşüş satırını ve arkalarındaki çalışma manifestosunu taşıyor; nasıl test ediyoruz sayfası da o kayıtların tabi tutulduğu standardı anlatıyor. Backtest rehberlerinin geri kalanı, bu sayfanın yalnızca işaret ettiği optimizasyon ve walk-forward adımlarına daha derin giriyor. Burada hiçbir şey bir sonuç vaat etmiyor: bu sayfadaki her rakam, çoktan gerçekleşmiş çalışmaları anlatıyor.

Sıkça sorulan sorular

Backtest dönemi ne kadar uzun olmalı?
Stratejinin, yeniden karşılaşacağı koşulların içinden geçerek işlem yapmış olacağı kadar uzun — yani bu, takvim uzunluğundan çok işlem sayısı sorusudur. Burada yayımlanan 23 çalışmanın 22'si 2019-01-01'de başlıyor ve medyan pencere 7,5 yıl; ama o pencerelerin içindeki örnekleme hızı yılda 14,2 işlemden 945,1 işleme kadar değişiyor. Yavaş bir stratejide yedi yıllık bir pencere yine de yüz işlemlik bir örneklem olabilir ve yüz işlem, sonuç çıkarmak için küçük bir sayıdır. Önce işlem sayısını, sonra tarih aralığını okuyun.
Aynı testi yeniden çalıştırdığımda backtest sonuçlarım neden değişiyor?
Neredeyse her zaman strateji değil, fiyat geçmişi değiştiği için. Test cihazı geçmişi sembol bazında indirip önbelleğe alır; dolayısıyla ilk yılları henüz depolanmamış bir pencerede yapılan ilk çalışma, boşluklar dolduktan sonraki ikinci çalışmadan farklı bir tick serisi üretir. Modelleme modu aynı şeyi daha görünür biçimde yapar: Every tick based on real ticks ile Every tick generated from M1 bars arasında geçiş yapmak yalnızca gerçekleşme fiyatlarını değil, hangi işlemlerin hiç tetikleneceğini değiştirir. Modu ve terminal sürümünü sonucun yanına kaydedin; yoksa kendi iki çalışmanız birbiriyle karşılaştırılamaz hale gelir.
Strategy Tester spread, komisyon ve swap'ı hesaba katıyor mu?
Fiyat verisinin ve sembol tanımının taşıdığı neyse onu uygular ki bu, o maliyetleri sizin seçmenizle aynı şey değildir. Burada yayımlanan 23 çalışmanın hepsinde komisyon sıfır çıktı ve yalnızca bir çalışma kendi ortalama spread'ini bildirebiliyor — 19,14 puan, o da yalnızca testin içinde stratejinin yanı sıra bir kaydedici EA çalıştığı için. Geri kalan her şey, geçmiş verinin taşıdığı spread'i kaydetmeden devraldı. Bir maliyet sonucunuz açısından önemliyse, test cihazının onu modellediğini varsaymak yerine testin içinde ölçün.
İyi bir backtest, bir EA'yı gerçek hesapta çalıştırmak için yeterli mi?
Hayır. Bir backtest, bir kural setinin kayıtlı fiyatlar üzerinde, benzetilmiş bir gerçekleşme modeliyle ne yapmış olacağını sınırlar. İçinde gecikme yoktur, yeniden fiyatlama yoktur ve tam da bir sinyal tetiklendiği anda gelen spread genişlemesi hiç yoktur. İşleyen sıra şudur: önce backtest, kuralın aranmaya değer parametreleri varsa optimizasyon, ardından aramanın hiç görmediği veri üzerinde bir walk-forward kontrolü, sonra da stratejinin kaybedip toparlanmasını izleyecek kadar uzun süren bir demo hesap. Geçmiş sonuçlar geçmişi anlatır ve bu sayfadaki hiçbir şey bir öngörü değildir.