Berke Özyaşar
Blog

MetaTrader 5 Expert Advisor geliştirme: stratejiden canlı hesaba

Bir MT5 EA nasıl geliştirilir: EA ile indikatör farkı, stratejinin şartnameye dökülmesi, MQL5 yapısı, risk yönetimi, backtest, optimizasyon ve VPS.

·

MetaTrader 5 (MT5), forex, emtia ve endeks piyasalarında yaygın kullanılan bir işlem platformu. Platformun en güçlü yanı, MQL5 diliyle yazılan programların grafik üzerinde çalışıp kendi başına işlem açıp kapatabilmesi. Bu programlara Expert Advisor (EA) deniyor. Ben Berke Özyaşar; MetaTrader 4 ve 5 için EA'lar ve indikatörler, TradingView için Pine Script göstergeleri geliştiriyorum. Bu yazıda bir EA projesinin baştan sona nasıl ilerlediğini, özellikle de sürecin kod dışındaki kısımlarını anlatıyorum.

EA mı, indikatör mü?

İlk soru genellikle bu. İkisi de MQL5 ile yazılıyor ama işleri farklı:

  • İndikatör grafiğe bilgi çizer: bir çizgi, bir ok, bir renk değişimi ya da bir uyarı. Kararı ve emri siz verirsiniz.
  • Expert Advisor kurallar sağlandığında emri kendisi gönderir, pozisyonu yönetir ve kapatır.

Stratejinize henüz tam güvenmiyorsanız ya da kararın bir kısmı yorum gerektiriyorsa, bir indikatörle başlamak çoğu zaman daha doğru. Kurallar netleştikçe aynı mantık bir EA'ya taşınabilir. Bazı projelerde ikisi birlikte yazılıyor: indikatör sinyali üretiyor, EA bu sinyali okuyup işlem yapıyor.

En önemli adım: stratejiyi şartnameye dökmek

Gelen taleplerin çoğu "hareketli ortalamalar kesişince al" gibi tek bir cümleyle başlıyor. Bu cümle bir insan için yeterli olabilir, ama bir program için değil. Kod yazmadan önce şu soruların hepsinin cevaplanmış olması gerekiyor:

  • Hangi sembol ve hangi zaman dilimi? Birden fazla sembolde aynı anda çalışacak mı?
  • Sinyal mum kapandığında mı kontrol edilecek, yoksa her fiyat değişiminde mi?
  • Giriş koşulları tam olarak ne? Hangi göstergeler, hangi parametrelerle?
  • Pozisyon nasıl kapanacak: sabit stop-loss ve take-profit mi, iz süren stop mu, ters sinyal mi?
  • Aynı anda kaç pozisyon açık olabilir? Ters yönde sinyal gelirse ne olacak?
  • Hangi saatlerde işlem yapılmayacak: önemli veri açıklamaları, hafta sonu kapanışı, spread'in açıldığı saatler?
  • Lot büyüklüğü nasıl hesaplanacak?

Bu listeyi birlikte doldurmak bazen kodun kendisinden uzun sürüyor, ama sonradan çıkacak "bunu böyle kastetmemiştim" konuşmalarını büyük ölçüde önlüyor. Şartname aynı zamanda test aşamasında EA'nın doğru davranıp davranmadığını kontrol etmenin de referansı oluyor.

MQL5 ile bir EA'nın yapısı

Bir MQL5 EA'sı birkaç olay fonksiyonu etrafında kurulur:

  • OnInit(): EA grafiğe eklendiğinde bir kez çalışır. Gösterge tanıtıcıları (handle) burada oluşturulur, giriş parametreleri doğrulanır. Parametreler mantıksızsa EA burada başlatılmadan durdurulmalı.
  • OnTick(): Sembole her yeni fiyat geldiğinde çalışır ve stratejinin kalbi burasıdır. Mum kapanışına göre çalışan stratejilerde ilk iş yeni bir mumun oluşup oluşmadığını kontrol etmek; aksi halde aynı sinyal bir mum içinde defalarca işlenir.
  • OnDeinit(): EA kaldırıldığında ya da terminal kapandığında çalışır. Gösterge tanıtıcıları serbest bırakılır, grafikte çizilen nesneler temizlenir.

Bunların yanında zamanlanmış işler için OnTimer(), emir ve pozisyon olaylarını izlemek için OnTradeTransaction() kullanılabilir. Emirler genellikle standart kütüphanedeki CTrade sınıfıyla gönderiliyor. Sağlam bir EA'da her emrin dönüş kodu kontrol edilmeli: yetersiz teminat, piyasanın kapalı olması, geçersiz stop seviyesi ya da yeniden fiyatlama gibi durumlar canlı hesapta düşündüğünüzden sık yaşanıyor. Kod ayrıca sembolün en küçük lot adımına, minimum stop mesafesine ve basamak sayısına göre kendini ayarlamalı; bir aracı kurumda sorunsuz çalışan bir EA başka bir kurumda bu ayrıntılar yüzünden hata verebiliyor.

Risk yönetimi koda gömülü olmalı

Bir EA'nın en önemli parçası giriş sinyali değil, risk yönetimi. Her EA'da standart olarak ele aldığım konular:

  • Pozisyon büyüklüğü: Sabit lot yerine, işlem başına hesabın belirli bir yüzdesini riske eden ve stop mesafesine göre lot hesaplayan bir yapı.
  • Her işlemde stop-loss: Stopsuz pozisyon açmamak.
  • Günlük ve toplam zarar limitleri: Belirli bir kayba ulaşıldığında EA'nın o gün ya da tamamen işlem yapmayı durdurması.
  • Spread filtresi: Spread belirli bir değerin üzerindeyken işlem açmamak.
  • Yeniden başlatmaya dayanıklılık: Terminal yeniden başladığında EA'nın açık pozisyonlarını magic number ile tanıyıp yönetmeye devam etmesi.

Strategy Tester ile backtest

MT5'in Strategy Tester aracı EA'yı geçmiş veride çalıştırıp sonuçlarını raporluyor. Burada dikkat edilmesi gereken birkaç nokta var. Test modeli önemli: yalnızca açılış fiyatlarıyla yapılan test hızlıdır ama mum içi hareketlere bağlı stratejilerde yanıltıcı olur; gerçek tick verisiyle yapılan test daha yavaş ama daha gerçekçidir. Spread, komisyon ve swap gibi maliyetler teste dahil edilmeli. Rapordaki tek bir net kâr rakamından çok, maksimum düşüş (drawdown), işlem sayısı ve sonuçların zamana nasıl yayıldığı incelenmeli.

Optimizasyon ve aşırı uyum

Strategy Tester parametre kombinasyonlarını tarayıp en iyi sonucu vereni bulabiliyor. Bu güçlü bir araç, ama en sık yapılan hata da burada: yeterince parametreyi yeterince ince ayarlarsanız, geçmişte çok iyi görünen ama geleceği hiç yakalayamayan bir sistem elde edersiniz. Buna aşırı uyum (overfitting) deniyor.

Bundan korunmak için verinin bir bölümünü optimizasyona hiç göstermeden ayırıyorum ve bulunan parametreleri bu görülmemiş dönemde test ediyorum. MT5'in ileri test (forward) seçeneği bunu otomatik yapabiliyor. Ayrıca tek bir zirve değer yerine, komşu parametrelerde de makul sonuç veren geniş bir bölgeyi tercih ediyorum. Parametre sayısı ne kadar azsa, sonuçların gerçek bir şeye dayandığına o kadar güvenilebilir.

Demo hesap ve ileri test

Backtest ne kadar iyi olursa olsun, EA canlıya geçmeden önce bir süre demo hesapta ya da çok küçük lotlarla gerçek hesapta çalışmalı. Bu aşamada amaç kâr ölçmekten çok, EA'nın gerçek koşullarda şartnameye uygun davranıp davranmadığını görmek: emirler doğru zamanda açılıyor mu, kayma ne kadar, aracı kurumun kuralları sorun çıkarıyor mu? EA'nın her kararını günlüğe yazması bu kontrolü çok kolaylaştırıyor.

VPS: EA'nın evi

Bir EA yalnızca MetaTrader terminali açıkken çalışır. Bilgisayarınız kapandığında, internet kesildiğinde ya da işletim sistemi güncelleme için yeniden başladığında EA da durur. Bu yüzden sürekli çalışması gereken EA'lar genellikle bir VPS'te barındırılıyor. MetaQuotes'un kendi sanal barındırma hizmeti de kullanılabilir, bağımsız bir Windows VPS de. Aracı kurumun sunucusuna yakın bir konum gecikmeyi azaltır.

Sonuç

İyi bir EA, iyi bir şartnameyle başlar ve risk yönetimini kodun merkezine koyar. Backtest bir başlangıç noktasıdır, kanıt değil; optimizasyon dikkatli yapılmazsa yanıltır. Hiçbir EA kâr garantisi vermez ve bu yazı da yatırım tavsiyesi değildir. Bu alandaki çalışmalarımı MetaTrader EA ve indikatörleri sayfasında, piyasa takibi tarafını All Financial Market Watcher uygulamasında görebilirsiniz. Kendi stratejiniz için bir EA ya da MQL5 indikatör düşünüyorsanız trading botları sayfasından bana ulaşabilirsiniz.

Diğer yazılar

Uygulamanızı birlikte yayınlayalım.

Ne yapmak istediğinizi birkaç cümleyle anlatın. Aynı gün dönüş yapıyorum.

Gezinmek için ↑ ↓, açmak için Enter, kapatmak için Esc