Bu makalede
Bu makaleyi okuduktan sonra…
- Test fonksiyonu kısıtını ağ hatası ve eksik tarihsel sürümden ayırabilirsiniz.
- Karar zamanına kadar bilinen son sürümü seçip null ile sıfırı ayrı değerlendirebilirsiniz.
- JSON sözleşmesini, dosya kökenini ve maliyet kapısının bilgi zamanını kontrol edebilirsiniz.
Kavramları makaleden ayrılmadan öğrenin
Backtesting — geçmiş veriyle strateji testi Expert Advisor (EA) — uzman danışman Ekonomik takvimBir EA, demo hesapta API verisini indirebilirken test ortamında aynı yanıtı alamayabilir. Bu tek başına sunucu kesintisini göstermez. Arşivi incelemeden önce testte kullanılan fonksiyonun çalışıp çalışmadığını ayırın. Bugünün değerini indirip geçmiş kararlara atamak aynı deneyi yeniden üretmez. Buradaki model açıkça verilmiş sürümleri oynatır; revizyonu, eksik veriyi ve sıfırı ayırır, dış API’ye bağlanmaz.
Çalışan WebRequest neden geçmiş testine yetmez?
MetaQuotes’un MQL5 belgesinde WebRequest fonksiyonunun Strategy Tester içinde çalıştırılamadığı belirtilir. Terminalde izinli URL listesine uç noktayı eklemek bu kısıtı kaldırmaz. Test ortamında kullanılamayan fonksiyon, ağ sorunu, yetkilendirme hatası ve normal EA çalışmasında gelen HTTP yanıtı farklı olaylardır. Önce hangi ortamda hangi çağrının başarısız olduğunu kaydedin; hepsini “veri yok” diye tek nedene bağlamayın.
Kural dışarıdan ekonomik gözlem istiyorsa başarısız isteği sıfırla değiştirmeyin. Sıfır meşru bir ölçüm olabilir; başarısızlık girdinin elde edilemediğini söyler. İsteği dosyayla değiştirmek de tek başına yetmez: dosyada karar anında henüz bilinmeyen revizyonlar bulunabilir. Teknik olarak okunan bir hücre, tarihsel olarak kullanılabilir bilgi olmak zorunda değildir.
HTTP çağrısını sinyale doğrudan bağlamadan gerekli gözlemi, sürümü, değeri ve kullanılabilirlik zamanını tanımlayın. EA temelleri veri, karar ve gerçekleşmeyi ayırır; burada veri katmanını inceliyoruz. Çevrimdışı adaptöre geçerken bilgi anlamı veya eksik veri politikası sessizce değişmemelidir. Aynı fiyat geçmişiyle farklı bilgi geçmişi, farklı deney demektir.
Çevrimiçi ve çevrimdışı adaptör nasıl ayrılır?
Çevrimiçi adaptör sağlayıcı yanıtını işler. Test adaptörü, korunmuş kayıtlardan karar anında kullanılabilir olanı seçer. İkisi de karar mantığına aynı türde sonuç verir: geçerli değer, açıkça kullanılamayan veri veya hata. Bu önerilen kod düzenidir; tamamlanmış robot ya da bütün API’lerle uyumluluk vaadi değildir. Ayrıştırma hatasını ekonomik ölçüm olarak sunmayın.
Ham yanıtları test için hazırlanmış kayıtlardan ayrı saklayın. Kaynak, şema sürümü, alınma zamanı ve kullanılabilirlik kanıtını tutun. Gözlemin ait olduğu dönem, onun öğrenildiği an değildir. Yalnız sürüm tarihi biliniyorsa kesin yayın saati uydurmayın. Günlük arşiv, gün içindeki 12:30 kararının o bilgiyi kullanabildiğini kendi başına kanıtlayamaz.
St. Louis Fed’in FRED açıklaması bugün bilinen tarihsel veriyle geçmişte bilinen sürümü ayırır. Bu, sürümlü ekonomik veriye örnektir; evrensel forex API’si değildir. YYYY-MM-DD biçimindeki sürüm tarihi kendiliğinden kesin UTC yayın zamanına dönüşmez. Gün içi test dosyasını üretmeden sağlayıcının zaman çizelgesinin hangi hassasiyeti gerçekten desteklediğini belirleyin.
MQL5 FileOpen belirlenmiş dosya alanını kullanır; testte ilgili ajanın klasörü söz konusudur. Göreli yol normal terminalde beklediğiniz dosyaya gitmeyebilir. Açma ve okuma başarısını kontrol edin; açılamayan dosyayı, eksiksiz ama boş tarihçe gibi işlemeyin. Ortak klasör seçeneği de sürüm doğruluğunu otomatik sağlamaz. Dosyayı aynı adla değiştirmek eski çalışmanın girdisini yeniden üretmeyi engelleyebilir.
Geçmiş karar hangi sürümü kullanabilir?
Üç yanıtın kurgu geçmişi
1 Ekim 2026 tarihli GDP-model gözlemini varsayalım. Bunlar gerçek GSYH açıklamaları veya bir uç noktadan alınmış kayıtlar değildir. Bütün saatler UTC’dir. availableAt, modelin kayda erişebildiği anı belirtir; emrin gerçekleşme anını belirlemez.
| availableAt | revision | value |
|---|---|---|
| 2026-10-01T12:00:00Z | initial | "1.0" |
| 2026-10-01T13:00:00Z | revised | "1.4" |
| 2026-10-01T14:00:00Z | unavailable | null |
12:30’da uygun en yeni değer 1,0; 13:30’da 1,4’tür. 14:30’da en yeni uygun kayıt null içerir: sonuç kullanılamaz. Bu politika eski 1,4’e dönmez ve yokluğu sıfır yapmaz. Karar tam 13:00’te verilirse eşitlik dahil olduğundan 13:00 kaydı seçilir. revision adı zaman sırasını belirleyen sayısal sayaç değildir.
Bugünkü değil, o anki sürüm
Değerin 1,2’den büyük olmasını isteyen kurgu kural, 12:30’da yanlıştır. Daha sonraki 1,4’ü koymak fiyat verisi aynı kalsa bile kararı tersine çevirir. Bu bilgi kullanılabilirliği denetimidir, strateji kârlılığı testi değildir. Araç kayıt seçer; işlem sinyali veya getiri hesaplamaz.
Son bilinen değeri kullanmak isteniyorsa izin verilen yaş ve yokluğun nedeni önceden ayrı politika olarak yazılmalıdır. Buradaki açık-null varyantı bunu uygulamaz. Daha güzel sonucu gördükten sonra geri dönüş ekleyip deneyi değişmemiş gibi göstermeyin. Revizyonla bilinen eski ölçüm ve açıkça kullanılamayan yeni ölçüm aynı durum değildir.
Yerel yeniden oynatıcıda ne incelenebilir?
Sayısal version: 1 ve events dizisi içeren JSON nesnesini kullanın. Her olayın tam alanları availableAt, observation, value, revision olmalıdır. Zaman YYYY-MM-DDTHH:mm:ssZ biçimindedir; kesirli saniye ve başka saat dilimi farkı kabul edilmez. Gözlem ve revizyon metindir; değer ondalık noktalı sayısal metin veya null’dır. Metin Number türüne dönüştürülmeden korunur. Türkçe anlatımdaki 1,4, makine alanında "1.4" olarak yazılır.
Sınırlar 1–200 olay, 64 KiB JSON, sekiz iç içe düzey ve 2.000 değerdir. Gözlem ve değer en çok 128, revizyon 64 karakterdir. Karar zamanı ayrıca aynı UTC biçiminde girilir. Bunlar aracın veri sözleşmesidir; ekonomik kaynakların genel formatı değildir.
Karar anında kullanılabilir bilgiyi yeniden yürütün
Öğretici örneğimiz tarayıcınızda yerel çalışır: hesaba veya API’ye bağlanmaz, girdilerinizi göndermez ya da kalıcı kaydetmez. Parola veya kişisel bilgi girmeyin.
UTC biçimi zorunludur. İstanbul saati 15:30 (+03:00), bu örnekte 12:30Z olur. Saati dönüştürmeden sonuna Z eklemeyin. JSON sayısal metinlerinde ondalık nokta korunur.
Seçici her gözlem için availableAt ≤ decisionAt koşulunu sağlayan en yeni sürümü kullanır. İlk kayıttan önce değer yoktur. Aynı gözlem ve aynı kullanılabilirlik zamanına sahip iki kayıt belirsizdir; yapıştırma sırası veya revizyon adının alfabetik sırası ile çözülmeyip reddedilir. Farklı gözlemlerin aynı zamanı paylaşması ise tek başına aynı anahtar çatışması değildir.
Alıştırma tarayıcıda yapıştırılmış olaylarla yerel çalışır; hesap veya API’ye bağlanmaz, anahtar istemez, girdileri kalıcı kaydetmez. Gerçek yayın zamanını doğrulayamaz. Geçerli JSON, gerçek arşiv kanıtı değildir. Daha sonraki revizyona ilk yayın saatini yazarsanız doğru seçim algoritması yanlış varsayımı yeniden üretir. Gerçek araştırmada kaynak ve zaman hassasiyeti belgelerini ayrıca saklayın.
MetaTrader belgeleri test ajanlarını terminalden ayrı dosya ortamları olarak açıklar. Paralel denemelerde canlı yanıtla üzerine yazılan dosya yerine sabit veri kopyası kullanın. Çalışma manifestine yalnız uç nokta adını değil, gerçekten korunmuş veri sürümünü ve dosya özetini yazın. Python testi zamana göre eşleştirmeyi; ekonomik takvim sürüm ve açıklama bağlamını ilerletir. Veri oynatmak Bid/Ask fiyatını, miktarı, maliyeti veya sunucu cevabını kendiliğinden oynatmaz.
TRY karşıörneği: aynı bütçede kararın neden değiştiği
Ayrı, tamamen varsayımsal EURTRY-Ask-model gözleminde 12:00 kaydı "40.01", 13:00 düzeltmesi "40.04", 14:00 kaydı null olsun. Bunlar gerçek kur, TCMB verisi veya dolum değildir; seçilen sayının bir maliyet kapısına etkisini gösterir. 12:30 kararında 1.000 EUR için fiyat referansı 40.010 TRY, ayrıca atanmış tek maliyet 5 TRY, toplam 40.015 TRY’dir. Kurgu bütçe 40.025 TRY olduğunda kapı geçilir; bu emir gönderildiği anlamına gelmez.
Gelecekteki düzeltmeyi öne çekerseniz aynı hesap 40.045 TRY olur ve kapı reddeder. Fark 30 TRY’dir; sonradan bilinen kurla daha ihtiyatlı görünmesi onu tarihsel olarak doğru yapmaz. 14:30’daki null ise “5 TRY maliyetle bedava euro” değildir: maliyet kapısı değerlendirilemez. Sıfır koymak bu kez sahte kabul üretir. Bu üç bilgi durumu kâr/zarar ölçümü veya bir sağlayıcının kotasyon düzeltme standardı değildir.
Aynı miktar ve bütçede tek değişen bilgi sürümü kararı tersine çevirir. Bu fiyat modeli getiri veya gerçekleşme ölçmez.
Küçük ekranda şemayı yatay kaydırabilir veya büyütebilirsiniz. Değerler ve sonuç aşağıdaki metinde de yer alır.
- 12:30, doğru sürüm
- 40.015 TRY; kabul – Bütçeden 10 TRY aşağıda; emir veya dolum iddiası değil.
- 12:30’a gelecek revizyonu koymak
- 40.045 TRY; ret – Bütçeyi 20 TRY aşar; daha temkinli görünen sonuç da yanlış kronolojidir.
- 14:30, açık null
- Değerlendirilemez – Sıfır ikamesinin 5 TRY sonucu geçersizdir; eksik kur ücretsiz euro değildir.
EA sonucunu yorumlamadan önce ne yapmalı?
- Veri sözleşmesini yazın; çevrimiçi ve çevrimdışı adaptörü ayırın. Ham yanıt, gözlem tanımı ve kullanılabilirlik kanıtını saklayın. Eksik tarihsel sürümü bugünün yanıtıyla doldurup arşiv diye adlandırmayın.
- Tek kurgu gözlemi ilk sürümden önce, ilk sürümle revizyon arasında ve açık null sonrasında izleyin. Tam zaman eşitliğini ve aynı anahtarlı çatışmayı kontrol edin. Sonuçları buradaki tabloyla karşılaştırın; sıfırla yokluğu ayrı tutun.
- Tester içinde amaçlanan dosyanın okunduğunu ve eksikliğin tanındığını doğrulayın. Veri sürümünü raporla koruyun. Sonra sinyal, gerçekleşme ve maliyetleri ayrı inceleyin; doğru veri seçimi gelecek kârını kanıtlamaz.
Anladığınızı kontrol edin
Alıştırma: yaklaşık 3 dakika.
Yanıtı ve açıklamayı göster
Doğru: 12:00 kaydı uygundur. Sonraki revizyon önceki kararın girdisini değiştirmez.
Diğer sorular
URL’ye izin vermek WebRequest’i tester içinde açar mı?
Bugünkü tarihsel gözlem tablosu yeterli mi?
Null sıfır mı, önceki değeri kullanmak mı?
Doğru yeniden oynatma bütün backtest’i doğrular mı?
TRY örneğinde null yerine sıfır koymak neden tehlikeli?
Kaynaklar ve doğrulama
- MetaQuotes — WebRequest
Fonksiyonun Strategy Tester kısıtı ile terminalin izinli URL ayarının ayrımı.
- MetaQuotes — FileOpen
Dosya alanı, test ajanı klasörü, ortak alan seçeneği ve açma başarısızlığı.
- St. Louis Fed — FRED Real-Time Periods
Şimdi bilinen ve geçmişte bilinen bilgi; gün hassasiyetli gerçek zaman dönemleri kesin gün içi UTC saati değildir.
- MetaTrader 5 — Testing Features
Ajanların dosya ortamları ve platformdan ayrılması; ortak klasör ayrıca tasarlanır.
Hesaplamalar açıkça belirtilen varsayımlara dayanır. Güncel piyasa verilerinin veya sağlayıcının koşullarının yerini almaz.
