Pratik uygulama

EA API verisini testte nasıl yeniden oynatır?

WebRequest kısıtı, çevrimdışı adaptör, UTC sürüm seçimi ve null/sıfır ayrımı. Yerel araç ile TRY bütçe karşıörneği.

Pembe zeminde daire boşluklu mercan, kare boşluklu mor ve üçgen boşluklu lacivert üç dik panel; içlerinden geçen sarı şerit ve küpler, sağda lacivert kutu. Görünür yazı yok.
Yapay zekâ ile üretilmiş editoryal illüstrasyon; gerçek veri akışı, API çıktısı veya işlem sistemi değildir.

Kaldıraçlı forex ve CFD işlemleri kısa sürede kayba yol açabilir. İçerik eğitim amaçlıdır; kişiye özel yatırım tavsiyesi içermez.

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 takvim

Bir 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.

Sonraki kayıt, önceki kararın bilgisi değildir
availableAtrevisionvalue
2026-10-01T12:00:00Zinitial"1.0"
2026-10-01T13:00:00Zrevised"1.4"
2026-10-01T14:00:00Zunavailablenull

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

Bugünkü değil, o anki sürümKurgu GDP-model kaydında 12:00 UTC’de 1,0; 13:00’te düzeltilmiş 1,4; 14:00’te null kullanılabilir olur. 12:30 kararı 1,0; 13:30 kararı 1,4; 14:30 kararı eksik sonuç seçer. Eksik veri sıfır değildir. Kutular fiyat grafiği veya ekonomik veri yayını değildir.Bugünkü değil, o anki sürüm12:00 UTCilk sürümdeğer: "1.0"12:30 → 1,013:00 UTCdüzeltilmişdeğer: "1.4"13:30 → 1,414:00 UTCkullanılamazdeğer: null14:30 → eksikKurgu olaylar: 1 Ekim 2026 • tüm saatler UTC
Revizyon önceki kararın bilgisini değiştirmez. Açık null yeni sinyali değerlendirmeyi engeller; sıfır veya eski değer ikame edilmez.

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.

Biçim ve model sınırları

version: 1; events: tam olarak şu alanları içeren 1–200 nesne availableAt, observation, value, revision. availableAt: YYYY-MM-DDTHH:mm:ssZ. observation: en çok 128 karakterlik metin; revision: en çok 64 karakterlik metin; value: ondalık noktalı sayısal metin (en çok 128 karakter) veya null. Eksik değer sıfır değildir.

availableAt değeri karar anını aşmayan son sürüm seçilir. Aynı observation ve availableAt değerlerini taşıyan iki kayıt belirsizdir; inceleme engellenir. JSON sınırları: 64 KiB, 8 düzey, 2.000 değer. Zamanlar beyan niteliğindedir; sayfa gerçek yayımlanma anını doğrulayamaz.

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.

TRY bütçe kapısı: değer kadar sürüm de önemliTamamen atanmış EURTRY-Ask-model: 12:00 değeri 40,01, 13:00 değeri 40,04, 14:00 null. Miktar 1.000 EUR, tek ek maliyet 5 TRY ve bütçe 40.025 TRY.VARSAYIMSAL HESAPLAMA12:30, doğru sürüm40.015 TRY; kabul12:30’a gelecek revizyonukoymak40.045 TRY; ret14:30, açık nullDeğerlendirilemez
TRY bütçe kapısı: değer kadar sürüm de önemli. Tamamen atanmış EURTRY-Ask-model: 12:00 değeri 40,01, 13:00 değeri 40,04, 14:00 null. Miktar 1.000 EUR, tek ek maliyet 5 TRY ve bütçe 40.025 TRY.

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ı?

  1. 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.
  2. 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.
  3. 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.

GDP-model 12:00 UTC’de 1,0, 13:00’te düzeltilmiş 1,4 içeriyor. 12:30’da model hangisini seçer?

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ı?
Hayır. MetaQuotes belgesindeki Strategy Tester kısıtını kaldırmaz. Önce programın nerede çalıştığını ve hatanın türünü belirleyin. Tarihsel değerlendirme için korunmuş veriyle ayrı adaptör hazırlayın; demo indirmenin çalışması çevrimdışı arşivin doğru olduğunu kanıtlamaz.
Bugünkü tarihsel gözlem tablosu yeterli mi?
Her zaman değil. Gözlem dönemi ve sürümün öğrenildiği zaman farklıdır; bugünkü tabloda eski dönemlerin düzeltilmiş değerleri bulunabilir. Köken, sürüm yöntemi ve zaman hassasiyetini doğrulayın. Yalnız gün verilen kaynağa kesin UTC yayın saati uydurmayın; seçici yanlış etiketlenmiş zamanı kendisi keşfedemez.
Null sıfır mı, önceki değeri kullanmak mı?
Bu modelde ikisi de değil. 14:00 null kaydından sonra 14:30 sonucu kullanılamazdır; eski 1,4’e dönülmez. Son bilinen değere dönüş ayrı, önceden belirlenmiş yaş ve yokluk politikası ister. Araç her strateji için en iyi eksik veri yöntemini seçmez.
Doğru yeniden oynatma bütün backtest’i doğrular mı?
Yalnız verilen zaman ve kayıtlarla sürüm seçimini doğrular. Kaynak, ayrıştırma, sinyal ve eksik veri davranışı ayrıca kontrol edilir. Fiyat, maliyet, miktar, pozisyon durumu ve gerçekleşme başka katmanlardır. Veri sürümünü, raporu ve seçilen girdileri birlikte koruyun; bu denetim gelecekte kâr garantisi değildir.
TRY örneğinde null yerine sıfır koymak neden tehlikeli?
1.000 EUR × 0 + 5 TRY, 5 TRY gibi görünen sahte maliyet üretir ve 40.025 TRY kapısını geçirir. Oysa kur kullanılamazdır; hesap yapılamaz. Bu fark küçük yuvarlama veya komisyon değil, durum türü hatasıdır.

Kaynaklar ve doğrulama

  1. MetaQuotes — WebRequest

    Fonksiyonun Strategy Tester kısıtı ile terminalin izinli URL ayarının ayrımı.

  2. MetaQuotes — FileOpen

    Dosya alanı, test ajanı klasörü, ortak alan seçeneği ve açma başarısızlığı.

  3. 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.

  4. 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.

Yazar hakkında

Jarosław Wasiński, Polonya’da çalışan bir editör ve piyasa analistidir. MyBank.pl’yi 2004 yılında kurdu; 2007 yılından beri döviz piyasasını takip ediyor.