English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
MQL5 Sihirbazı: Programlamadan Expert Advisor'lar Oluşturma

MQL5 Sihirbazı: Programlamadan Expert Advisor'lar Oluşturma

MetaTrader 5Ticaret sistemleri | 15 Aralık 2021, 11:05
170 0
MetaQuotes
MetaQuotes

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:

Şekil 1. MQL5 Sihirbazını Başlatma

Ş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:

Şekil 2. Program Türünü Seçme

Ş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:

Şekil 3. Expert Advisor'ın Genel Özellikleri

Ş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:

  1. CSignalAC - Göstergenin piyasa modellerini temel alan sinyaller modülü Hızlandırıcı Osilatör.
  2. CSignalAMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Uyarlanabilir Hareketli Ortalama.
  3. CSignalAO - Göstergenin piyasa modellerini temel alan sinyaller modülü Müthiş Osilatör.
  4. CSignalBearsPower - Osilatörün piyasa modellerini temel alan sinyaller modülü Ayıların Gücü.
  5. CSignalBullsPower - Osilatörün piyasa modellerini temel alan sinyaller modülü Boğaların Gücü.
  6. CSignalCCI - Osilatörün piyasa modellerini temel alan sinyaller modülü Emtia Kanal İndeksi.
  7. CSignalDeM - Osilatörün piyasa modellerini temel alan sinyaller modülü DeMarker.
  8. CSignalDEMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Çift Üstel Hareketli Ortalama.
  9. CSignalEnvelopes - Göstergenin piyasa modellerini temel alan sinyaller modülü Zarflar.
  10. CSignalFrAMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Fraktal Uyarlanabilir Hareketli Ortalama.
  11. CSignalITF - Sinyallerin zamana göre filtrelenmesi modülü.
  12. CSignalMACD - Osilatörün piyasa modellerini temel alan sinyaller modülü MACD.
  13. CSignalMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Hareketli Ortalama.
  14. CSignalSAR - Göstergenin piyasa modellerini temel alan sinyaller modülü Parabolik SAR.
  15. CSignalRSI - Osilatörün piyasa modellerini temel alan sinyaller modülü Bağıl Güç Endeksi.
  16. CSignalRVI - Osilatörün piyasa modellerini temel alan sinyaller modülü Bağıl Canlılık Endeksi.
  17. CSignalStoch - Osilatörün piyasa modellerini temel alan sinyaller modülü Stokastik.
  18. CSignalTRIX - Osilatörün piyasa modellerini temel alan sinyaller modülü Üçlü Üstel Ortalama.
  19. CSignalTEMA - Göstergenin piyasa modellerini temel alan sinyaller modülü Üçlü Üstel Hareketli Ortalama.
  20. 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

    Ş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

    Ş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

    Ş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:

    1. CTrailingNone - Takip Eden Zarar Durdurucu kullanılmaz.
    2. CTrailingFixedPips - Sabit Durdurma Düzeyine dayalı Takip Eden Zarar Durdurucu.
    3. CTrailingMA - MA'ya dayalı Takip Eden Zarar Durdurucu.
    4. 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:

    Şekil 6. Takip Eden Açık Pozisyonlar Algoritmasını 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:

    Şekil 7. Takip Eden Açık Pozisyonların Seçilmiş Algoritmasının Parametrelerini Ayarlama

    Ş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:

    1. CMoneyFixedLot - Sabit alım satım işlem hacmiyle alım satım.
    2. CMoneyFixedMargin - Sabit marjlı alım satım.
    3. CMoneyFixedRisk - Sabit riskli alım satım.
    4. CMoneyNone - İzin verilen minimum alım satım işlem hacmiyle alım satım.
    5. CMoneySizeOptimized - Optimize edilmiş alım satım işlem hacmiyle alım satım.

    Şekil 8. Para ve Risk Yönetimi Algoritmasını Seçin

    Ş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.

    Şekil 9. Para ve Risk Yönetiminin Seçilmiş Algoritmasının Parametrelerini Ayarlama

    Ş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

    Ş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ı

    Ş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

    Ekli dosyalar |
    testexpert.mq5 (7.49 KB)
    Bulanık Mantık Kullanarak Gösterge Oluşturmanın Basit Örneği Bulanık Mantık Kullanarak Gösterge Oluşturmanın Basit Örneği
    Makale, finansal piyasalar analizi için bulanık mantık kavramının pratik uygulamasına ayrılmıştır. Zarflar göstergesine dayalı iki bulanık kural temeline dayanan sinyal üreten gösterge örneğini öneriyoruz. Geliştirilen gösterge birkaç gösterge arabelleği kullanır: Hesaplamalar için 7 arabellek, grafikler için 5 arabellek ve 2 renk arabelleği.
    Büyüyen Nöral Gaz: MQL5'te Uygulama Büyüyen Nöral Gaz: MQL5'te Uygulama
    Makalede, Büyüyen nöral gaz (GNG) olarak adlandırılan uyarlanabilir kümeleme algoritmasını uygulayan bir MQL5 programının nasıl geliştirileceğine ilişkin bir örnek gösterilmektedir. Bu makale, dil belgelerini incelemiş ve nöroinformatik alanına ilişkin belirli programlama becerilerine ve temel bilgilere sahip kullanıcılara yöneliktir.
    Standart Kitaplık Sınıflarını kullanarak kendi Piyasa İzlemenizi oluşturun Standart Kitaplık Sınıflarını kullanarak kendi Piyasa İzlemenizi oluşturun
    Yeni MetaTrader 5 istemci terminali ve MQL5 Dili, yatırımcıya görsel bilgi sunmak için yeni fırsatlar sunar. Bu makalede, grafik üzerinde rastgele seçilmiş metin bilgilerinin görüntülenmesini düzenlemeye ilişkin tüm işleri yürüten evrensel ve genişletilebilir bir sınıflar kümesi öneriyoruz. Piyasa İzleme göstergesi örneği sunulmuştur.
    "Yeni Çubuk" Olay İşleyicisi "Yeni Çubuk" Olay İşleyicisi
    MQL5 programlama dili, sorunları yepyeni bir düzeyde çözme kapasitesine sahiptir. Halihazırda bu tür çözümlere sahip olan görevler dahi, nesne yönelimli programlama sayesinde bir üst düzeye çıkabiliyor. Bu makalede, oldukça güçlü ve çok yönlü bir araca dönüştürülmüş bir grafikteki yeni çubuğu kontrol etmenin özellikle basit bir örneğini ele alıyoruz. Peki bu araç ne? Bu makalede bunu öğreneceğiz.