Прошу помощи в написании советника

 
int start()
{
     if (CountTrades() == 0)
     {
     TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
     SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
     OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, SL, TP, NULL, Magic, 0, CLR_NONE);
     {
     for (int i = OrdersHistoryTotal()-1; i>=0; i--)
        {
          if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
            {
             if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               {
                if ( OrderType()==OP_BUY)
                  {
                   if (StringFind(OrderComment(),"sl")>=0)
                     {
                       lastlot = FindLastLots(OP_BUY);
                       lastlot = NormalizeDouble(lastlot * Multiplier, 2);
                       TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
                       SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
                       OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, SL, TP, NULL, Magic, 0, CLR_NONE);
           }
        }
      if(OrderType()==OP_SELL)
        {
         if(StringFind(OrderComment(),"sl")>=0)
           {
             lastlot = FindLastLots(OP_SELL);
             lastlot = NormalizeDouble(lastlot * Multiplier, 2);
             TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
             SL = NormalizeDouble(Ask - StopLoss * Point, Digits);
             OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, SL, TP, NULL, Magic, 0, CLR_NONE);
             {
              if (StringFind(OrderComment(),"tp")>=0)
              {
                   TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
                   SL = NormalizeDouble(Bid + StopLoss * Point, Digits);
                    OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, SL, TP, NULL, Magic, 0, CLR_NONE);
              }
             }
           }
        }
     }
  }
}
}
}                 
   return(0);
}
//+------------------------------------------------------------------+
int CountTrades()
{
    int count = 0;
    for (int i=OrdersTotal()-1; i>=0; i--)
    {
        if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
        {
           if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              count++;
        } 
    }
    
    return(count);
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
   double oldlots;
   int    oldticket;
   
   ticket = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)  
         {
             oldticket = OrderTicket();
             if(oldticket > ticket)
             {
                oldlots = OrderLots();
                ticket = oldticket;
             }
         }
      }
   }
   return(oldlots); 

}

помогите пожалуйста

почему то открывает сразу много ордеров не дожидаясь срабатывания стоп или тейк уровней 

 
Для вставки кода есть кнопка SRC. А так никто не будет читать это! Видимо, не хватает ограничения на открытие ордеров. Пропишите, и всё будет в порядке! Не смотря!
 
borilunad:
Для вставки кода есть кнопка SRC. А так никто не будет читать это! Видимо, не хватает ограничения на открытие ордеров. Пропишите, и всё будет в порядке! Не смотря!

Ограничение-то есть

     if (CountTrades() == 0)
     {
...................

int CountTrades()
{
    int count = 0;
    for (int i=OrdersTotal()-1; i>=0; i--)
    {
        if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
        {
           if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              count++;
        } 
    }
    
    return(count);
}

А вот скобки желательно расставить открывающую и закрывающую на одном уровне, чтобы легче было проверить.

Вот этот блок

              if (StringFind(OrderComment(),"tp")>=0)
              {

к чему относится? Ко всем типам, и Sell и Buy или только к Sell

У меня есть подозрение что только к Sell

 
AlexeyVik:

Ограничение-то есть

А вот скобки желательно расставить открывающую и закрывающую на одном уровне, чтобы легче было проверить.

Вот этот блок

к чему относится? Ко всем типам, и Sell и Buy или только к Sell

У меня есть подозрение что только к Sell


да только Sell 

а что мне сделать чтоб пока не закроется предыдущий ордер следующий не открывался? 

 
dima123:


да только Sell 

а что мне сделать чтоб пока не закроется предыдущий ордер следующий не открывался? 


Условие сами не можете написать?!

    if(OrderTotal()==0)
    {
      // открывайте
 
как в коде прописано - так и открывает, на каждую существующую позицию - дополнительную, в противоположном направлении и с увеличенным лотом 8-)
 
evillive:
как в коде прописано - так и открывает, на каждую существующую позицию - дополнительную, в противоположном направлении и с увеличенным лотом 8-)

Как ему объяснить, чтобы поменял код на вставленный с SRC?!
 
borilunad:

Как ему объяснить, чтобы поменял код на вставленный с SRC?!
А тут это не поможет, блоки фигурных скобкок всё равно не расставлены в удобочитаемом порядке, пока подсветкой МЕ не воспользуешься - не разберёшься )))
 
evillive:
А тут это не поможет, блоки фигурных скобкок всё равно не расставлены в удобочитаемом порядке, пока подсветкой МЕ не воспользуешься - не разберёшься )))


Да и не смотрю! А сам не хочет, ждёт подсказок! И тогда деньги валом повалят! ;))
 
dima123:


да только Sell

Ну а если Buy закроется по тейку, тогда что советник должен делать?
 
AlexeyVik:
Ну а если Buy закроется по тейку, тогда что советник должен делать?


откроет сразу ещё по условию if (CountTrades() == 0)
Причина обращения: