Hatalar, hatalar, sorular - sayfa 52

 
ama MT4'te böyle değildi, teşekkürler. sadece indirdim
 

Uzman Danışmanları test ederken:
Exp_TEMA.mq5, "Farklı enstrümanlarda işlem yapan Uzman Danışman Oluşturma" makalesinden, Told[] Tnew[1] ifadeleri aşağıdaki değerleri alır:
Told[] İfade değerlendirilemedi
Tnew[1] Geçersiz dizi aralığı.

ve My_First_EA.mq5, makaleden: "Yeni Başlayanlar için MQL5 Uzman Danışmanları Yazmak için Adım Adım Kılavuz", ifade
New_Time[1] değeri alır: Geçersiz dizi aralığı

İfade değerleri değerlendirilemedi, Geçersiz dizi aralığı ne anlama geliyor ve Expert Advisors sonuçlarını nasıl etkiliyor?

 

Told - boyutu olmayan boş bir dizi

Tnew[1] - dizinin ötesine geçer, dizi Tnew[1] olarak tanımlanır, bu nedenle dizinin öğelerine yalnızca Tnew[0] olarak erişilebilir, çünkü dizin sıfırdan başlar.

 
Renat :

Told - boyutu olmayan boş bir dizi

Tnew[1] - dizinin ötesine geçer, dizi Tnew[1] olarak tanımlanır, bu nedenle dizinin öğelerine yalnızca Tnew[0] olarak erişilebilir, çünkü dizin sıfırdan başlar.


Zaten forumun başka bir başlığında Tnew hakkında konuşmuştum, görünüşe göre geliştiricilerden bir yoruma ihtiyacım vardı :)
 

Lütfen koşula göre sadece bir anlaşmayı nasıl açacağımı söyle. Kodumla, terminal bu koşulda birkaç fırsat açar, ancak yalnızca bir tanesine ihtiyaç vardır.

       if (Buy_Signal)
        {
         mrequest.price = NormalizeDouble (latest_price.ask, _Digits );           // последняя цена ask
         mrequest.sl = NormalizeDouble (latest_price.ask - STP* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.ask + TKP* _Point , _Digits ); // Take Profit
         mrequest.type = ORDER_TYPE_BUY ;                                       // ордер на покупку
         //--- отсылаем ордер
         OrderSend (mrequest,mresult);        
        }        

       if (Sell_Signal)
        {
         mrequest.price = NormalizeDouble (latest_price.bid, _Digits );           // последняя цена Bid
         mrequest.sl = NormalizeDouble (latest_price.bid + STP* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.bid - TKP* _Point , _Digits ); // Take Profit
         mrequest.type= ORDER_TYPE_SELL ;                                       // ордер на продажу                                          
         //--- отсылаем ордер
         OrderSend (mrequest,mresult);              
        }
      

Sonuç bu resim:

Bu şartlarla işlem yapılıp yapılmadığı nasıl kontrol edilir? Denedim çalışmıyor:

 // в этом цикле поочередно перебираем все открытые позиции 
   for (i= 0 ;i< PositionsTotal ();i++)
     {
       // выбираем позиции только по "нашему" инструменту
       if ( Symbol ()== PositionGetSymbol (i))
     ...
     }
 
AM2 :

Lütfen koşula göre sadece bir anlaşmayı nasıl açacağımı söyle. Kodumla, terminal bu koşulda birkaç fırsat açar, ancak yalnızca bir tanesine ihtiyaç vardır.

Sonuç bu resim:

Bu şartlarla işlem yapılıp yapılmadığı nasıl kontrol edilir? Denedim çalışmıyor:

Ve PositionSelect gibi harika bir küçük şey varsa, bir döngüde bir arama düzenlemek ne için?

Sadece ilgilendiğimiz enstrüman için bir pozisyonun olup olmadığını kontrol ediyoruz ve true dönerse sakince konyak içip puro içebiliriz... :)

not

Ancak anladığım kadarıyla PositionSelect olmadan PositionGetString çalışmamalıdır. Tüm açık pozların sembollerini bilmemize gerek yok, değil mi?

 
Interesting :

Ve PositionSelect gibi harika bir küçük şey varsa, bir döngüde bir arama düzenlemek ne için?

Sadece ilgilendiğimiz enstrüman için bir pozisyonun olup olmadığını kontrol ediyoruz ve true dönerse sakince konyak içip puro içebiliriz... :)

not

Ancak anladığım kadarıyla PositionSelect olmadan PositionGetString çalışmamalıdır. Tüm açık pozların sembollerini bilmemize gerek yok, değil mi?

Bu kod, açık bir pozisyonun varlığını dikkate alır:

   if (Buy_Signal && PositionSelect ( Symbol ())==false)
     {
         mrequest.type = ORDER_TYPE_BUY ;                                       // ордер на покупку
         mrequest.price = NormalizeDouble (latest_price.ask, _Digits );           // последняя цена ask
         mrequest.sl = NormalizeDouble (latest_price.ask - STP* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.ask + TKP* _Point , _Digits ); // Take Profit
         OrderSend (mrequest,mresult);                                           // отсылаем ордер                
     }

Ancak Buy_Signal koşulu sağlandığı takdirde pozisyon açmaya devam eder. Sell_Signal koşulu oluşmadan önce Buy_Signal pozisyonlarını açmayı durdurmam gerekiyor. Bunu şu şekilde uygulamaya çalışıyorum:

   Buy_Signal = true;
   Sell_Signal = true;                

   if (Buy_Signal && PositionSelect ( Symbol ())==false)
     {
         mrequest.type = ORDER_TYPE_BUY ;                                       // ордер на покупку
         mrequest.price = NormalizeDouble (latest_price.ask, _Digits );           // последняя цена ask
         mrequest.sl = NormalizeDouble (latest_price.ask - STP* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.ask + TKP* _Point , _Digits ); // Take Profit
         OrderSend (mrequest,mresult);                                           // отсылаем ордер
         Buy_Signal = false;
         Sell_Signal = true;                
     }


   if (Sell_Signal && PositionSelect ( Symbol ())==false)
     {
         mrequest.type= ORDER_TYPE_SELL ;                                       // ордер на продажу
         mrequest.price = NormalizeDouble (latest_price.bid, _Digits );           // последняя цена Bid
         mrequest.sl = NormalizeDouble (latest_price.bid + STP* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.bid - TKP* _Point , _Digits ); // Take Profit
         OrderSend (mrequest,mresult);                                           // отсылаем ордер    
         Buy_Signal = true;
         Sell_Signal = false;                
     }
gitmez.
 
AM2 :

Bu kod, açık bir pozisyonun varlığını dikkate alır:

Ancak Buy_Signal koşulu sağlandığı takdirde pozisyon açmaya devam eder. Sell_Signal koşulu oluşmadan önce Buy_Signal pozisyonlarını açmayı durdurmam gerekiyor. Bunu şu şekilde uygulamaya çalışıyorum:

gitmez.

Neden tam olarak bu kod? Büyük bir esneme ile bile, tanıtmak zorunda olduğum şeye benzemiyor (genelde orada her şeyin doğru olduğundan şüpheliyim)

   if (Buy_Signal && PositionSelect ( Symbol ())==false)
     {
         mrequest.type = ORDER_TYPE_BUY ;                                     // ордер на покупку
         mrequest.price = NormalizeDouble (latest_price.ask, _Digits );          // последняя цена ask
         mrequest.sl = NormalizeDouble (latest_price.ask - STP* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.ask + TKP* _Point , _Digits ); // Take Profit 
         OrderSend (mrequest,mresult);                                        // отсылаем ордер                
     }

Ve şöyle bir şey girmek zorunda kaldım:

Ask = SymbolInfoDouble ( _Symbol , SYMBOL_ASK );

SL = NormalizeDouble (Ask - 500 * _Point , _Digits );   // Stop Loss
TP = NormalizeDouble (Ask + 1500 * _Point , _Digits ); // Take Profit

   if (Buy_Signal)
   //Получен сигнал на market buy
  {
  
     if (! PositionSelect ( _Symbol ))
     //Позиции по данному символу отсутствуют
    {
    mrequest.action = TRADE_ACTION_DEAL ; //Установка рыночного ордера (позиция)
    mrequest.type   = ORDER_TYPE_BUY ;     //Ордер на покупку
    mrequest.magic = 18072010 ;          //ORDER_MAGIC
    mrequest.symbol = _Symbol ;          //Инструмент
    mrequest.volume = 0.1 ;              //Объем в 0.1 лот
    mrequest.price = Ask;   //Цена открытия
    mrequest.sl = SL;       //Stop Loss
    mrequest.tp = TP;       //Take Profit
    mrequest.deviation = 5 ; //Отклонение в 5 пунктов   
     OrderSend (mrequest,mresult); //Отсылаем ордер
    }
  
  }

En kötüsü, her şey bir blokta düzenlenebilir

   if ((Buy_Signal)&&(! PositionSelect ( _Symbol )))
   //Получен сигнал market buy
  {
  ...........................................  
  }
 
Interesting :

Neden tam olarak bu kod? Büyük bir esneme ile bile, tanıtmak zorunda olduğum şeye benzemiyor (genelde orada her şeyin doğru olduğundan şüpheliyim)

Ve şöyle bir şey girmek zorunda kaldım:

En kötüsü, her şey bir blokta düzenlenebilir

 if ((Buy_Signal)&&(! PositionSelect ( _Symbol )))
   //Получен сигнал market buy
  {
  ...........................................  
  }

Bu kod ve üstü kapatılana kadar bir pozisyon açmaz, ancak koşul sağlanırsa bir sonraki çubukta kapandıktan sonra tekrar açılır. Ben şu şekilde uyguladım:

 bool BuyOne = true, SellOne = true; // только один ордер.  глобальные переменные




   if (Buy_Signal &&                                                         // покупаем если есть сигнал на покупку
       PositionSelect ( Symbol ())==false &&                                     // ордер закрыт
      BuyOne)                                                               // при условии на покупку ставим только один ордер
     {
      mrequest.type = ORDER_TYPE_BUY ;                                       // ордер на покупку
      mrequest.price = NormalizeDouble (latest_price.ask, _Digits );           // последняя цена ask
      mrequest.sl = NormalizeDouble (latest_price.ask - STP* _Point , _Digits ); // Stop Loss
      mrequest.tp = NormalizeDouble (latest_price.ask + TKP* _Point , _Digits ); // Take Profit
       OrderSend (mrequest,mresult);                                           // отсылаем ордер
      BuyOne = false;                                                       // на покупку только один ордер                                                  
      SellOne = true;                                                       // меняем флаг одного ордера на продажу          
     }

Teşekkür ederim! Bütün istekleri dikkate aldı. Şimdi her şey çalışıyor. Danışman yayın için gönderdi. Ayrıca kodda değişiklik yapabilirsiniz. Baştan çıkarmanın sınırı yoktur)))

 
Belgelerde MqlTradeCheckResult kontrol sonucu yapısı için yanıt kodlarının (Retcode) bir açıklamasını bulamadım. Yapacaklar mı?
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5