"MQL5 Sihirbazı: Alım Satım Sinyalleri Modülü Nasıl Oluşturulur" makalesi için tartışma

 

Yeni makale MQL5 Sihirbazı: Alım Satım Sinyalleri Modülü Nasıl Oluşturulur yayınlandı:

Bu makale fiyatın ve hareketli ortalamanın kesişimine ilişkin sinyallerin uygulanmasıyla kendi alım satım sinyalleri sınıfınızı nasıl yazacağınız ve bunu MQL5 Sihirbazının alım satım stratejileri oluşturucusuna nasıl ekleyeceğinizle birlikte MQL5 Sihirbazı için oluşturulan sınıfın tanımının yapısını ve biçimini açıklar.

Bu makale MQL5 Sihirbazı ile Uzman Danışmanlar oluştururken kullanılacak alım satım sinyalleri modüllerini yazma ilkelerini açıklar.

MQL5 Sihirbazı ile oluşturulan Uzman Danışman dört temel sınıfa dayanır:

Şekil 1. CExpert temel sınıfının yapısı

Şekil 1. CExpert temel sınıfının yapısı

Yazar: MetaQuotes

 
Beyler Yoldaşlar! Makaleyi okudum! Her şeyi yazıldığı gibi yaptım, sanırım şimdi cennete gideceğim. Ama hayır - Master MKL 5 sinyal içeren dosyamı görmedi. Her şeyi tekrar kontrol ettim, hepsini tekrar yaptım, tekrar kontrol ettim, ancak sinyal Uzman Danışmanlar oluşturma sihirbazında görünmüyor. Makaledeki önerilere uygun olarak oluşturduğum dosyamı ekliyorum. Neyi yanlış yaptığımı anlamama yardım edin ya da tam tersine, makalenin yazarı önemli bir şey eklemedi, çünkü hiçbir şekilde bir araya gelmiyor. Kısacası, bana elinizden gelen her şekilde yardımcı olun.
Dosyalar:
 
Tincup:
Beyler Yoldaşlar! Makaleyi okudum! Her şeyi yazıldığı gibi yaptım, sanırım şimdi cennete gideceğim. Ama hayır - Master MKL 5 sinyal içeren dosyamı görmedi. Her şeyi tekrar kontrol ettim, hepsini tekrar yaptım, tekrar kontrol ettim, ancak sinyal Uzman Danışmanlar oluşturma sihirbazında görünmüyor. Makaledeki önerilere uygun olarak oluşturduğum dosyamı ekliyorum. Neyi yanlış yaptığımı anlamama yardım edin ya da tam tersine, makalenin yazarı önemli bir şey eklemedi, çünkü hiçbir şekilde bir araya gelmiyor. Kısacası, bana elinizden geldiğince yardımcı olun.


Sınıf tanımlayıcısı kaynak metnin önemli bir parçasıdır.

Tanımlayıcınızda iki bariz hata var. Bunlardan biri, var olmayan bir ENUM belirtildiği için sinyali algılamanızı engeller. İkincisi derleme sırasında sorunlara neden olacaktır (yanlış parametre adı).

Bir incelik daha. Her tanımlayıcı satırında anahtar kelimeden önce sadece bir boşluk olmalıdır. (Bu kısıtlamanın gelecekte kaldırılacağını düşünüyorum, ancak şimdilik böyle).

// wizard description start
//+---------------------------------------------------------------------------+
//| Description of the class                                                |
//| Title=Сигнал пересечению ценой скользящей средней                     |
//| Type=Signal                                                             |
//| Name=Sample                                                             |
//| Class=CSampleSignal                                                     |
//| Page=                                                                   |
//| Parameter=PeriodMA,int,12                                                |
//| Parameter=ShiftMA,int,0                                                  | было SniftMA
//| Parameter=MethodMA,ENUM_MA_METHOD,MODE_EMA                               |
//| Parameter=AppliedMA,ENUM_APPLIED_PRICE,PRICE_CLOSE                      | было ENUM_MA_APLLIED_PRICE
//| Parameter=Limit,double,0.0                                               |
//| Parameter=StopLoss,double,50.0                                           |
//| Parameter=TakeProfit,double,50.0                                         |
//| Parameter=Expiration,int,10                                              |
//+---------------------------------------------------------------------------+
// wizard description end


Metin üzerinde daha fazla.

Bir yapıcıya sahip olmamak kötüdür. Üye verilerini varsayılan değerlerle başlatmalısınız. Sonuçta, genel durumda, bir parametre belirleme yöntemi çağrılmayabilir.

Ve son olarak, yöntemler yanlış tanımlanmıştır

   void     LimitMA (int value)                    {m_limit=value;}
   void     StopLoss (int value)                   {m_stop_loss=value;}
   void     TakeProfit (int value)                 {m_take_profit=value;}

gerekir

   void     LimitMA (double value)                    {m_limit=value;}
   void     StopLoss (double value)                   {m_stop_loss=value;}
   void     TakeProfit (double value)                 {m_take_profit=value;}

 

Elbette cevabınız için çok teşekkür ederim. Her şeyi düzelttim ve çalıştı.

Ancak Uzman Danışmanın kendisini derlerken, derleyici bulmuş olsaydı kendi başıma bulamayacağım bir hata verdi. Bu arada, bana cevap verirken, bunu kendiniz için fark etmeden düzeltmiş olmalısınız, ancak makalenin orijinal metninde var.

Makalede.

  void               Limit(double value)                 { m_limit=value;                  }

yardım talebime cevap olarak

  void               LimitМА(double value)                 { m_limit=value;}

Sinyal dosyasında MA'nın olmaması, Uzman Danışmanın başarılı bir şekilde oluşturulmasından sonra kendisini derlerken aşağıdaki hatayı oluşturur

'Limit' - üye işlev tanımlanmamış 123456.mq5 77 11
1 hata(lar), 0 uyarı(lar) 2 1

Benim durumumda en azından 77. satırda şunları görüyoruz

signal.Limit(Inp_Signal_Sample_Limit);

Limit kelimesinden sonra MA ekleyin

Uzman Danışman metnindeki hata kaybolur.

Eğer yanılıyorsam, özür dilerim. Ben profesyonel değilim.

 
Ve buna göre, tanımlama Sınır değil, LimitMA olmalıdır.
 

Ve bir şey daha: bu hata ne olursa olsun ortaya çıkıyor:

'--' - l-değeri gerekli 1234.mq5 31 57

'--' - l-değeri gerekli 1234.mq5 31 59
'--' - l-değeri gerekli 1234.mq5 31 61
'--' - l-değeri gerekli 1234.mq5 31 63
'--' - l-değeri gerekli 1234.mq5 31 65
'--' - l-değeri gerekli 1234.mq5 31 67
'--' - l-değeri gerekli 1234.mq5 31 69
'--' - l-değeri gerekli 1234.mq5 31 71
'--' - l-değeri gerekli 1234.mq5 31 73
'--' - l-değeri gerekli 1234.mq5 31 75
'--' - l-değeri gerekli 1234.mq5 31 77
'--' - l-değeri gerekli 1234.mq5 31 79
'--' - l-değeri gerekli 1234.mq5 31 81
'--' - l-değeri gerekli 1234.mq5 31 83
'--' - l-değeri gerekli 1234.mq5 31 85
'--' - l-değeri gerekli 1234.mq5 31 87
'--' - l-değeri gerekli 1234.mq5 31 89
'--' - l-değeri gerekli 1234.mq5 31 91
'--' - l-değeri gerekli 1234.mq5 31 93
'--' - l-değeri gerekli 1234.mq5 31 95
'--' - l-değeri gerekli 1234.mq5 31 97
'--' - l-değeri gerekli 1234.mq5 31 99
'--' - l-değeri gerekli 1234.mq5 31 101
'--' - l-değeri gerekli 1234.mq5 31 103
'--' - l-değeri gerekli 1234.mq5 31 105
'--' - l-değeri gerekli 1234.mq5 31 107
'--' - l-değeri gerekli 1234.mq5 31 109
'--' - l-değeri gerekli 1234.mq5 31 111
'--' - l-değeri gerekli 1234.mq5 31 113
'--' - l-değeri gerekli 1234.mq5 31 115
'-' - işlenen bekleniyor 1234.mq5 31 117
'Inp_Signal_Sample_Expiration' - bildirilmemiş tanımlayıcı 1234.mq5 77 22
32 hata(lar), 0 uyarı(lar) 33 1

Aşağıdakileri görmek için ÇD'nin 31. satırına gidin

input double Inp_Signal_Sample_StopLoss =50.0;
input double Inp_Signal_Sample_TakeProfit=50.0;
input int Inp_Signal_Sample_Expiration=10-------------------------------------------------------------;
//--- para için girdiler
input double Inp_Money_FixLot_Percent =10.0;

input double Inp_Money_FixLot_Lots =0.1;

10'dan gelen noktalı çizgi şeklindeki kuyruğu kaldırın ve tüm hatalar kaybolur.

Uzman Danışman çalışmaya ve optimize etmeye hazırdır.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
Tincup:
Evet ve buna göre açıklama Limit değil, LimitMA da olmalıdır

Evet, LimitMA, araştırdım.

Genel olarak, gelecek için... Bir sınıf tanımlayıcısı oluştururken, kopyala yapıştırı daha aktif kullanın, çünkü derleyici yorumları (tanımlayıcıyı oluşturan) kontrol etmez ve tanımlayıcının yöntem adlarının ve parametre adlarının çakışması önemlidir. Bu yalnızca Uzman Danışmanı derlerken "ortaya çıkar" ve olumsuz duygulara neden olur. Yine de, gördüğünüz gibi, ölümcül bir şey değildir.

 
Tincup:

Ve bir şey daha: bu hata ne olursa olsun ortaya çıkıyor:

'--' - l-değeri gerekli 1234.mq5 31 57

Bu hata, sınıf tanımlayıcı dizesinin uzunluğu nedeniyle oluşur. Tatilden sonra bunu çözeceğiz.
Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
 
Güzel şeyler... iyi yazılmış ve kesinlikle göz açıcı.
 

İyi günler!

  1. Ekteki dosyada bir baskı hatası var, eğer karıştırmadıysam! CheckOpenLong fonksiyonunun açıklamasında sl ve tp değişkenlerini hesaplama satırlarında işaretler tersine çevrilmelidir.
  2. CheckOpenLong fonksiyonunu aşağıdaki gibi değiştirdim:
    bool CSampleSignal::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
      {
    
       Print("Close(0)=",DoubleToString(Close(0),5)," Close(1)=",DoubleToString(Close(1),5));
       Print("Open(0)=",DoubleToString(Open(0),5)," Open(1)=",DoubleToString(Open(1),5));
       Print("MA(0)=",DoubleToString(MA(0),5)," MA(1)=",DoubleToString(MA(1),5));
    
       return(false);
       
      }
    yani, sadece son ve önceki çubuk için Kapanış, Açılış ve MA değerlerini vermelidir. Yani EveryTick değeri yanlışsa, her şey olması gerektiği gibi çalışır, ancak doğruysa - değerler yerine sıfırlar çıkarır! Bana sorunun ne olduğunu söyleyebilir misiniz? Neyi yanlış yapıyorum?

Teşekkür ederim!

 
lVlaxim:

İyi günler!

  1. Eğer kafam karışmadıysa, ekli dosyada bir baskı hatası var! CheckOpenLong fonksiyonunun açıklamasında sl ve tp değişkenlerini hesaplama satırlarında işaretler tersine çevrilmelidir.
  2. CheckOpenLong işlevini şu şekilde değiştirdim: yani, sadece son ve önceki çubuk için Kapanış, Açılış ve MA değerlerini vermelidir. Yani EveryTick değeri yanlışsa, her şey olması gerektiği gibi çalışır, ancak doğruysa - değerler yerine sıfırlar çıkarır! Bana sorunun ne olduğunu söyleyebilir misiniz? Neyi yanlış yapıyorum?

Teşekkür ederim!

1. noktada, hatayı bulduğunuz için teşekkürler. Düzeltilecektir.

Madde 2'de, MQL5 ile küçük bir tutarsızlık vardı, düzeltildi. Bir sonraki derlemede görünmelidir.