не могу понять в чем проблема советника

 

   Советник провилно работает на продажу но Почему-то  не работает на Покупку в комплитации нет проблем 

обясните буду презнателен 

//+------------------------------------------------------------------+
//|                                                 Moving Setka.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double lot =0.01;
extern double profit = 50;
extern int    step = 30;
extern int MAperiod = 100; 
extern int MAshift = 0;
extern int magic = 1211;
extern int slip = 5;

double MAprice, price;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
if (Digits==3 || Digits == 5)

    step*=10;
    slip*=10;
   return(INIT_SUCCEEDED);

}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{


}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
  
  MAprice=iMA(Symbol(),0,MAperiod,MAshift,MODE_SMA,PRICE_CLOSE,1);
  
  if ( CountBuy() + CountSell()  == 0 && Bid < MAprice )
  {
     if (OrderSend(Symbol(),OP_SELL,lot,Bid,slip,0,0,NULL,magic,0,clrRed)<1) 
     Print("Не удалось открит ордер на Продажу!");
  }
  
   if ( CountBuy() + CountSell()  == 0 && Ask > MAprice )
  {
    if (OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,0,clrBlue)<1)
     Print("Не удалось открит ордер на Покупку!");
  }
  
      if (CountBuy()>=1)
      
      {
      
      price = FindLastBuyPrice();
      if ((price - Ask) >= step*Point)
         {
         if (OrderSend(Symbol(),OP_BUY,lot,Ask,slip,0,0,NULL,magic,0,clrBlue)<1)
     Print("Не удалось открит ордер на Покупку!"); 
         }
      
      }
      
      
   if (CountSell()>=1)
      
      {
      
      price = FindLastSellPrice();
      if ((Bid - price) >= step*Point)
         {
        if (OrderSend(Symbol(),OP_SELL,lot,Bid,slip,0,0,NULL,magic,0,clrRed)<1) 
     Print("Не удалось открит ордер на Продажу!");
         }
      
      }
      
         double op = CalculateProfit();
         if (op>=profit)
         {
            CloseAll();
         }

}
//+------------------------------------------------------------------+
void CloseAll()

{
       for (int i = OrdersTotal()-1; i>=0; i--)
            {
             if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                 {
                 if (OrderSymbol()==Symbol() && OrderMagicNumber() == magic)
                    {
                    if (OrderType()==OP_BUY) 
                         {
                         if (!OrderClose(OrderTicket(),OrderLots(),Bid,slip,clrNONE))
                         Print (" Не удалось закрыть Ордер на покупку!");
                         }
                     if (OrderType()==OP_SELL)
                         { 
                         if (!OrderClose(OrderTicket(),OrderLots(),Ask,slip,clrNONE))
                         Print (" Не удалось закрыть Ордер на продажу!");
                         }
                    }
                 }   
            }
}

//+------------------------------------------------------------------+
  double CalculateProfit()
{
       double oProfit = 0;
       for (int i=OrdersTotal() -1; i>=0; i--)
           {
             if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                 {
                   if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
                       {
                          if (OrderType() == OP_BUY || OrderType() == OP_SELL)
                              {
                                oProfit+= OrderProfit();
                              }
                       
                       }
                 
                 }
           
           
           }
    return(oProfit);

}
//+------------------------------------------------------------------+
   double FindLastBuyPrice()
{
  int oldticket, ticket = 0 ;
  double oldopenprice = 0;
  
  for (int cnt = OrdersTotal()-1; cnt>=1; cnt--)
        {
           if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
               {
               if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic && OrderType() == OP_BUY)
                    {
                    oldticket = OrderTicket();
                    if (oldticket > ticket)
                        {
                        ticket = oldticket;
                        oldopenprice = OrderOpenPrice();
                        }
                    
                    }
               
               }  
        }
       return (oldopenprice);
}
   
   
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
   double FindLastSellPrice()
{
  int oldticket, ticket = 0 ;
  double oldopenprice = 0;
  
  for (int cnt = OrdersTotal()-1; cnt>=1; cnt--)
        {
           if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
               {
               if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic && OrderType() == OP_SELL)
                    {
                    oldticket = OrderTicket();
                    if (oldticket > ticket)
                        {
                        ticket = oldticket;
                        oldopenprice = OrderOpenPrice();
                        }
                    
                    }
               
               }  
        }
       return (oldopenprice);
}
   
   
//+------------------------------------------------------------------+

int CountBuy()

{

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

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

int CountSell()

{

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



Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
Задавайте вопросы по техническому анализу, обсуждайте торговые системы и улучшайте свои навыки программирования торговых стратегий на языке MQL5. Общайтесь и обменивайтесь опытом на форуме с трейдерами всего мира и помогайте ответами новичкам — наше сообщество развивается вместе с вами. От теории к практике Добрый вечер, уважаемые трейдеры...
 
Вставь код в сообщение по человечески!
 

Смотри в условии открытия ордера.   Что бы знаки +- разницы вычитаний при сравнении учитывались.

А также думай если FindLastBuyPrice() вернёт 0.

 
Evgeniy Chumakov:

Смотри в условии открытия ордера.   Что бы знаки +- разницы вычитаний при сравнении учитывались.

А также думай если FindLastBuyPrice() вернёт 0.

Спасибо помог брат от Души