Pratik uygulama

MQL5 EA: tampon, olay ve gerçek pozisyon kontrolü

MQL5 EA’da izin, veri sırası ve dolumu ayırın. CopyBuffer örneğini çözün; TRY kayıt defterinde aynı dealin tekrar sayılmasının hacim ve kâr hatasını görün.

Turkuaz zeminde büyük koyu lacivert BUFFER yazısı; sağda koyu dik parça önünde aralıklı üç kalın krem-sarı yatay blok.
Yapay zekâ ile üretilmiş editoryal görsel; soyut tampon blokları gerçek kod ekranı, hesap sonucu veya emir kaydı 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…

  • Belirtilen düz CopyBuffer dizisinde son kapalı değeri bulabilirsiniz.
  • Tanıtıcı, hesaplanan veri, kopyalanan adet ve boş olmayan değeri ayırabilirsiniz.
  • Yeniden başlatma sonrası aynı dealin tekrarlı okunmasını yeni dolum saymadan uzlaştırabilirsiniz.

Kavramları makaleden ayrılmadan öğrenin

Backtesting — geçmiş veriyle strateji testi İşlem planı Demo hesap Zirveden düşüş — drawdown Stop loss — zarar durdur Yeniden fiyatlama — requote

MQL5 Expert Advisor, MetaTrader 5 içinde olaylara yanıt veren programdır. Gerekli izinlerle kuralları değerlendirip işlem isteği gönderebilir. Olayın işlenmesi, işlem izni ve sunucu yanıtı başarılı yürütmeden ayrıdır; grafiğe program eklemek herhangi bir sonucu kanıtlamaz. Kontrol edilecek ilk iş yalnız “sinyal oluştu mu?” değildir: doğru mum okundu mu, istek neye dönüştü, mevcut pozisyon ne kadar?

MQL5 Expert Advisor tam olarak nedir?

MetaEditor MQ5 kaynak dosyasını EX5 çalıştırılabilir programa derler. EX5 kaynak olmadan dağıtılabilir; dili öğrenmek satın alınmış kapalı EX5’in açıklanmayan algoritmasını ortaya çıkarmaz. EA izinli işlem isteği gönderebilir. Göstergenin olayları ve yasak işlem işlevleri farklıdır; göstergeler hesap veya bildirim de yapabildiğinden “yalnız çizer” sözü dar kalır.

MQL5 EA MT5 ortamını kullanır. MT4’te Expert Advisor adı kendi dil ve arayüzüyle vardır; diğer otomasyonlar başka emir arayüzü kullanabilir. MT4/MT5 EA ile algoritmik ilk adımlar bu ayrımları açar. Ortam seçmek stratejinin kalitesini belirlemez.

Dizin sıfır son kapalı mum olmayabilir

CopyBuffer start_pos=1, count=3 ile AS_SERIES olmayan düz diziye tam üç değer kopyalasın. Fiziksel bellekte en eski önce gelir; bu özel durumda son kapalı değer dizin 2’dedir.

Üç CopyBuffer değerinin fiziksel sırasıAS_SERIES olmayan düz dizi, shift 1’den istenen üç değeri alır. Fiziksel sıra shift 3=103, shift 2=101, shift 1=102. Son kapalı değer dizin 2’dedir. 102,5 üstü testini eski 103 geçer, güncel kapalı 102 geçmez.DÜZ DİZİ: ÖNCE EN ESKİCopyBuffer: start_pos = 1, count = 3dizin 0shift 3103dizin 1shift 2101dizin 2shift 1102daha eskison kapalı> 102,5 testi: 103 geçer, 102 geçmez.Shift 0 kopyalanmadı.

Kurgu değerler 103, 101, 102; tam 3 öğe, hata veya kısmi sonuç yok. Eşik 102,5 veri seçimini kontrol eder, yatırım sinyali değil. Başka dizi ayarında dizin 2’yi evrenselleştirmeyin.

Dizin 0’daki eski 103 ile dizin 2’deki son kapalı 102 aynı karşılaştırmayı ters sonuçlandırabilir.

start_pos, dönen adet ve hedef dizi indeksleme yöntemini test kaydına yazın. Adedi kontrol etmek sırayı kontrol etmek değildir; doğru yazılmış karşılaştırma yanlış tarihsel değerle beslenebilir.

OnInit, OnTick ve OnDeinit ne yapar?

OnInit başlangıç hazırlığıdır. Bir yaşam döngüsü olayıdır, programın bütün kullanımında yalnız bir kez çağrılacağı garantisi değildir. Gerekli kaynakları kontrol edin; hazırlık tamamlanamıyorsa hata durumu döndürün.

OnTick bağlı grafiğin sembolüne ait NewTick olayını işler. Olay kuyrukta veya işleniyorsa yenisi kuyruğa eklenmez. EA başka olayları da kullanabilir, OnTick yazması zorunlu değildir. AutoTrading’i kapatmak yeni işlem isteğini engeller; hesaplamayı durdurmaz, çalışan işleyiciyi kesmez.

OnDeinit kaldırma, kapanış veya yeniden başlatma gerektiren değişikliklerin nedenini ele alır. Kaynak ve kalıcı durumu açıkça yönetin. OnTimer ve OnTradeTransaction görev için önemli olabilir; yaşam üç işleyiciden ibaret değildir. Çok sembollü EA’da bağlı grafiğe gelen tick, diğer sembollerin verisinin güncel olduğunu göstermez.

CTrade ve emir yanıtları nasıl okunur?

OrderSend true döndüğünde piyasa işlemi mutlaka dolmuş değildir. Yanıt kodunu inceleyip emir, deal ve pozisyonu uzlaştırın. OrderCheck ön kontroldür, sonra dolum garantisi değil. Ayrı hata testinde EA 0,10 lot alış ister ve yanıt belirsizleşir. Kontrolsüz tekrar, iki istek de dolarsa 0,20 lot yaratabilir; yerel teyit eksikliği sunucunun hiçbir şey yapmadığını kanıtlamaz.

OnTradeTransaction emir silinmesini geçmişe deal eklenmesinden ayırır; bildirimlerin öncelikli geliş sırası garanti edilmez. Başlangıç pozisyonu yok, teyitli iki alış D1=0,04 ve D2=0,06 lot olsun. ORDER_DELETE ile sayacı sıfırlayan hatalı kod D1, D2, ORDER_DELETE sonunda sıfır; ORDER_DELETE, D1, D2 sonunda 0,10 okur. Teyitli alış toplamı ikisinde 0,10. Emir durumu ve pozisyon maruziyeti ayrı alanlardır. Gerçek kayıt defteri satış, tersine dönüş, geçmiş düzeltmesi ve hesap muhasebe modunu da ele almalıdır.

CTrade Buy, Sell ve PositionClose gibi yöntemler sunar. Buy yönteminin başarılı yapı kontrolü, her zaman başarılı işlem değildir; ResultRetcode ve ResultDeal kontrol edilir. Fiyat kayması dolum ile beklenen fiyat farkını ayrıca açıklar.

TRY karşı örneği: geçmişi tekrar okumak yeni deal değildir

Ayrı USD/TRY modelinde aynı sunucu ve hesap, tek net pozisyon, başlangıç sıfır; başka işlem veya düzeltme yok. Sözleşme 100.000 USD/lot. Teyitli D1 ticket 1001: 0,04 lot alış, Ask dolumu 40,01. D2 ticket 1002: 0,06 lot alış, Ask dolumu 40,03. Son ortak Bid 40,02; komisyon, finansman ve başka ücret sıfır varsayılmıştır. Fiyatlar kurgu, gerçek tarife değildir.

Yerel kodun sırayla D1 ve D2’yi işleyip yeniden başlatma uzlaştırmasında D1’i bir kez daha okuduğunu varsayın. Bu üçüncü bir sunucu dolumu veya MT5’in kesinlikle çift bildirim yaptığı iddiası değildir; aynı dealin kendi kodumuza iki giriş yoluyla ulaşmasıdır. Hesap/sunucu kapsamındaki ticket anahtarıyla tutulan kayıt defterinde iki deal, toplam 0,10 lot vardır. Kör ekleme listesi 0,04+0,06+0,04=0,14 lot uydurur.

Gerçek iki dolumun maliyet toplamı 4.000×40,01+6.000×40,03=400.220 TRY, ortak Bid değeri 10.000×40,02=400.200 TRY; açık fiyat sonucu −20 TRY. Tekrarlı D1 sayılırsa sahte maliyet 560.260, sahte değer 560.280 TRY, sonuç +20 görünür. Eksik kimlik kontrolü yalnız hacmi değil kârın işaretini değiştirir. Toplam tutarları büyüklükle ağırlıklandırın; lot ortalaması yerine fiyatların basit ortalaması da yanlıştır.

Demo kabul testine “aynı geçmişi yeniden işlerken durum değişmemeli” koşulu ekleyin. Bunun yalnız bu değişmeyen alış listesinde idempotent olduğu açıktır; gerçek DEAL_UPDATE/DELETE düzeltmesini körce “görüldü” diye atlamak başka hatadır. Pozisyon kimliği, gerçek güncel hacim ve geçmişi uzlaştırın. Örnek yeni emir göndermeyi veya gerçek kârı kanıtlamaz.

Tekrarlanan okuma, yeni deal değildirAynı hesap/sunucu, başlangıç sıfır, yalnız iki alış deal, 100.000 USD/lot; D1 0,04 lot×40,01 ve D2 0,06 lot×40,03. Ortak Bid 40,02; ücret yok.VARSAYIMSAL HESAPLAMAKimlikli iki deal0,10 lot; −20 TRYD1’i tekrar ekleyen yerel kod0,14 lot; sahte +20Kurtarma kabul koşuluAynı geçmiş, aynı durum
Tekrarlanan okuma, yeni deal değildir. Aynı hesap/sunucu, başlangıç sıfır, yalnız iki alış deal, 100.000 USD/lot; D1 0,04 lot×40,01 ve D2 0,06 lot×40,03. Ortak Bid 40,02; ücret yok.

Yalnız bildirim sayısını toplamayın. Mevcut pozisyonu kimlikli deal kayıt defteriyle uzlaştırın; aksi hâlde hacim hatası kârın işaretini bile değiştirebilir.

Küçük ekranda şemayı yatay kaydırabilir veya büyütebilirsiniz. Değerler ve sonuç aşağıdaki metinde de yer alır.

Kimlikli iki deal
0,10 lot; −20 TRY – Maliyet 400.220, Bid değeri 400.200 TRY. Gerçek iki dolumun açık fiyat sonucu.
D1’i tekrar ekleyen yerel kod
0,14 lot; sahte +20 – Sahte maliyet 560.260 ve değer 560.280 TRY. Üçüncü dolum gerçekleşmedi.
Kurtarma kabul koşulu
Aynı geçmiş, aynı durum – Değişmeyen ticket tekrarında hacim artmamalı. Gerçek geçmiş düzeltmeleri ayrıca işlenir.

Strategy Tester geçmişi ezberlemeyi nasıl ayırır?

MT5 test aracı seçilen mod ve veriyle üretilmiş tick veya aracı kurumun topladığı gerçek tick kullanabilir. Kökeni, zamanı, sözleşme ayarını ve maliyeti raporla saklayın; gerçek tick evrensel MetaQuotes fiyat kaynağı demek değildir. Aynı geçmişte parametre seçip onu değerlendirme diye raporlamak kanıtı abartabilir; düzgün eğri veya canlı başarısızlık matematiksel zorunluluk değildir.

Dokunulmamış değerlendirme dönemi bırakın, tekrarlanan araştırma seçimlerini kaydedin. Geriye dönük test bunun için gerekir. Tam kopyalama, doğru mum demek değildir; sinyalden önce veri seçimini doğrulayın. Veriyi sonradan gördüyseniz yeniden adlandırarak görülmemiş yapamazsınız.

EA ne zaman yardımcı olur, ne zaman zarar verebilir?

EA tekrarlanabilir kontrolleri uygulayabilir, seçilmiş araçları izleyebilir. Ayda 200 işlem, gece çalışması veya hızlı karar olası tasarım gereksinimidir, kârlı avantaj kanıtı değil. Bilgi girdilerini, olay koşullarını ve işlem açmama kurallarını yazın. Sıra dışı veri açıklaması veya piyasa koşulu test ve gözetim ister; otomasyonu otomatik olarak geçersiz kılmaz.

Pazar yeri grafiği veya kaynağı belirsiz forum anketi gelecekte canlı performans tahmini değildir. Kontrol edeceğiniz şey belirli veri ve izin durumunda programın gerçekten ne yaptığıdır. Bunu kârlılık değerlendirmesinden ayrı tutun.

Kendi EA’nızı yazmaya değer mi?

Küçük proje kesin kuralların uygulanmasını sınayabilir. Öğrenme bütçesini işlev ve beceriye göre seçin; üç-altı ay veya satın almak yerine yazmak daha üstün sonuç garantilemez. Gözetimsiz çalışma altyapı, izin ve kurtarma prosedürü gerektirir.

Yerel AutoTrading düğmesi pozisyon kapatmaz, hesaplamayı durdurmaz. Sunucunun kabul ettiği sıradan stop yerel terminal kapalıyken kalabilir; yalnız EA kodundaki çıkış programın çalışıp sunucuya ulaşmasına bağlıdır. MetaQuotes Virtual Hosting taşınmış ayrı ortamdır; orada otomatik işlem açıktır, yerel düğme uzaktaki örneği durdurmaz. Windows VPS başka hizmettir. VPS ve gecikme seçimi yol ve süreklilik gereksinimine göre yapılır.

Eksik gösterge verisi, yeniden başlatma, geçersiz hacim adımı, belirsiz yanıt ve manuel pozisyon değişikliği için kabul koşulları koyun. Eski sinyale güvenmeden güncel maruziyeti kurun. Netting’de aynı sembolde stratejiler ortak net pozisyon kullanır; Magic Number ayrı sermaye veya teminat yaratmaz. Dil veya platform adı Türkiye’de uygun ürün ya da yetkili aracı kurum kanıtı değildir.

Tanıtıcı var; gösterge değeri hazır mı?

Tanıtıcı yaratmak gereken mumun hesaplandığını göstermez. BarsCalculated hesaplanmış veri adedini, hatada −1 döndürür. Ardından CopyBuffer’ın gerçek adedini, doğru tamponu ve mum kaymasını kontrol edin. Başarısız okumayı sıfıra çevirmeyin; RSI sıfır aşırı bir durumu anlatabilir, “veri hazır değil” değildir.

Tanıtıcı var; gösterge değeri hazır mı?

Tanıtıcı var; gösterge değeri hazır mı?Dört ayrı kontrol: tanıtıcı, hesaplanan veri, kopyalanan adet ve geçerli değer.TanıtıcıINVALID değilHesaplanan verigereken mumCopyBufferbeklenen adetDeğergeçerli, boş değil
Hazır veri için dört kontrolün tümü geçmelidir.

Model bir değer ister: A geçersiz tanıtıcı, okuma yok; B tanıtıcı var ama sıfır değer kopyalandı, bekle; C bir değer kopyalandı ama EMPTY_VALUE, kullanılabilir sinyal yok; D geçerli 45 kopyalandı, kural değerlendirilebilir. 45 atanmış okuma, yatırım sinyali değil. EMPTY_VALUE varsayılan DBL_MAX’tır, sonlu sayıdır; yalnız sonluluk kontrolü yetmez. Özel göstergenin boş işareti başka olabilir. Sözleşmesini kontrol edin, bütün sıfırları reddetmeyin.

Alıştırma: tanıtıcı ve kopyalanmış tek EMPTY_VALUE var. Ne yapmalı?

Strateji eşiğini değerlendirmeyin. Tampon, mum ve boş işaretini kontrol edin; kullanılmayan veriyi kaydedip uygun sonraki olayda yeniden deneyin. Sıfır gözlem uydurmayın.

API verisi için çevrimdışı bilgi tekrarı ayrıca erişilebilirlik testi ister. Grafiğe bağlı kuralın görsel test koşulları farklıdır.

Yarın hangi beş kontrol yapılmalı?

  1. Gerçek sağlayıcı kanalından MT5’i doğrulayıp kontrollü demoda örnek Moving Average veya MACD EA’yı EUR/USD H1 üzerinde tek geçişle inceleyin. Sermaye eğrisi, düşüş ve kâr faktörünü rapordan okuyun; adı veya güzel eğriyi onay saymayın.
  2. Resmi belgelerde önce OnInit, OnTick ve CTrade’ı okuyup görev yerlerini bulun. Sonra CopyBuffer adet ve indekslemesini örnekteki 103/101/102 ile doğrulayın. Amaç önce belge ve veri sözleşmesini anlamaktır.
  3. Girdi, giriş, çıkış, miktar ve işlem açmama koşullarını yazın. Takdire dayalı kararı açık işaretleyin; bağlamsal koşul tanımlı girdilerle biçimselleştirilebilir. Kurulum listesi belirsiz adımları ayırır.
  4. Küçük öğrenme projesine veri, olay ve yanıt kabul testleri koyun. TRY kayıt defterini iki kez besleyip hacim ve değerlemenin değişmediğini sınayın; geçmiş düzeltmelerini bu basit modelle karıştırmayın.
  5. Gerçek maruziyetten önce işletim akışını demoda inceleyin. Bir ay yalnız örnek süre; demo dolumu canlıdan farklı olabilir. Test aracındaki gecikme benzetimi bütün gelecekteki gerçek dolumların ölçümü değildir.

Anladığınızı kontrol edin

Alıştırma: yaklaşık 2 dakika.

AS_SERIES olmayan düz diziye shift 1’den başarılı CopyBuffer sonucu [103,101,102] geldi. Son kapalı mum hangisidir?

Yanıtı ve açıklamayı göster

Fiziksel bellekte en eski önce gelir. Üç değerli düz dizinin son indeksi 2, shift 1’i taşır.

Diğer sorular

MQL5 EA ile Python bot nasıl ayrılır?
MQL5 EA MT5 olaylarını, verisini ve işlem işlevlerini kullanır. Python sağlayıcı API’si veya MetaQuotes’un MT5 terminal entegrasyonunu kullanabilir; mutlaka dışarıda REST/FIX demek değildir. Bağımlılık, olay, veri erişimi, emir yanıtı ve test gereksinimini karşılaştırın. Dil makine öğrenmesi, strateji kalitesi veya yürütmede evrensel üstünlük sağlamaz.
EA çalıştırmak için kod bilmek gerekir mi?
Belgelenmiş derlenmiş EA’yı çalıştırmak MQL5 yazmayı gerektirmeyebilir; girdi, izin ve işleyiş kontrolü yine gerekir. Kaynak erişimi inceleme sağlar; dili öğrenmek kapalı EX5’in açıklanmayan algoritmasını göstermez. Log, risk sınırı ve kurtarmayı kontrollü hesapta sınayın; birkaç haftalık sabit öğrenme süresi yeterlilik garantisi değildir.
Test sonucu iyi, canlı sonuç neden kötü olabilir?
Seçilen parametre, veri, spread, ücret, gecikme ve yürütme farklı olabilir. Aynı geçmişte arayıp en iyi sonucu raporlamak kanıtı abartabilir; ne iyi backtest ne canlı başarısızlık matematiksel zorunluluktur. Denenen varyantları saklayıp geliştirme ve değerlendirmeyi ayırın. Bir başarılı değerlendirme gelecek kalıcılığı kanıtlamaz.
VPS zorunlu mu?
Altyapıyı gereken çalışma süresi, veri ve yürütme yoluna göre seçin. VPS sürekliliğe yardımcı olabilir, fakat adı gecikme, dolum veya sabit ücret garantisi değildir. Düşük frekans gözetimsiz riski kaldırmaz. Windows VPS ile MetaQuotes Virtual Hosting ayrıdır; yerel AutoTrading taşınmış uzaktaki EA’yı durdurmaz. Güncel hizmet koşullarını kontrol edin.
Geçmişi yeniden okursam her satırı ekleyeyim mi?
Aynı değişmeyen dealin tekrar görülmesi yeni dolum değildir. TRY örneğinde D1, D2 ve yeniden D1, 0,10 yerine sahte 0,14 lot ve −20 yerine +20 TRY gösterir. Hesap/sunucu kapsamındaki deal kimliğiyle uzlaştırın; gerçek güncel pozisyonu kontrol edin. DEAL_UPDATE/DELETE ve satışları da ele alan daha kapsamlı kayıt defteri gerekir; bunları körce atlamayın.

Kaynaklar ve doğrulama

  1. MQL5 — OnTick

    Bağlı sembolün NewTick kuyruğu, başka olaylar ve AutoTrading kapalıyken süren hesaplama.

  2. MQL5 — CopyBuffer

    Güncelden sayılan start_pos, dönen adet ve fiziksel bellekte en eski öğenin başta olması.

  3. MQL5 — OnTradeTransaction

    Emir, deal ve pozisyon olayları; sırası garantilenmeyen bildirimler, geçmiş güncelleme/silme türleri.

  4. MQL5 — BarsCalculated

    Hesaplanan veri adedi veya hatada −1; tanıtıcı varlığı verinin hazır olduğunu göstermez.

  5. MQL5 — Other Constants

    EMPTY_VALUE=DBL_MAX, INVALID_HANDLE ve özel göstergede başka boş işaret kullanılması.

  6. MQL5 — CTrade Buy

    Başarılı yöntem kontrolü gerçek dolum garantisi değil; ResultRetcode ve ResultDeal incelenir.

  7. MetaTrader 5 — Virtual Hosting migration

    Taşınmış ayrı sanal ortamda otomatik işlem izni; yerel düğmeden ayrıdır.

  8. MQL5 — OnInit

    Başlangıç olayı ve int dönüşüyle hata durumu.

  9. MQL5 — OnDeinit

    Sembol/dönem/girdi değişiminde yeniden başlatma, kaldırma ve terminal kapanış nedenleri.

  10. MQL5 — HistoryDealGetTicket

    Seçilmiş geçmiş listesindeki deal kimliği; emir, deal ve pozisyon ayrımı.

  11. MetaEditor — Compilation

    MQ5 kaynak ve EX5 çalıştırılabilir dosya ayrımı; EX5 kaynak olmadan dağıtılabilir.

  12. MQL5 — Program Running

    Program türlerinin olay/işlev sınırları; göstergede OrderSend ve diğer işlem işlevlerinin yasak olması.

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.