Bu makalede
Bu makaleyi okuduktan sonra…
- Belgelenmiş grafik kısıtını sayfa modelindeki null durumundan ayırabilirsiniz.
- İşlem yapmayan tanı koduyla mod ve sürüm alanlarını kaydetmenin sınırlarını açıklayabilirsiniz.
- İlk ayrışmayı girdi, kullanılabilirlik ve tam sayısal hassasiyetle inceleyebilirsiniz.
Kavramları makaleden ayrılmadan öğrenin
Expert Advisor (EA) — uzman danışman Backtesting — geçmiş veriyle strateji testiYalnız MT5 görsel testinde çalışan bir EA için kararın veriye mi, grafikte çizilen nesneye mi bağlı olduğunu inceleyin. Grafik nesnesi açıkça hesaplanmış sinyal değerinin yerine geçmemelidir. Stratejiyi değiştirmeden modları, sürümleri, veriyi ve kayıtlardaki ilk farkı karşılaştırın. Buradaki özgün benzetim MT5 çalıştırmaz: sayıyı kullanılamayan girdiden ayırır, eksikliği sıfır yapmaz ve emir göndermez.
Görsel modda gerçekte ne değişir?
MQL5 tester belgesi, görsel olmayan test ve optimizasyonda grafik nesnelerinin çizilmediğini; oluşturulan nesnenin özellikleri sorgulandığında sıfır değerler alındığını belirtir. Bu kısıt görsel moda uygulanmaz. Belgelenmiş platform davranışını açıklıyoruz; sizin EA’nız üzerinde yapılmış deneyden söz etmiyoruz. Testler arasındaki her farkın aynı nedenden çıktığı sonucu çıkarılamaz.
EA çizgi fiyatını veya düğme durumunu girdi olarak okuyorsa o aşamayı gösterge ve fiyat verisinden ayrı kaydedin. Önce o modda kullanılabilir değer bulunup bulunmadığını belirleyin. Açık “kullanılamaz” durumu hesaplamayı durdurabilir; teknik sıfırı gerçek fiyat gibi kabul etmek teşhisi saptırır. Grafiğin görünmesi kullanılan bütün girdilerin hazır olduğunu kanıtlamaz.
Sayısal sinyal grafik nesnesinden nasıl ayrılır?
Eksik girdi sıfır fiyat değildir
| Yol | Girdi | Değerlendirme |
|---|---|---|
| Açık sayısal sinyal | 1,1050 | 1,1050 > 1,1040: doğru |
| Kullanılamayan nesne | null: değer yok | Koşul değerlendirilmez |
| Hatalı ikame | Yokluk yerine 0 | 0 > 1,1040: sıradan yanlış gibi görünür |
Son satır hatalı varyanttır. Korunan yolda eksik okuma null kalır; diğer varyant sıfır ikamesinin sonucunu gösterir. Sıfır sayıdır, null ise modelin yokluk durumudur. Ters kuralda, “sinyal eşikten küçük” karşılaştırmasında sahte sıfır koşulu sağlamış bile görünür. Rastgele yedek sayı koyarak programı onardığınızı varsaymayın. Eşit sayılarla kesin büyüktür koşulu yanlıştır; bu, girdinin yokluğu değildir.
Veriyi grafik nesnesinden ayırı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.
Sinyal ve eşikte 1,1050 veya 1.1050 yazabilirsiniz. Binlik ayırıcı kullanmayın; 1.000 gibi belirsiz girişler reddedilir.
Araç iki pozitif, sonlu değeri değiştirmenize izin verir. Araca ondalık virgül veya noktayla pozitif sayı girebilirsiniz; binlik ayırıcı kullanmayın. 10⁻⁸–10⁸ aralığı ve en çok 15 basamak geçerlidir. Görsel olmayan modelde nesne kullanılamaz; görsel modelde sinyal değerini taşır. Bu, tüm MT5 davranışının kopyası değil, bu sayfanın açık benzetim kuralıdır.
Açık sayı değerlendirilirken eksik nesne yolunda sonuç bilinmiyor kalır. Sayfa grafik okumaz, tester veya hesap/API çalıştırmaz; girdileri göndermez ve kalıcı saklamaz. Alıştırma yanlış sonuçla değerlendirme yapılamamasını ayırır, yatırım sinyali üretmez. Gerçek EA arızasının nedenini yalnız bu araçla belirleyemezsiniz; başarıyı daha yüksek kâr hanesine bakarak da ölçmeyin.
İşlem yapmadan program modu nasıl kaydedilir?
MQL_TESTER, MQL_VISUAL_MODE ve MQL_OPTIMIZATION bayrakları programın ortamını bildirir. TERMINAL_BUILD terminalin derleme numarasıdır. Pencere görünümünden modu tahmin etmek yerine gerçek okumaları kaydedin. Aynı bayraklar veri ve parametrelerin de aynı olduğu anlamına gelmez; onlar ayrı kayıtlardır.
Aşağıdaki küçük bağımsız tanılama EA’sı OnInit içinde yapılandırmayı kaydeder, OnTick gövdesini boş bırakır. Emir göndermez veya değiştirmez. OnInit belgesi başlangıç imzasını, PrintFormat belgesi biçimli çıktıyı açıklar. Ayrı MQ5 dosyası olarak kaydedip kendi MetaEditor’ünüzde derleyin; gerçek derleme sonucu ve günlükleri saklayın. Burada native derleme yaptığımızı iddia etmiyoruz.
#property strict
int OnInit()
{
PrintFormat("tester=%d visual=%d optimization=%d build=%d symbol=%s period=%d",
(int)MQLInfoInteger(MQL_TESTER),
(int)MQLInfoInteger(MQL_VISUAL_MODE),
(int)MQLInfoInteger(MQL_OPTIMIZATION),
(int)TerminalInfoInteger(TERMINAL_BUILD),
_Symbol, (int)_Period);
return INIT_SUCCEEDED;
}
void OnTick() {}
Mevcut EA’ya ikinci OnInit eklemeyin veya başlangıç işlevini bu örnekle değiştirmeyin. Kayıt eklerken mevcut akış korunmalıdır. Tester belgesinde optimizasyon sırasında PrintFormat için OnInit istisnası vardır; diğer aşamaların her birinden mesaj görünmemesi o aşamaların hiç çalışmadığını kanıtlamaz. Kodun tester/visual/optimization/build/symbol/period etiketleri ve tür belirteçleri makine kaydının parçası olarak korunmuştur.
Kârı değil ilk farkı nasıl bulursunuz?
Eşleştirilmiş iki çalışma kaydı hazırlayın: görsel/görsel olmayan mod, terminal ve kod sürümleri, girdiler, sembol ve zaman dilimi, tick üretimi, istenen ve gerçek başlangıç, veri kopyası, maliyetler ve ilk durum. Ayar dosyalarını ve sürüm kimliklerini de koruyun. Beyanlar farklıysa bütün sonucu grafik penceresine atfetmeyin. İki çalışma kaydı karşılaştırıcısı bu düzeni destekler.
İlk farklı aşamayı arayın: alma başarısı, veri zamanı, gösterge hazırlığı, sinyal, koşul veya karar. “Kâr 80 yerine 120” notu o aşamayı göstermez. Asıl günlükleri değiştirmeyin; yanlarına küçük karşılaştırma tablosu koyun. Programın geçmişte kaydetmediği değeri sonradan olmuş gibi doldurmayın.
Tanı kaydı iki çalışmadaki olayları eşleştirecek kadar açık ve küçük olmalıdır. Sabit kimlik olmadan her şeyi yazmak ilk ayrışmayı saklayabilir. İstenen girdi, gözlem kimliği, zaman veya sıra konumu ve kabul durumu kaydedilsin. Benzer fiyatları aynı olay sanmak yerine aynı kimliğin aşamalarını izleyin. Bu bir kayıt tasarımıdır; her gizli bağımlılığı otomatik keşfetme garantisi değildir.
TRY örneği: iki kayıt aynı görünüp koşulda ayrışabilir
Kurgu EUR/TRY tabanlı iki sinyal değeri A’da 40,104, B’de 40,103 olsun; ikisi de kullanılabilir ve aynı gözlem kimliğine aittir. Kesin eşik 40,1035’tir. A > eşik doğru, B > eşik yanlıştır. İki ondalık haneye yuvarlanmış günlük her iki sinyali 40,10 gösterebilir. Eşiği de iki haneye yuvarlamak onu 40,10 gösterir. Böyle bir ekran, ilk fark bulunmadığını kanıtlamaz.
Burada işlem veya piyasa kotasyonu yoktur. Ayrı ölçek karşılaştırması için 1.000 EUR ile (sinyal−eşik) çarpımı A’da +0,50 TRY, B’de −0,50 TRY’dir; iki sinyal arası farkın karşılığı 1 TRY’dir. Bunlar gerçekleşmiş kâr/zarar değildir. Gösterimde kaybolan basamak, parasal ölçek sıfır demek değildir. Kararda kullanılan tam değeri ve sürümünü saklayın; yalnız iki haneli metni yeniden okuyup eski hesabın doğru kopyası sanmayın.
Kullanılabilirliği ve kararın gerçek hassasiyetini birlikte kaydedin. Biçimlenmiş ekran metni ham sayısal girdinin yerine geçmez.
Küçük ekranda şemayı yatay kaydırabilir veya büyütebilirsiniz. Değerler ve sonuç aşağıdaki metinde de yer alır.
- A kaydındaki tam hassasiyetli değer
- 40,104 > 40,1035: doğru – 1.000 EUR ölçekli fark +0,50 TRY; gerçek PnL değil.
- B kaydındaki tam hassasiyetli değer
- 40,103 > 40,1035: yanlış – Aynı ölçekli fark −0,50 TRY; iki sinyal arası 1 TRY.
- Yalnız iki haneli günlük
- A = B = 40,10 görünür – Görünür eşitlik, kararın tam girdilerinin eşitliği değildir.
Sinyal tasarımında ne değişmeli?
Hesaplama açık değerle beraber kullanılabilirlik durumu döndürsün; çizim katmanı bu değeri göstersin. Böylece çizimi kapatmak girdinin kaynağını kasıtlı olarak değiştirmez. Aynı modülü eksik veri ve eşik eşitliği dahil birkaç kontrollü girdiyle kontrol edin. Bu, bütün tester sonuçlarının eşitliğini garanti etmez; sürüm, veri, maliyet ve diğer kod bağımlılıkları hâlâ önemlidir.
MetaQuotes’un grafik nesneleri bölümündeki görsel mod istisnası, belgeye dayalı davranış açıklamasıdır; kendi EA’nızda nedenin kanıtı için günlük gerekir. Kaynak kod yoksa EA yazarına iki çalışma kaydını ve ilk belgelenmiş ayrışmayı verin. Teşhis yerine peş peşe canlı deneme emirleri kullanmayın. MT4 ve MT5 test hazırlığı daha geniş kontrol sırasını açıklar.
Sonraki somut adımlar
- İki modun kaydını tamamlayın. Kod, terminal, girdi, veri ve aralığı koruyun; bilinmeyen alanı işaretleyin. Aynı EA dosyası diğer bütün koşulların eşit olduğunu kanıtlamaz.
- Yokluğu sıfırdan ayırın. Sinyal 1,1050 ve eşik 1,1040 ile başlayın, sonra eşit değerleri deneyin. Nesne kullanılamadığında açık sayısal yolun sonucundan bağımsız olarak null kaldığını kontrol edin. İşlem hesabı gerekmez.
- İlk ayrışan aşamayı kaydedin. Ayrı demo yapılandırmasında veya tester içinde işlemsiz günlükleri toplayıp sırayı karşılaştırın. Girdi, kullanılabilirlik ve koşulu ayırın. Tanı kaydı güvenlik, kârlılık veya yatırım önerisi kanıtı değildir.
Anladığınızı kontrol edin
Alıştırma: yaklaşık 3 dakika.
Yanıtı ve açıklamayı göster
Doğru. Bu sayfa modelinin semantiğidir; MT5 fonksiyonunun null döndürdüğü iddiası değildir.
Diğer sorular
Modelin null değeri MT5 fonksiyonunun null döndürmesi mi?
Benzetimde doğru sonucu EA’nın emir açacağı anlamına gelir mi?
Grafik nesnelerini kaldırınca bütün testler aynı olur mu?
Küçük kayıt kodu işlemlere hazır bir strateji mi?
İki kayıtta 40,10 yazması neden yeterli değil?
Kaynaklar ve doğrulama
- MetaQuotes — Testing Trading Strategies
Görsel olmayan nesne özelliği sıfırları, görsel istisna ve optimizasyonda OnInit mesaj istisnası.
- MetaQuotes — Running MQL5 Program Properties
MQL_TESTER, MQL_VISUAL_MODE ve MQL_OPTIMIZATION ortam bayrakları.
- MetaQuotes — Client Terminal Properties
TERMINAL_BUILD gerçek istemci derleme numarasıdır.
- MetaQuotes — OnInit
int OnInit imzası ve INIT_SUCCEEDED; verilen kodun native derleme kanıtı değil.
- MetaQuotes — PrintFormat
Biçim belirteciyle değer türü, sayısı ve sırası eşleşmelidir; genel optimizasyon kısıtının OnInit istisnası tester bölümünde açıklanı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.
