MQL5 EA temelleri — MetaTrader 5 robotu gerçekte nasıl çalışır
MQL5 ile yazılmış bir Expert Advisor, MetaTrader 5 içinde bir grafiğin üzerinde oturan ve her tikte piyasanın, sizin giriş koşulunuz olarak tanımladığınız durumu üretip üretmediğini kontrol eden küçük bir uygulamadır. Koşul oluştuysa, EA emri kendiliğinden gönderir — izin sormadan. Bu yazı, bir EA'nın içeride nasıl kurulduğunu, platformla ve aracı kurumla nasıl konuştuğunu ve bir tanesini çalıştırmanın gerçekte ne zaman mantıklı olduğunu anlatır. Bir kodlama eğitimi değildir.
MQL5'te bir Expert Advisor gerçekte nedir
MQL5, özellikle MetaTrader 5 platformu için yazılmış, C++'a yakın bir dildir. Expert Advisor (EA, uzman danışman), bu dilde yazılmış tek bir programdır; ikili bir .ex5 dosyasına derlenir ve tıpkı bir gösterge (indikatör) gibi bir grafiğe iliştirilir. Aradaki fark izinlere dayanır: bir gösterge yalnızca grafiğin üzerine çizim yapar, oysa bir EA'nın işlem hesabınıza karşı gerçek emirler gönderme yetkisi vardır. Platformun izin modelindeki o tek satır, pasif görüntülemeyi otonom otomasyondan ayırır.
Bir "EA" genel anlamdaki bir "işlem robotundan" nasıl ayrılır? Yalnızca ekosistem olarak. Python'da yazılmış bir robot da bir robottur — sadece terminalin dışında yaşar, aracı kuruma genellikle bir REST API veya FIX üzerinden bağlanır. Bir EA ise, tanımı gereği, MT5'in içinde yaşar. Karşılaştırmalı bir bakış için platformlar bölümümüze, daha geniş manzara için ise uygulama rehberlerimize göz atın.
Bir EA platformla nasıl konuşur — OnInit, OnTick, OnDeinit döngüsü
Her Expert Advisor'ın, platformun onun adına çağırdığı üç olay tarafından belirlenen bir yaşam ritmi vardır. OnInit, EA bir grafiğe iliştirildiğinde veya terminal yeniden başladığında tam olarak bir kez tetiklenir. EA bu anda giriş parametrelerini okur, dayandığı tüm göstergeler için tanıtıcılar (handle) açar ve tikleri almaya hazır olduğunu bildirir.
İkinci olay en önemlisidir. OnTick, EA'nın üzerinde oturduğu sembol için aracı kurumdan her yeni kotasyon geldiğinde çağrılır. EUR/USD gibi likit bir paritede Londra seansı sırasında bu, saniyede birkaç düzine kez gerçekleşebilir. OnTick içinde EA, mevcut fiyatın giriş koşullarını karşılayıp karşılamadığına, zarar durdur (stop loss) seviyesinin taşınması gerekip gerekmediğine veya açık bir pozisyonun kapatılması gerekip gerekmediğine karar verir. Stratejinin tüm mantığı bu tek fonksiyonun içinde yaşar.
Üçüncü olay olan OnDeinit, EA grafikten kaldırıldığında, sembol değiştirildiğinde veya MT5 kapatıldığında çağrılır. Görevi düzen tutmaktır — gösterge tanıtıcılarını serbest bırakmak, durumu kaydetmek, kayıt (log) dosyalarını kapatmak. OnTimer ve OnTrade gibi yardımcı işleyicileri bilerek atlıyorum, çünkü ilkeyi değiştirmiyorlar. Her EA, özünde, MT5'in kendisine ne verirse ona yanıt veren olay tabanlı bir programdır.
Bir EA emirleri nasıl gönderir — CTrade sınıfı
Söz dizimine dalmadan anlamaya değer ikinci şey, bir EA'nın aracı kurumla nasıl iletişim kurduğudur. MT5, arayüzde tıklayan bir insanın yaptığı gibi öylece "bir alış gönder" demenize izin vermez. Her emir yapılandırılmış bir istek olarak — bir MqlTradeRequest olarak — gönderilir ve sunucu, emrin geçip geçmediğini ya da yetersiz teminat, geçersiz stop seviyeleri veya aşılan sapma gibi nedenlerle reddedilip reddedilmediğini söyleyen bir kod içeren bir sonuçla yanıt verir.
O yapıları elle doldurmak yorucudur, bu yüzden MetaQuotes standart kütüphanesinde CTrade adında bir sınıf sunar; her şeyi Buy, Sell, PositionClose ve OrderModify gibi pratik metotlarla sarmalar. Forum başlıkları ince ayrıntıları sonsuza dek tartışır — Buy(volume, symbol) mı kullanılmalı yoksa istek elle mi doldurulmalı, yeniden kotasyonlar (requote) nasıl ele alınmalı, hızlı kırılmalarda kayma (slippage) gibi temel kavramlara nasıl tepki verilmeli. Çoğu perakende stratejisi için CTrade fazlasıyla yeterlidir.
Strateji Test Aracı, ya da EA'nın yalnızca geçmişi ezberlemediğini nasıl denetlersiniz
MT5'e gömülü Strateji Test Aracı (Strategy Tester), MT4'teki kuzeninden çok daha ciddi bir araçtır. Bir EA'ya geçmiş tikleri (çubuklardan üretilmiş ya da MetaQuotes sunucusundan gelen gerçek tikler) besler, parametre kombinasyonları boyunca binlerce geçiş çalıştırır ve sermaye eğrisini, sermaye düşüşünü (drawdown) ve kâr faktörünü içeren bir rapor üretir.
Sorun şu ki, işinizi doğrulaması gereken bu aynı test aracı, bir yanılsama fabrikasına dönüşme eğilimindedir. Parametreleri tüm geçmiş boyunca optimize etmek neredeyse her zaman bir ip kadar düz bir eğri üretir ve o eğri, EA gerçek paraya çarptığı anda neredeyse her zaman dağılır. Bu olgunun bir adı vardır — curve fitting (eğriye aşırı uydurma) — ve kötü şans değil, matematiksel bir kesinliktir. Karşı önlemler teknik analiz bölümümüzde ele alınan dürüst geriye dönük test (backtesting) mantığıyla aynıdır: veriyi örneklem içi (in-sample) ve örneklem dışı (out-of-sample) dönemlere bölün ve ideal olarak bunun üzerine walk-forward analizi uygulayın.
"Geçmiş veride kârlı olmuş bir strateji, gelecekte de kârlı olacak demek değildir. Geçmiş veri, olası piyasa durumlarının evreninden alınmış küçük bir örneklemdir ve parametreleri o örnekleme karşı optimize etmek, tam olarak kulağa geldiği şeydir — örnekleme uydurmak." — Ernest P. Chan, 2013
Bir EA gerçekte ne zaman yardımcı olur, ne zaman zarar verir
Bir EA çalıştırmanın mantıklı olup olmadığı, büyük ölçüde stratejiye bağlıdır. Bir EA'nın gerçek bir avantaj sağladığı üç durum: bir insanın psikolojik olarak uygulayamayacağı kuralların tutarlı biçimde yürütülmesi (ayda iki yüz scalping işlemi düşünün), dünyanın geri kalanı uyurken Asya seansları boyunca piyasaların gece gündüz izlenmesi ve kararın saniyenin kesirinde verilmesi gereken işlemler — bir insanın açıkça fazla yavaş kaldığı alan.
Bir EA, muhakeme gereken her yerde kötü performans gösterir. Tarım Dışı İstihdam (NFP) verisinin açıklanmasında işlem yapmak, mevcut fiyat hareketinin gerçek bir rejim değişikliği mi yoksa geçici gürültü mü olduğuna karar vermek, jeopolitik bağlamı yorumlamak — bunların çoğu bir EA'yı diskalifiye eder. Bağımsız MQL5 forum anketlerinden gelen istatistik acımasızdır: cilalı geriye dönük test grafiklerine rağmen, Marketplace EA'larının açık bir çoğunluğu ilk yıllarında canlı işlemde zarar yazar. Bu, satıcıların kötü niyetli olduğu anlamına gelmez — güzel bir geriye dönük test ucuzdur, gerçek bir avantaj ise nadirdir.
Kendi EA'nızı yazmaya değer mi
İşlem yaptığınız stratejiyi anlıyorsanız ve onu hiçbir takdir payı bırakmayacak kadar kesin kurallar olarak tanımlayabiliyorsanız, kendi EA'nızı inşa etmek bu alanda yapabileceğiniz en iyi zaman yatırımıdır. MQL5 dokümantasyonu, basit bir test projesi ve Strateji Test Aracı ile geçirilecek üç ila altı ay, satın alınmış hiçbir robot paketinin size vermeyeceği bir bilgi inşa eder.
İkinci neden pratiktir. Bir EA haftada beş gün gece gündüz çalışır — ama yalnızca üzerinde yaşadığı makine de gece gündüz çalışıyorsa. Elektriği tek bir kabloya bağlı bir ev masaüstü bilgisayarı yeterli değildir. İşte bu yüzden bir VPS ayrı bir rol oynar; aynı EA, aracı kurumun sunucusu ile EA'nın oturduğu makine arasındaki gecikmeye (latency) bağlı olarak gözle görülür biçimde farklı sonuçlar üretebilir. Düşük gecikmenin tek başına bir anlam taşımadığını da unutmayın: aracı kurum seçimi rehberimizde vurguladığımız gibi, SPK ve BDDK lisansı olmayan yabancı bir aracı kurum üzerinden gerçekleştirilen kaldıraçlı Forex/CFD işlemleri Türkiye'deki bireysel yatırımcılar için mevzuata aykırı olabilir veya ciddi yasal-mali riskler doğurabilir.
Yarın ne yapmalı
- Aracı kurumunuzun sitesinden MetaTrader 5'i indirin, bir demo hesap açın ve Strateji Test Aracı sekmesine gidin. Gömülü örnek EA'lardan birini (Moving Average ya da MACD Sample) EUR/USD H1 üzerinde yükleyin, tek bir geçiş çalıştırın ve temel metriklerin — sermaye eğrisi, sermaye düşüşü, kâr faktörü — pratikte neye benzediğini görmek için ortaya çıkan raporu dikkatle okuyun.
- mql5.com/en/docs adresindeki resmî MQL5 dokümantasyonunu açın ve yalnızca üç bölümü okuyun: OnInit, OnTick ve CTrade sınıfı. Henüz hiçbir şey yazmaya çalışmayın — amaç, dokümantasyonun nasıl düzenlendiğini ve ihtiyaç duyduğunuzda işlenmiş örnekleri nerede bulacağınızı görmektir.
- Stratejinizi "eğer X ve Y ise Z seviyesinde stop ile alış yönünde gir" biçiminde mantıksal kurallar olarak yazın. Bir saat sonra kurallar hâlâ "bağlama göre" veya "sezgisel olarak" gibi ifadeler içeriyorsa, otomasyonun kurtaramayacağı takdire dayalı bir stratejiniz var demektir — herhangi bir kod yazmadan önce stratejiler bölümündeki kurulum kontrol listesine geri dönün.
- Kurallar belirsizlikten arınmış çıktıysa, bir öğrenme takvimi planlayın: MetaQuotes dokümantasyonundan kabaca üç ay MQL5 temelleri, artı en basit EA'yı bir hareketli ortalama kesişmesine dayanarak inşa etmek için bir haftalık bir yan proje. O tek proje, size satın alınmış on robottan daha çoğunu öğretir.
- Gerçek parada herhangi bir şey çalıştırmadan önce, güncel kotasyonlarla demoda en az bir aylık ileriye dönük teste (forward test) kendinizi adayın. Bir geriye dönük test, ileriye dönük testin yerini tutamaz — ileriye dönük test, geriye dönük testin göremeyeceği aracı kurum yürütme gecikmesini ortaya çıkarır. Vergisel sonuçlar için ise bir mali müşavire danışın.
Kaynaklar ve bibliyografya
-
MetaQuotes MQL5 Reference — OnTick event handler · oficjalna dokumentacja zdarzenia wywoływanego na każdą kwotację www.mql5.com ↗
-
MetaQuotes MQL5 Standard Library — CTrade class · klasa biblioteki standardowej do składania zleceń przez EA www.mql5.com ↗
-
MetaQuotes MetaTrader 5 — Strategy Tester documentation · narzędzie do backtestowania i optymalizacji EA www.metatrader5.com ↗
Sık sorulan sorular
MQL5'teki bir EA, Python'daki bir "robottan" nasıl ayrılır?
Mantık açısından — hiç ayrılmazlar. İkisi de, piyasa koşullarını periyodik olarak kontrol eden ve emir gönderen bir döngüye iner. Fark ekosistemdedir. MQL5'teki bir EA, MetaTrader'ın çocuğudur: bir grafiğe iliştirilir, gömülü göstergelerden yararlanır ve Strateji Test Aracı'nı kullanır. Bir Python robotu terminalin dışında yaşar ve aracı kuruma dışarıdan bağlanır — tipik olarak bir REST API veya FIX protokolü üzerinden. Stratejiniz MT5 göstergelerine dayanıyorsa ve gömülü test aracına ihtiyacınız varsa EA kazanır. Makine öğrenmesi kütüphaneleri, istatistik kullanmak ya da birkaç kaynaktan gelen verileri birleştirmek istiyorsanız Python kazanır.
Bir EA çalıştırmak için programlama bilmem gerekir mi?
Sadece bir başkasının EA'sını çalıştırmak için — hayır. .ex5 dosyasını bir grafiğe sürükler, parametrelerini ayarlar ve AutoTrading'i etkinleştirirsiniz. Asıl zorluk bundan sonra başlar: MQL5'i bilmeden, robotun içeride gerçekte ne yaptığını, kaymaya (slippage) nasıl tepki verdiğini veya gizlice Martingale yöntemi kullanıp kullanmadığını doğrulayamazsınız. MQL5 Market'teki satıcılar en önemli parametreleri kullanıcıdan sıklıkla gizler. Kaynak kodunu açma yeteneği olmadan (ve çoğu ticari EA kapalıdır) kör bir güvene mahkûm olursunuz. Bu yüzden dilin temellerine yatırım yapmanızı öneririm — birkaç haftalık dokümantasyon, ne okuduğunuzu anlamaya yeter.
Strateji Test Aracı neden muhteşem sonuçlar gösterirken canlı işlem zarar gösterir?
Çünkü Strateji Test Aracı bir optimizasyon aracıdır, bir tahmin aracı değil. En iyi sermaye eğrisini veren parametreler için tüm geçmiş veriyi tararsanız, neredeyse kesinlikle harika bir sonuç üreten bir kombinasyon bulursunuz — ama yalnızca o belirli örneklemde. Bu olguya curve fitting (eğriye aşırı uydurma) denir ve matematiksel bir kesinliktir. Panzehir, veriyi optimizasyon için bir örneklem içi (in-sample) döneme (diyelim 2018–2022) ve doğrulama için bir örneklem dışı (out-of-sample) döneme (diyelim 2023–2024) bölmek ve bu ikincisinde EA'yı parametreleri daha fazla ayarlamadan çalıştırmaktır. Yalnızca doğrulama döneminde tutarlı bir sonuç, bir yapaylığa bakmadığınızı makul kılar. Walk-forward analizi bir adım daha ileri gider — eğitim ve test pencerelerini tüm geçmiş boyunca kaydırır.
Bir EA çalıştırmak için gerçekten bir VPS gerekir mi?
Saniyenin kesirinde tepki veren bir strateji için — evet, tartışmasız. Günde düzinelerce emir gönderen bir EA çalıştıran bir scalper, ev bağlantısı her tökezlediğinde veya bilgisayar uyku moduna geçtiğinde avantajını kaybeder. Aracı kurumun sunucusuyla aynı veri merkezine yerleştirilmiş bir VPS, gecikmeyi yaklaşık elli milisaniyeden birkaç milisaniyeye düşürebilir. Haftada bir işlem yapan bir pozisyon stratejisi için VPS bir konfordur, bir zorunluluk değil — kesintisiz güç kaynağı (UPS) olan bir ev masaüstü bilgisayarı yeterlidir. MT konusunda uzmanlaşmış sağlayıcılardaki maliyet bugün aylık 15 ila 50 EUR civarındadır. Bazı aracı kurumlar belirli bir yatırım veya işlem hacmi eşiğinin üzerinde ücretsiz VPS sunar. Türkiye'de kaldıraçlı döviz ve CFD işlemleri SPK (Sermaye Piyasası Kurulu) ve BDDK (Bankacılık Düzenleme ve Denetleme Kurumu) tarafından düzenlenir; lisanssız yabancı bir aracı kurum üzerinden işlem yapmak bireysel yatırımcılar için ciddi yasal-mali riskler doğurabilir. Düşük gecikme, paranız yerel mevzuatla korunmuyorsa hiçbir anlam taşımaz — fon yatırmadan önce aracı kurumun lisans durumunu mutlaka doğrulayın.