MQL5 dilini sıfırdan kendi kendine öğrenme - sayfa 75

 

Herkese iyi günler ve iyi bir ruh hali!

MQL5 programlama dilini öğrenmeye devam ediyorum. Vasily Sokolov, başlangıçta danışmanın algoritmasında amaçlandığı gibi, günde yalnızca bir pozisyon açmak için kodda küçük bir değişiklik yaptı . Değişiklik sarı renkle vurgulanır.

Saygılarımla, Vladimir.

 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- Зададим условия для открытия позиций BUY и SELL
   double price= SymbolInfoDouble ( Symbol (), SYMBOL_ASK );
   double point= SymbolInfoDouble ( Symbol (), SYMBOL_POINT );
   int digits=( int ) SymbolInfoInteger ( Symbol (), SYMBOL_DIGITS );
   price= NormalizeDouble (price,digits);

   if (IsMainPositionOpen() == false && IsTimeForOpen())
     {
       if (TickUP()==(price+point))
         OpenBUY();
       else
        {
         if (TickDOWN()==(price-point))
            OpenSELL();
        }
     }
   if (IsTimeForClose())
      CloseALL();
 
Vasiliy Sokolov :

onInit bloğu da aşırı tasarlanmış ve hala tam olarak doğru yazılmamış. İlk olarak, kişi sayıları değil tanımlayıcıları yazmaya çalışmalıdır. Döndür -1 değil ve INIT_FAILED 0 değil, INIT_SUCCEEDED. İkincisi, anahtar burada gereksizdir. Ya if ya da geçiş yazmanız gerekir. Önce bir şey yazın, çünkü diğeri tereyağı yağı.

Üçüncüsü, hesap türü için tüm seçenekleri kontrol etmeniz gerekir. Demo var, gerçek var. Bir de Yarışma var. Ancak üçüncü bir hesap olmasa bile, diğer tüm seçenekleri yakalayacak bir saplama olmalıdır:

Çalışmayı istisnalarla açıklamak muhtemelen daha akıllıca olacaktır, aksi takdirde bilmediğiniz bir şeyi neden kontrol etmeniz gerektiğini anlamanız mümkün olmayacaktır.

En abartılı anlamıyla şöyle olmalı:

1. yürütme için programı başlatın

2. algoritmanın geliştirilmesi ve ondan iki yönde çıkış:

a) Doğru - algoritma doğru çalıştı

b) Yanlış - algoritma çalışmadı

Aynı zamanda, a) üzerinde çalışmak, programcının uygulamak istediği tüm seçeneklerin üzerinde çalışıldığını ve b) üzerinde her şeyin gerekli olup olmadığı önemli olmadığını gösterir. Onlar. programcı yalnızca koyduğu işlevselliği uygular ve istisna dışında her şey atılmalıdır.

 
Konstantin :

Çalışmayı istisnalarla açıklamak muhtemelen daha akıllıca olacaktır, aksi takdirde bilmediğiniz bir şeyi neden kontrol etmeniz gerektiğini anlamanız mümkün olmayacaktır.

En abartılı anlamıyla şöyle olmalı:

1. yürütme için programı başlatın

2. algoritmanın geliştirilmesi ve ondan iki yönde çıkış:

a) Doğru - algoritma doğru çalıştı

b) Yanlış - algoritma çalışmadı

Aynı zamanda, a) üzerinde çalışmak, programcının uygulamak istediği tüm seçeneklerin üzerinde çalışıldığını ve b) üzerinde her şeyin gerekli olup olmadığı önemli olmadığını gösterir. Onlar. programcı yalnızca koyduğu işlevselliği uygular ve istisna dışında her şey atılmalıdır.

Merhaba Konstantin! Açıklama için teşekkürler.

Bu konunun sevgili katılımcıları! MQL5 programlama dilini öğrenmeme yardımcı olan yapıcı ipuçları ve tavsiyeler için hepinize tekrar teşekkür etmek istiyorum.

Şimdi bir duraklama var, çünkü ana işimdeki şeyler kendi kendine çalışmaya çok fazla zaman ve dikkat ayırmama izin vermiyor, ancak şu anda ana sonuca ulaştım - programlamanın temellerini anlıyorum, başkalarının kodlarını okuyorum, kendi işlevlerimi yazıyorum.

Her kod satırının ayrıntılı yorumlarını içeren Trailing_Stop (v.1).mq5 Expert Advisor sürümü, daha önce söz verildiği gibi, programlama okulunun 1. sınıfındaki bir öğrencinin erişebileceği bir sunumda yayınlayacağım, ancak biraz sonra.

Saygılarımla, Vladimir.

 

Herkese iyi günler ve iyi bir ruh hali!

MQL5 programlama dilini öğrenmeye devam ediyorum. Son olarak, bir programlama okulunun 1. sınıf öğrencisinin erişebileceği bir sunumda, her kod satırına ayrıntılı yorumlar içeren Expert Advisor'ın bir sürümünü yazmak için biraz zaman vardı. Danışman kodunun oldukça hantal olması nedeniyle, onu Trailing_Stop_gv.22.mq5 adlı bir dosya olarak yayınlıyorum.

Kodu yayınlamadan önce EA, strateji test cihazında test edildi. Herhangi bir sorun tespit edilmedi. EA, bir netleştirme pozisyonu muhasebe sistemi kullanır. Bu muhasebe sistemi, aynı sembol (finansal araç) için hesapta aynı anda yalnızca bir açık pozisyon olabileceğini ima eder.

Şu anda, Uzman Danışman şunları yapabilir:

  1. Yüklemenin planlandığı ticaret hesabını kontrol edin. Danışman bir demo hesabına kuruluysa, mesaj penceresinde çalışmaya devam etme izni görünecektir. Danışmanı gerçek bir hesaba kurmak için bir girişimde bulunulursa , mesaj penceresinde çalışmaya devam etmenin imkansızlığı hakkında bir uyarı görünecek ve ardından işlem terminalinin çalışma penceresinden otomatik olarak silinecektir.
  2. Ticaret gününde bir kez tam 9:00'da. Moskova saatine göre, ilk tik işaretinin yönlendirileceği yönde otomatik olarak bir pozisyon açın. Örneğin, sabah 9:00'da ise Moskova saatinde, ilk tik yukarı doğru yönlendirilecek, yani bir AL pozisyonu açılacak, ilk tik aşağıdaysa bir SATIŞ pozisyonu açılacaktır.
  3. Parti boyutunu ayarlayın.
  4. Durdurma kaybı boyutunu ayarlayın.
  5. Durdurma kaybının başabaşa taşındığı pozisyon açılış fiyatına göre seviyeyi ayarlayın.
  6. Durdurma kaybı takip adımını ayarlayın.

Uzman Danışmanın bu varyantında, daha önce Vasily Sokolov tarafından önerilen ipuçlarının çoğu uygulanmaktadır.

BİR UYARI!!!

Expert Advisor, bir demo hesabı için kendi kendine çalışma planına göre ve yalnızca eğitim amaçlı geliştirilmiştir! Gerçek bir hesapta işlem yapmak ve kar etmek için tasarlanmamıştır!

Saygılarımla, Vladimir.

Dosyalar:
 
MrBrooklin :

Herkese iyi günler ve iyi bir ruh hali!

MQL5 programlama dilini öğrenmeye devam ediyorum. Son olarak, bir programlama okulunun 1. sınıf öğrencisinin erişebileceği bir sunumda, her kod satırına ayrıntılı yorumlar içeren Expert Advisor'ın bir sürümünü yazmak için biraz zaman vardı. Danışman kodunun oldukça hantal olması nedeniyle, onu Trailing_Stop (v.2).mq5 adlı bir dosya olarak yayınlıyorum.

Kodu yayınlamadan önce EA, strateji test cihazında test edildi. Herhangi bir sorun tespit edilmedi. EA, bir netleştirme pozisyonu muhasebe sistemi kullanır. Bu muhasebe sistemi, aynı sembol (finansal araç) için hesapta aynı anda yalnızca bir açık pozisyon olabileceğini ima eder.

Şu anda, EA şunları yapabilir:

  1. Yüklemenin planlandığı ticaret hesabını kontrol edin. Danışman bir demo hesabına kuruluysa, mesaj penceresinde çalışmaya devam etme izni görünecektir. Danışmanı gerçek bir hesaba kurmak için bir girişimde bulunulursa , mesaj penceresinde çalışmaya devam etmenin imkansızlığı hakkında bir uyarı görünecek ve ardından işlem terminalinin çalışma penceresinden otomatik olarak silinecektir.
  2. Ticaret gününde bir kez tam 9:00'da. Moskova saatine göre, ilk tik işaretinin yönlendirileceği yönde otomatik olarak bir pozisyon açın. Örneğin, sabah 9:00'da ise Moskova saatinde, ilk tik yukarı doğru yönlendirilecek, yani bir AL pozisyonu açılacak, ilk tik aşağıdaysa bir SATIŞ pozisyonu açılacaktır.
  3. Parti boyutunu ayarlayın.
  4. Durdurma kaybı boyutunu ayarlayın.
  5. Durdurma kaybının başabaşa taşındığı pozisyon açılış fiyatına göre seviyeyi ayarlayın.
  6. Durdurma kaybı takip adımını ayarlayın.

Uzman Danışmanın bu varyantında, daha önce Vasily Sokolov tarafından önerilen ipuçlarının çoğu uygulanmaktadır.

BİR UYARI!!!

Expert Advisor, bir demo hesabı için kendi kendine çalışma planına göre ve yalnızca eğitim amaçlı geliştirilmiştir! Gerçek bir hesapta işlem yapmak ve kar etmek için tasarlanmamıştır!

Saygılarımla, Vladimir.

Merhaba! - derleme yapmaz.

Trailing_Stop_gv.22.mq5

-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ------------------------------------

anladım - parantez olmadan Trailing_Stop Expert Advisor (v.2) oluşturmanız gerekiyor

 
SanAlex :

Merhaba! - derleme yapmaz.

Merhaba! Dosyayı siteden yeni indirdim ve MetaEditor'umda kontrol ettim, her şey yolunda gidiyor.

Saygılarımla, Vladimir.

 
MrBrooklin :

Merhaba! Dosyayı siteden yeni indirdim ve MetaEditor'umda kontrol ettim, her şey yolunda gidiyor.

Saygılarımla, Vladimir.

Teşekkür ederim! iş için. Expert Advisor'ı oluştururken ismi yanlış girdim. her şey çalışıyor.

 
SanAlex :

Teşekkür ederim! iş için. Expert Advisor'ı oluştururken ismi yanlış girdim. her şey çalışıyor.

Rica ederim!

Saygılarımla, Vladimir.

 

Bu konunun sevgili katılımcıları!

MQL5 programlama dilinin temellerini öğrenmemde bana yardımcı olan yapıcı önerileriniz, ipuçlarınız ve tavsiyeleriniz için hepinize tekrar teşekkür etmek istiyorum. Vasily Sokolov'a özel teşekkürler! Allah hepinize sağlık ve afiyet versin!

Herkese büyük saygılarımla, Vladimir.

 

Herkese iyi günler ve iyi bir ruh hali!

MQL5 programlama dilini öğrenmeye devam ediyorum. Şu anda yeni bir danışmanın program kodunu yazıyorum. Nasıl çözeceğimi tam olarak anlamadığım bir an ile karşı karşıya kaldım. Görev basit görünüyor - danışmanın yalnızca danışmanın giriş ayarlarında belirtilen döviz çiftinin grafiği üzerinde çalışmasına ihtiyacınız var. Başka bir döviz çiftinin grafiğine yükleme girişimi (örneğin, yanlışlıkla) varsa, danışman çalışmaya devam edememe konusunda bir uyarı vermelidir.

İşte program kodunun eskizleri:

 input string Symbol_Main= "GBPUSDrfd" ;   //Валютная пара, на которую ставим советник

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   /* Определим график валютной пары, на который будем устанавливать советник*/
   string currency_chart= SymbolInfoString ( Symbol (), SYMBOL_DESCRIPTION ) ;
   if (currency_chart==Symbol_Main) //если график валютной пары совпадает со входным параметром
     {
       /* выводим окно сообщений на торговом терминале и продолжаем работу советника */
       MessageBox ( "Работа советника на данной валютной паре разрешена!" );
       return ( INIT_SUCCEEDED ); //возвращаем для функции OnInit значение означающее "удачная инициализация"
     }
   else //в противном случае, если график валютной пары не совпадает со входным параметром
     {
       /* выводим окно сообщений на торговом терминале и закрываем советник */
       MessageBox ( "Работа советника на данной валютной паре запрещена! Выходим!" );
       return ( INIT_FAILED ); //возвращаем для функции OnInit значение означающее "неудачная инициализация"
     }
  }

Derleyici herhangi bir hata atmaz. Çalışmayan kod sarı renkle vurgulanmıştır. Muhtemelen SYMBOL_DESCRIPTION tanımlayıcısının anlamını tam olarak anlamadığım için - sembolün bir dize açıklaması . Diğer tanımlayıcıları uygulamaya çalıştı, ancak sonuç aynı. Belki de SymbolInfoString() işlevi burada hiç gerekli değildir? GBPUSDrfd döviz çiftinin adını yazdım çünkü danışmanı Alfa Forex'te kullanmayı planlıyorum ve bu Forex satıcısında kesinlikle rfd ile biten tüm semboller var.

Sevgili uzmanlar, lütfen bana hangi yönde düşünmeniz gerektiğini söyleyin!

Saygılarımla, Vladimir.