Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 176

 

Beyler, danışmanı düzeltmeye yardım edin. Siparişleri kontrol etmek yerine, ilk sinyalde depozitonun tamamını harcayana kadar durmadan satın alır. hepinize şimdiden teşekkürler

 //+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
extern double Lots            = 1 ;
extern int     TakeProfit      = 300 ;
extern int     StopLoss        = 50 ;
extern int     Magic           = 111 ;
extern int     Slippage        = 3 ;
//+------------------------------------------------------------------+
extern string TMA             = "Параметры индикатора TMA" ;
extern string TimeFrame       = "current time frame" ;
extern int     HalfLength      = 56 ;
extern int     Price           = PRICE_CLOSE ;
extern double ATRMultiplier   = 2.0 ;
extern int     ATRPeriod       = 100 ;
extern bool    Interpolate     = true ;
//+------------------------------------------------------------------+
double PriceHigh,PriceLow,SL,TP,OrderMagicNumber;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if ( Digits == 3 || Digits == 5 )
     {
      TakeProfit *= 10 ;
      StopLoss   *= 10 ;
      Slippage   *= 10 ;
     }
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   PriceHigh= iCustom ( NULL , 0 , "TMA_Fair" ,TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate, 1 , 0 );
   PriceLow = iCustom ( NULL , 0 , "TMA_Fair" ,TimeFrame,HalfLength,Price,ATRMultiplier,ATRPeriod,Interpolate, 2 , 0 );

   if (CountSell()== 0 && Bid>=PriceHigh)
     {
      ticket= OrderSend ( Symbol (),OP_SELL,Lots,Bid,Slippage, 0 , 0 , "ТМА" ,Magic, 0 ,Red);
       if (ticket> 0 )
        {
         SL = NormalizeDouble (Bid + StopLoss* Point , Digits );
         TP = NormalizeDouble (Bid - TakeProfit* Point , Digits );
         if ( OrderSelect (ticket,SELECT_BY_TICKET))
             if (!OrderModify(ticket,OrderOpenPrice(),SL,TP, 0 ))
               Print ( "Ошибка модификации ордера на продажу" );
        }
       else Print ( "Ошибка открытия ордера на продажу" );
     }
   if (CountBuy()== 0 && Ask<=PriceLow)
     {
      ticket= OrderSend ( Symbol (),OP_BUY,Lots,Ask,Slippage, 0 , 0 , "ТМА" ,Magic, 0 ,Blue);
       if (ticket> 0 )
        {
         TP = NormalizeDouble (Ask + TakeProfit* Point , Digits );
         SL = NormalizeDouble (Ask - StopLoss* Point , Digits );
         if ( OrderSelect (ticket,SELECT_BY_TICKET))
             if (!OrderModify(ticket,OrderOpenPrice(),SL,TP, 0 ))
               Print ( "Ошибка модификации ордера на покупку" );
        }
       else Print ( "Ошибка открытия ордера на покупку" );
     }
   if (Ask<=PriceLow && CountSell()> 0 )
     {
       for ( int i= OrdersTotal () - 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
           {
             if (OrderMagicNumber()==Magic && OrderType()==OP_SELL)
               if (!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Black))
                   Print ( "Ошибка закрытия ордера на продажу" );
           }
        }
     }
   if (Bid>=PriceHigh && CountBuy()> 0 )
     {
       for (i= OrdersTotal () - 1 ; i>= 0 ; i--)
        {
         if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
           {
             if (OrderMagicNumber()==Magic && OrderType()==OP_BUY)
               if (!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Black))
                   Print ( "Ошибка закрытия ордера на покупку" );
           }
        }
     }
  }
//+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
      if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber && Magic && OrderType()==OP_SELL)
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
      if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber && Magic && OrderType()==OP_BUY)
            count++;
        }
     }
//+------------------------------------------------------------------+
 
Zelimhannahal00 :

Beyler, danışmanı düzeltmeye yardım edin. Siparişleri kontrol etmek yerine, ilk sinyalde depozitonun tamamını harcayana kadar durmadan satın alır. hepinize şimdiden teşekkürler

Kod, kod düzenleyiciyi kullanarak kod düzenleyicide normal şekilde biçimlendirilebilir : Ctrl + <

Sizin için biçimlendirdim - artık normalde okunabilir durumda.

 
Zelimhannahal00 :

Beyler, danışmanı düzeltmeye yardım edin. Siparişleri kontrol etmek yerine, ilk sinyalde depozitonun tamamını harcayana kadar durmadan satın alır. hepinize şimdiden teşekkürler

Konum kontrol işlevlerinde hatayı doğru bir şekilde tanımladınız

 //+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
       if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber() == Magic && OrderType()==OP_SELL)
            count++;
        }
     }

   return (count);
  }
//+------------------------------------------------------------------+
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
       if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber() == Magic && OrderType()==OP_BUY)
            count++;
        }
     }
//+----------------------

kırmızıyla vurgulanmış, düzeltilmiş

Bunun gibi bir şey.

 
Alekseu Fedotov :

Konum kontrol işlevlerinde hatayı doğru bir şekilde tanımladınız

kırmızıyla vurgulanmış, düzeltilmiş

Bunun gibi bir şey.

Düzeltildi hala aynı. Sorun hala alakalı
 
Zelimhannahal00 :
Düzeltildi hala aynı. Sorun hala alakalı
 //+------------------------------------------------------------------+
int CountSell()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
      if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber() == Magic && OrderType()==OP_SELL)
            count++;
        }
     }
   return (count);
  }
//+------------------------------------------------------------------+
int CountBuy()
  {
   int count= 0 ;
   for ( int trade= OrdersTotal ()- 1 ; trade>= 0 ; trade--)
     {
      if ( OrderSelect (trade,SELECT_BY_POS,MODE_TRADES))
        {
         if (OrderSymbol()== Symbol () && OrderMagicNumber() == Magic && OrderType()==OP_BUY)
            count++;
        }
     }
return (count);


tüm kodu kopyaladın mı?

 
Vladislav Andruschenko :


tüm kodu kopyaladın mı?

Yanlışlıkla tüm kodu kopyalamadım. Orada her şey yolunda geri dönüş(sayım);

}

Beklendiği gibi kod bu şekilde sona erer. Derlerken, hiçbir hata veya uyarı yoktur. Bir hata yaptığım fonksiyonlarda yürüyüş, tam olarak nerede olduğunu anlayamıyorum. Yukarıda önerildiği gibi, düzeltildi. Ayrıca hata yok, ancak danışmanın kendisi aynı şekilde çalışıyor (ilk sinyalde, tüm depozito için satın alıyor, belirli lotlarda, örneğin, 1 lot belirledim ve 1 lot 200 veya daha fazla işlem satın alıyor, çünkü depozito yeterli olduğu sürece ve böylece sinyal doğru bir şekilde verir, ayrıca doğru satın alır, sadece çok)

 
Zelimhannahal00 :

Yanlışlıkla tüm kodu kopyalamadım. Orada her şey yolunda geri dönüş(sayım);

}

Beklendiği gibi kod bu şekilde sona erer. Derlerken, hiçbir hata veya uyarı yoktur. Bir hata yaptığım fonksiyonlarda yürüyüş, tam olarak nerede olduğunu anlayamıyorum. Yukarıda önerildiği gibi, düzeltildi. Ayrıca hata yok, ancak danışmanın kendisi aynı şekilde çalışıyor (ilk sinyalde, tüm depozito için satın alıyor, belirtilen lotlarda, örneğin, 1 lot belirledim ve 1 lot 200 veya daha fazla işlem alıyor, çünkü depozito yeterli olduğu sürece ve böylece sinyal doğru bir şekilde verir, ayrıca doğru satın alır, sadece çok)

Kontrol edildi, düzeltildi, çalışıyor.

Dosyalar:
ProjectName.mq4  11 kb
 
Tarihler arasındaki mum sayısı nasıl bulunur?
 
Alexander Fedosov :
Tarihler arasındaki mum sayısı nasıl bulunur?

TF senkronize edilirse, herhangi bir CopyXXXX() işlevi:

Gerekli zaman aralığının başlangıç ve bitiş tarihlerine göre arama

int CopyTime (
    sicim             sembol_adı , // sembol adı
    ENUM_TIMEFRAMES    zaman çerçevesi , // dönem
    tarih saat           start_time , // hangi tarihten itibaren
    tarih saat           stop_time , // hangi tarih
    tarih saat           zaman_dizi[]       // açılış zamanını kopyalayacak dizi
);

Geri dönüş değeri

Kopyalanan dizi öğelerinin sayısı veya bir hata olması durumunda -1.


zamana göre 2 çubuğu bulmak için iBarShift()'i kullanabilirsiniz


 
Igor Makanu :

TF senkronize edilirse, herhangi bir CopyXXXX() işlevi:

Gerekli zaman aralığının başlangıç ve bitiş tarihlerine göre arama

int CopyTime (
    sicim             sembol_adı , // sembol adı
    ENUM_TIMEFRAMES    zaman çerçevesi , // dönem
    tarih saat           start_time , // hangi tarihten itibaren
    tarih saat           stop_time , // hangi tarih
    tarih saat           zaman_dizi[]       // açılış zamanını kopyalayacak dizi
);

Geri dönüş değeri

Kopyalanan dizi öğelerinin sayısı veya hata durumunda -1.


Garip.. Bu fonksiyonların daha önce MT4'te olduğunu hatırlamıyorum. Beş tane eklediler mi?