![MQL5 Sihirbazı: Programlamadan Expert Advisor'lar Oluşturma](https://c.mql5.com/i/articles/overlay.png)
MQL5 Sihirbazı: Programlamadan Expert Advisor'lar Oluşturma
Giriş
Otomatik alım satım sistemleri oluşturduğunuzda, piyasa durumunu analiz eden ve alım satım sinyalleri üreten algoritmalar, açık pozisyonlarınızı takip eden algoritmalar ve ayrıca para yönetimi ve risk yönetimi sistemleri yazmanız gerekir.
Modüllerin kodu yazıldıktan sonra en zor iş tüm parçaları bir araya getirmek ve alım satım robotunun kaynak kodunda hata ayıklamaktır. Burada kilit rol, modül etkileşiminin mimarisi tarafından oynanır: Yetersiz bir şekilde oluşturulursa zamanın çoğu hataları bulmaya ve düzeltmeye harcanacak ve herhangi bir modülün algoritmasını değiştirmeniz halinde tüm kaynak kodunun yeniden yazılmasına yol açacaktır.
MQL5'te nesne yönelimli yaklaşımı kullanmak, otomatik alım satım sistemlerinin yazılmasını ve test edilmesini önemli ölçüde kolaylaştırır.
MetaQuotes Software Corp. alım satım stratejilerini uygulamak için sınıflar geliştirmiştir. Artık, gerekli Alım Satım Sinyallerini (şu anda bunlardan 20 tane var), Takip (4) ve Para Yönetimi (5) modüllerini seçerek Expert Advisor'ların kodunu otomatik olarak doğrudan MetaEditor'de oluşturabilirsiniz. Bu modülleri birleştirerek, kullanıma hazır alım satım sistemlerinin birçok çeşidini elde edebilirsiniz.
Bu modüllerden herhangi birinin uygulanmasıyla kendi sınıflarınızı da kullanabilirsiniz. Bunları kendiniz oluşturun veya İşler hizmeti aracılığıyla talimat verin.
Bu makalede, MQL5 Sihirbazı kullanılarak Expert Advisor'ın kaynak kodunun otomatik olarak oluşturulmasını ele alacağız. Ve programlanacak hiçbir şey olmayacak!
1. MQL5 Sihirbazını Kullanarak Alım Satım Robotu Oluşturma
Expert Advisor'ın kaynak kodu, MetaEditor'da MQL5 Sihirbazı kullanılarak oluşturulur.
Alım satım stratejilerinin temel sınıfları '\<client_terminal_directory>\MQL5\Include\Expert\' klasöründe bulunur. Alım satım sinyalleri sınıflarının, takip eden açık pozisyonların sınıflarının ve para ve risk yönetimi sınıflarının kullanıma hazır algoritmaları Sinyal, Takip ve Para alt klasörlerinde yer alır. MQL5 Sihirbazı bu klasörlerdeki dosyaları ayrıştırır ve bunları Expert Advisor kodunu oluşturmak için kullanır.
MQL5 Sihirbazını başlatmak için araç çubuğundaki "Yeni" düğmesine tıklamanız veya "Dosya" menüsünden "Yeni" öğesini seçmeniz (veya yalnızca Ctrl+N tuşlarına basmanız) gerekir:
Şek. 1. MQL5 Sihirbazını Başlatma
Ardından oluşturmak istediğiniz programın türünü seçin. Bizim durumumuzda "Expert Advisor (oluştur)" seçeneğini seçin:
Şek. 2. Program Türünü Seçme
Adım 1. Expert Advisor'ın Genel Özellikleri
Ardından, Expert Advisor'ın genel özelliklerini ayarlayabileceğiniz iletişim kutusu açılır:
Şek. 3. Expert Advisor'ın Genel Özellikleri
"Ad", "Yazar" ve "Bağlantı" alanlarında (sırasıyla) Expert Advisor'ınızın adını, yazarın adını ve web sitenizin bağlantısını belirtin.
Expert Advisor ayrıca aşağıdaki giriş parametrelerini içerir:
- Sembol (dize türü) - Expert Advisor için çalışma sembolü.
- Zaman Dilimi (zaman dilimi türü) - Expert Advisor için çalışma zaman dilimi..
Bir sonraki adımda, expert'in alım satım yapacağı alım satım sinyallerinin türünü seçin.
Adım 2. Alım Satım Sinyalleri Modülünü seçin
Açılış ve kapanış pozisyonlarının algoritması, alım satım sinyalleri modülü tarafından belirlenir. Alım satım sinyali modülleri, pozisyon açma/kapama/ters çevirme kurallarını içerir.
Standart Kitaplıkta kullanıma hazır Alım satım sinyali modülleri yer alır:
- CSignalAC - Göstergenin piyasa modellerini temel alan sinyaller modülü Hızlandırıcı Osilatör.
- CSignalAMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Uyarlanabilir Hareketli Ortalama.
- CSignalAO - Göstergenin piyasa modellerini temel alan sinyaller modülü Müthiş Osilatör.
- CSignalBearsPower - Osilatörün piyasa modellerini temel alan sinyaller modülü Ayıların Gücü.
- CSignalBullsPower - Osilatörün piyasa modellerini temel alan sinyaller modülü Boğaların Gücü.
- CSignalCCI - Osilatörün piyasa modellerini temel alan sinyaller modülü Emtia Kanal İndeksi.
- CSignalDeM - Osilatörün piyasa modellerini temel alan sinyaller modülü DeMarker.
- CSignalDEMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Çift Üstel Hareketli Ortalama.
- CSignalEnvelopes - Göstergenin piyasa modellerini temel alan sinyaller modülü Zarflar.
- CSignalFrAMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Fraktal Uyarlanabilir Hareketli Ortalama.
- CSignalITF - Sinyallerin zamana göre filtrelenmesi modülü.
- CSignalMACD - Osilatörün piyasa modellerini temel alan sinyaller modülü MACD.
- CSignalMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Hareketli Ortalama.
- CSignalSAR - Göstergenin piyasa modellerini temel alan sinyaller modülü Parabolik SAR.
- CSignalRSI - Osilatörün piyasa modellerini temel alan sinyaller modülü Bağıl Güç Endeksi.
- CSignalRVI - Osilatörün piyasa modellerini temel alan sinyaller modülü Bağıl Canlılık Endeksi.
- CSignalStoch - Osilatörün piyasa modellerini temel alan sinyaller modülü Stokastik.
- CSignalTRIX - Osilatörün piyasa modellerini temel alan sinyaller modülü Üçlü Üstel Ortalama.
- CSignalTEMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Üçlü Üstel Hareketli Ortalama.
- CSignalWPR - Osilatörün piyasa modellerini temel alan sinyaller modülü Williams Yüzde Aralığı.
"Ad" açılır listesinden alım satım sinyallerinin türü seçilir.
İleri düğmesine bastıktan sonra bir pencere göreceksiniz:
Şek. 4. Expert Advisor'ın alım satım sinyallerinin seçimi
Bir alım satım sinyalleri modülü eklemek için "Ekle" düğmesine basın.
Hareketli Ortalama göstergesine dayalı alım satım sinyallerini ekleyelim.
Şek. 5. Alım Satım Sinyallerinin Algoritmasını Seçin
Her alım satım sinyalleri modülünün kendi parametreleri vardır. Varsayılan değerleri kullanabilirsiniz.
İki parametre oluşturma modu vardır. Parametre simgesi üzerinde sol fare düğmesine çift tıklayarak bunlar arasında geçiş yapabilirsiniz. Parametrede vurgulanmış simge varsa o zaman Expert Advisor'ın giriş değişkeni olarak kullanılabilir olacaktır. Bu tür parametreler ayrıca Strateji Test Cihazı'nda expert optimizasyonu için kullanılabilir. Parametrede gri simge
varsa Expert Advisor'ın özelliklerinden değiştiremeyeceğiniz sabit değere sahip olacaktır.
Alım satım sinyalleri modülü listede görünecektir:
Şek. 6. Alım satım sinyalleri modülü eklendi
Adım 3. Takip Eden Açık Pozisyonlar Modülünü Seçin
Bir sonraki adım, takip eden açık pozisyonların algoritmasını (Takip Eden Zarar Durdurucu) seçmektir. Takip edeni kullanmak, kazanılan karı saklamanızı sağlar.
Standart Kitaplık, açık pozisyonları takip etmenin birkaç yolunu sunar:
- CTrailingNone - Takip Eden Zarar Durdurucu kullanılmaz.
- CTrailingFixedPips - Sabit Durdurma Düzeyine dayalı Takip Eden Zarar Durdurucu.
- CTrailingMA - MA'ya dayalı Takip Eden Zarar Durdurucu.
- CTrailingPSAR - Parabolik SAR'ye dayalı Takip Eden Zarar Durdurucu.
Expert Advisor'ımızda "Sabit Durdurma Düzeyine dayalı Takip Eden Zarar Durdurucu" seçeneğini seçin:
Şek. 7. Takip Eden Açık Pozisyonlar Algoritmasını Seçin
Bu tür takibin iki parametresi vardır: StopLevel ve ProfitLevel (virgülden sonra 2 ve 4 haneli tırnak işaretleri olarak); bunlar açık pozisyonları takip etmek için kullanılacaktır:
Şek. 9. Takip Eden Açık Pozisyonların Seçilmiş Algoritmasının Parametrelerini Ayarlama
Adım 4. Para ve Risk Yönetimi Modülünü Seçin
Son adımda, Expert Advisor'ınızda kullanacağınız para ve risk yönetimi sistemini seçmeniz gerekir.
Bu algoritmanın amacı, alım satım işlemleri için alım satım işlem hacmini (lot olarak) ve ayrıca risk yönetimini belirlemektir. Zarar değeri izin verilen limiti aştığında (örneğin, hisse senedinin %10'u), para ve risk yönetimi modülü karsız pozisyonu cebren kapatacaktır.
Standart Kitaplık, para ve risk yönetimi algoritmalarının birkaç kullanıma hazır uygulamasını sağlar:
- CMoneyFixedLot - Sabit alım satım işlem hacmiyle alım satım.
- CMoneyFixedMargin - Sabit marjlı alım satım.
- CMoneyFixedRisk - Sabit riskli alım satım.
- CMoneyNone - İzin verilen minimum alım satım işlem hacmiyle alım satım.
- CMoneySizeOptimized - Optimize edilmiş alım satım işlem hacmiyle alım satım.
Şek. 9. Para ve Risk Yönetimi Algoritmasını Seçin
'Sabit alım satım işlem hacmiyle alım satım' algoritmasını seçin.
Seçtiğimiz modülün iki parametresi vardır:
- Lotlar - Lot cinsinden alım satım işlem hacmi.
- Yüzde - İzin verilen maksimum risk yüzdesi.
Şek. 10. Para ve Risk Yönetiminin Seçilmiş Algoritmasının Parametrelerini Ayarlama
"Son" düğmesine tıkladıktan sonra TestExpert.mq5 dosyası \teminal_data_filder\MQL5\Experts\ klasöründe görünecektir. Dosya adı, belirtilen Expert Advisor adına karşılık gelir.
2. MQL5 Sihirbazı Kullanılarak Oluşturulan Expert Advisor'ın Yapısı
MQL5 sihirbazı tarafından oluşturulan Expert Advisor'ın kaynak kodu aşağıdaki gibi görünür:
//+------------------------------------------------------------------+ //| TestExpert.mq5 | //| Copyright 2012, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| Include | //+------------------------------------------------------------------+ #include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh> //+------------------------------------------------------------------+ //| Inputs | //+------------------------------------------------------------------+ //--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23689; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume //+------------------------------------------------------------------+ //| Global expert object | //+------------------------------------------------------------------+ CExpert ExtExpert; //+------------------------------------------------------------------+ //| Initialization function of the expert | //+------------------------------------------------------------------+ int OnInit() { //--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); } //--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_MA_PeriodMA); filter0.Shift(Signal_MA_Shift); filter0.Method(Signal_MA_Method); filter0.Applied(Signal_MA_Applied); filter0.Weight(Signal_MA_Weight); //--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel); //--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots); //--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0); } //+------------------------------------------------------------------+ //| Deinitialization function of the expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ExtExpert.Deinit(); } //+------------------------------------------------------------------+ //| "Tick" event handler function | //+------------------------------------------------------------------+ void OnTick() { ExtExpert.OnTick(); } //+------------------------------------------------------------------+ //| "Trade" event handler function | //+------------------------------------------------------------------+ void OnTrade() { ExtExpert.OnTrade(); } //+------------------------------------------------------------------+ //| "Timer" event handler function | //+------------------------------------------------------------------+ void OnTimer() { ExtExpert.OnTimer(); } //+------------------------------------------------------------------+
Expert Advisor'ın kodu birkaç bölümden oluşur.
Program özelliklerini açıklayan bölüm:
#property copyright "Copyright 2012, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00"
İçerilen dosyalar:
#include <Expert\Expert.mqh> //--- available signals #include <Expert\Signal\SignalMA.mqh> //--- available trailing #include <Expert\Trailing\TrailingFixedPips.mqh> //--- available money management #include <Expert\Money\MoneyFixedLot.mqh>
CExpert sınıfının kodu (örneği Expert Advisor'da kullanılır) Expert.mqh dosyasında bulunur.
SignalMA.mqh dosyası, seçilen alım satım sinyalleri sınıfının kaynak kodunu içerir - CSignalMA. TrailingFixedPips.mqh dosyası, takip eden açık pozisyonlar algoritması sınıfının kaynak kodunu içerir - CTrailingFixedPips. Para ve risk yönetimi, MoneyFixedLot.mqh dosyasında bulunan CMoneyFixedLot sınıfı tarafından uygulanacaktır.
Ardından Expert Advisor'ın giriş parametreleri gelir:
//--- inputs for expert input string Expert_Title ="TestExpert"; // Document name ulong Expert_MagicNumber =23689; // bool Expert_EveryTick =false; // //--- inputs for main signal input int Signal_ThresholdOpen =10; // Signal threshold value to open [0...100] input int Signal_ThresholdClose =10; // Signal threshold value to close [0...100] input double Signal_PriceLevel =0.0; // Price level to execute a deal input double Signal_StopLevel =50.0; // Stop Loss level (in points) input double Signal_TakeLevel =50.0; // Take Profit level (in points) input int Signal_Expiration =4; // Expiration of pending orders (in bars) input int Signal_MA_PeriodMA =85; // Moving Average(85,0,...) Period of averaging input int Signal_MA_Shift =0; // Moving Average(85,0,...) Time shift input ENUM_MA_METHOD Signal_MA_Method =MODE_SMA; // Moving Average(85,0,...) Method of averaging input ENUM_APPLIED_PRICE Signal_MA_Applied =PRICE_CLOSE; // Moving Average(85,0,...) Prices series input double Signal_MA_Weight =1.0; // Moving Average(85,0,...) Weight [0...1.0] //--- inputs for trailing input int Trailing_FixedPips_StopLevel =30; // Stop Loss trailing level (in points) input int Trailing_FixedPips_ProfitLevel=50; // Take Profit trailing level (in points) //--- inputs for money input double Money_FixLot_Percent =10.0; // Percent input double Money_FixLot_Lots =0.1; // Fixed volume
İlk üç parametre (Expert_Title, Expert_MagicNumber ve Expert_EveryTick) geneldir. Seçilen alım satım sinyalleri, takip ve para ve risk yönetimi algoritmalarından bağımsız olarak her zaman mevcuttur.
Expert_Title parametresi Expert Advisor'ın adını, Expert_MagicNumber ise kimliğini belirtir (bu değer alım satım taleplerinin parametrelerinde kullanılacaktır) ve Expert_EveryTick parametresi EA'nın çalışma modunu ayarlamak için kullanılır. Expert_EveryTick true olarak ayarlanırsa çalışma sembolü için her yeni tick geldiğinde, Expert Advisor işleyici işlevlerini (alım satım koşullarını kontrol etmek, alım satım işlemlerini taahhüt etmek, takip eden açık pozisyon) çağıracaktır.
Expert Advisor'ın genel parametrelerinden sonra seçilen alım satım sinyalleri algoritması için giriş parametreleri gelir (bizim durumumuzda bu, CSignalMA sınıfında kullanılan parametrelerdir).
Takip eden açık pozisyonların CTrailingStopFixedPips sınıfını seçtik. Değerleri "normal" 2/4 basamaklı noktalarda tanımlanan Zararı Durdur ve Kar Al düzeyleri tarafından belirlenen sabit mesafede açık pozisyonu takip eder. Fiyat mesafeye göre açık pozisyona doğru hareket ettiğinde, bu, Trailing_FixedPips_StopLevel düzeyi tarafından belirlenen nokta sayısını aşar, Expert Advisor, Zararı Durdur ve Kar Al düzeylerinin değerlerini değiştirir (Traking_FixedPips_ProfitLevel > 0 ise).
Money_FixLot_Percent ve Money_FixLot_Lots giriş parametreleri, CMoneyFixedLot sınıfında uygulanan sabit alım satım lotlu algoritmanın parametrelerine karşılık gelir. Bizim durumumuzda, alım satım işlemi, Money_FixLot_Lots değerine eşit sabit hacimle gerçekleştirilecektir.
CMoneyFixedLot sınıfı ayrıca risk yönetimi algoritmasını da uygular: Inp_Money_FixLot_Percent parametresinde belirtilen bir zarar (mevcut hisse senedinin belirli bir yüzdesi olarak verilen) varsa CMoneyFixedLot sınıfı Expert Advisor'ın karsız pozisyonları cebren kapatmasını önerecektir ve bu gerçekleştirilecektir.
Expert Advisor'ın giriş parametrelerinden sonra CExpert sınıfının ExtExpert nesnesi bildirilir:
CExpert ExtExpert;
Bu, alım satım stratejisi sınıfının bir örneğidir.
CExpert sınıfının bir örneği olan ExtExpert nesnesi, CExpertSignal (alım satım sinyallerinin temel sınıfı), CExpertMoney (temel para ve risk yönetimi sınıfı) ve CExpertTrailing (takip eden açık pozisyonların temel sınıfı) sınıflarına referanslar içerir. Ayrıca CExpert sınıfı, CExpertTrade, SSymbolInfo, CAccountInfo, CPositionInfo, COrderInfo sınıflarının ve CIndicators kapsayıcısının örneklerini içerir.
Expert Advisor'ın parametrelerini ayarlamak için karşılık gelen sınıfların örneklerini oluşturmanız ve ExtExpert sınıfında oluşturulan nesnelere referanslar belirtmeniz gerekir.
Expert Advisor başlatmaya ilişkin OnInit işlevini ele alalım. Burada ExtExpert sınıfının özelliklerini başlatır ve yapılandırırız.
1. ExtExpert sınıfını başlatma:
//--- Initializing expert if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber)) { //--- failed printf(__FUNCTION__+": error initializing expert"); ExtExpert.Deinit(); return(-1); }
ExtExpert nesnesi, Init yöntemi kullanılarak başlatılır. Burada, her tick'te sembolü, zaman dilimini, yöntem çağırma bayrağını, Expert Advisor'ın kimliğini ayarlarız ve ayrıca sınıfların özel nesnelerini oluşturup başlatırız (bu aşamada CExpertSignal, CExpertMoney ve CExpertTrailing sınıfları sinyaller, takip ve para yönetimi nesneleri olarak kullanılır).
ExtExpert nesnesi başarıyla başlatılmazsa Expert Advisor -1 dönüş koduyla sonlandırılacaktır.
2. Sinyal nesne özelliklerini oluşturun ve yapılandırın
//--- Creating signal CExpertSignal *signal=new CExpertSignal; if(signal==NULL) { //--- failed printf(__FUNCTION__+": error creating signal"); ExtExpert.Deinit(); return(-2); } //--- ExtExpert.InitSignal(signal); signal.ThresholdOpen(Signal_ThresholdOpen); signal.ThresholdClose(Signal_ThresholdClose); signal.PriceLevel(Signal_PriceLevel); signal.StopLevel(Signal_StopLevel); signal.TakeLevel(Signal_TakeLevel); signal.Expiration(Signal_Expiration); //--- Creating filter CSignalMA CSignalMA *filter0=new CSignalMA; if(filter0==NULL) { //--- failed printf(__FUNCTION__+": error creating filter0"); ExtExpert.Deinit(); return(-3); } signal.AddFilter(filter0); //--- Set filter parameters filter0.PeriodMA(Signal_MA_PeriodMA); filter0.Shift(Signal_MA_Shift); filter0.Method(Signal_MA_Method); filter0.Applied(Signal_MA_Applied); filter0.Weight(Signal_MA_Weight);
Alım satım sinyalleri nesnesinin yapılandırması birkaç adımdan oluşur:
- Sinyal nesnesi oluşturma ve parametrelerini ayarlama,
- Alım satım sinyalleri modülü oluşturma ve CExpertSignal sınıf örneğine ekleme.
ExtExpert nesnesi başarıyla başlatılmazsa Expert Advisor, bir hatanın hangi adımda oluştuğuna bağlı olarak dönüş koduyla (-2'den -3'e) sonlandırılacaktır.
Parametrelerin MQL5 Sihirbazı'nda nasıl belirtildiğine bağlı olarak uygun kod oluşturulur.
//--- Set signal parameters filter0.PeriodMA(85); //--- Parameter was set as fixed in MQL5 Wizard //--- (gray icon - fixed value equal to 85) filter0.SlowPeriod(Signal_MA_Shift); //--- Parameter was set as input variable //--- (blue icon - input parameter of Expert Advisor)
Parametre sabit ise ve değeri varsayılan değerden farklı değilse oluşturulan koda yazılmayacaktır. Bu durumda parametrenin varsayılan değeri (ilgili sınıfta belirtilen) kullanılacaktır.
3. Takip Eden nesne özelliklerini oluşturun ve yapılandırın
//--- Creation of trailing object CTrailingFixedPips *trailing=new CTrailingFixedPips; if(trailing==NULL) { //--- failed printf(__FUNCTION__+": error creating trailing"); ExtExpert.Deinit(); return(-4); } //--- Add trailing to expert (will be deleted automatically)) if(!ExtExpert.InitTrailing(trailing)) { //--- failed printf(__FUNCTION__+": error initializing trailing"); ExtExpert.Deinit(); return(-5); } //--- Set trailing parameters trailing.StopLevel(Trailing_FixedPips_StopLevel); trailing.ProfitLevel(Trailing_FixedPips_ProfitLevel);Takip eden nesnenin yapılandırılması ayrıca birkaç adımdan oluşur:
- Takip eden nesneyi oluşturma,
- Expert'e takip ekleme,
- Takip eden parametreleri ayarlama.
Takip eden nesne başarıyla başlatılmazsa Expert Advisor, bir hatanın hangi adımda oluştuğuna bağlı olarak dönüş koduyla (-4'ten -5'e kadar) sonlandırılacaktır.
4. Para nesnesi özelliklerini oluşturun ve yapılandırın
//--- Creation of money object CMoneyFixedLot *money=new CMoneyFixedLot; if(money==NULL) { //--- failed printf(__FUNCTION__+": error creating money"); ExtExpert.Deinit(); return(-6); } //--- Add money to expert (will be deleted automatically)) if(!ExtExpert.InitMoney(money)) { //--- failed printf(__FUNCTION__+": error initializing money"); ExtExpert.Deinit(); return(-7); } //--- Set money parameters money.Percent(Money_FixLot_Percent); money.Lots(Money_FixLot_Lots);
Para ve risk yönetimi nesnesinin yapılandırılması da 4 adımdan oluşur:
- Para nesnesini oluşturma,;
- Expert'e para ekleme,
- Para parametrelerini ayarlama.
Para nesnesi başarıyla başlatılmazsa Expert Advisor, bir hatanın hangi adımda oluştuğuna bağlı olarak dönüş koduyla (-6'dan -7'ye kadar) sonlandırılacaktır.
5. Sınıflarda kullanılan tüm göstergeleri başlatın
//--- Check all trading objects parameters if(!ExtExpert.ValidationSettings()) { //--- failed ExtExpert.Deinit(); return(-8); } //--- Tuning of all necessary indicators if(!ExtExpert.InitIndicators()) { //--- failed printf(__FUNCTION__+": error initializing indicators"); ExtExpert.Deinit(); return(-9); } //--- ok return(0);
Alım satım sinyalleri, takip ve para yönetimi nesnelerini oluşturup başlattıktan sonra, ExtExpert'in ValidationSettings() yöntemi çağrılır. Bunun ardından ExtExpert nesnesinin InitIndicators() yöntemi çağrılır. Bu, sinyal, takip ve para nesnelerinde kullanılan göstergeleri başlatır.
OnDeinit, OnTick, OnTrade ve OnTimer olaylarının işlenmesi, ExtExpert sınıfının uygun yöntemleri çağrılarak gerçekleştirilir.
CExpert yöntemleri uygulamasının ayrıntılarını bilmek istiyorsanız göstergenin '\<client_terminal_directory>\MQL5\Include\Expert\expert.mqh' içinde bulunan kaynak kodunu görüntüleyebilirsiniz.
3. MetaTrader 5 Strateji Test Cihazında Oluşturulan Expert Advisor'ı Kontrol Etme
Standart Kitaplığa ait tüm bileşenler mevcutsa oluşturulan Expert Advisor kodu başarıyla derlenir:
Şekil 10. Expert Advisor'ın MQL5 Sihirbazında Oluşturulan Kaynak Kodunun Başarılı Derlemesi
Ortaya çıkan Expert Advisor, alım satım sinyalleri, takip eden açık pozisyonlar ve para ve risk yönetiminin seçilen algoritmalarına göre alım satım işlemi yapacaktır.
Yeni oluşturduğunuz alım satım sisteminizin nasıl çalıştığını MetaTrader 5 istemci terminalinden Strateji Test Cihazını kullanarak kontrol edebilirsiniz. Şekil 11'de, varsayılan ayarlarla (EURUSD, H1, 01.01.2010-01.06.2011) geçmiş veriler üzerinde test sonuçlarını görebilirsiniz:
Şekil 11. Geçmiş Verilere (EURUSD, H1) İlişkin Expert Advisor Testi Sonuçları
En iyi Expert Advisor parametreleri kümesi, MetaTrader 5 Strateji Test Cihazı'nda optimizasyondan sonra bulunabilir.
Sonuç
Alım satım stratejisi sınıflarını kullanmak, alım satım fikirlerinizin oluşturulmasını ve test edilmesini önemli ölçüde kolaylaştırır. Artık, Expert Advisor'ın tüm kaynak kodu, kullanıma hazır Standart Kitaplık modülleri veya kendi modüllerinize dayanarak MQL5 Sihirbazı kullanılarak doğrudan MetaEditor'de oluşturulabilir.
Kendi alım satım sinyalleri modülünüzü yazmak istemiyorsanız veya yazamıyorsanız her zaman İşler hizmetinden yararlanabilir ve alım satım robotunun tamamını veya yalnızca gerekli modülleri sipariş verebilirsiniz. Bu yaklaşım ek faydalar sağlar:
- Ayrı bir modül geliştirme maliyeti, tüm Expert Advisor'ın maliyetinden düşük olmalıdır.
- Ortaya çıkan modül, MQL5 Sihirbazı kullanılarak hem bağımsız bir Expert Advisor hem de (bu modüle dayalı olarak) bütün bir alım satım robotları ailesi oluşturmak için tekrar kullanılabilir.
- Sipariş edilen modül, MQL5 Sihirbazının ek gerekliliklerine kesinlikle uymalıdır ve bu, kodun kalitesi üzerinde ek kontrol sağlar.
MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/171
![Bulanık Mantık Kullanarak Gösterge Oluşturmanın Basit Örneği](https://c.mql5.com/2/0/Fuzzy_logic_MQL5.png)
![Büyüyen Nöral Gaz: MQL5'te Uygulama](https://c.mql5.com/2/0/neural_gas_MQL5.png)
![Standart Kitaplık Sınıflarını kullanarak kendi Piyasa İzlemenizi oluşturun](https://c.mql5.com/2/0/visual.png)
!["Yeni Çubuk" Olay İşleyicisi](https://c.mql5.com/2/0/new_bar_born.png)
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz