В чем ошибка???

 

   sprice = NormalizeDouble(price / orderlots, Digits);
   
   for(int i = OrdersTotal(); i >= 0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic){
            if(OrderType() == OP_SELL){
               if(Bid + step <= sprice){
                  if(OrderStopLoss() >= Bid + step){
                     sl = Bid + step;
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0) == false)
                        Print("Неудалось модифицировать Стоп Лосс продаж!");
                  }
               }
            }
            if(OrderType() == OP_BUY){
               if(Ask - step >= sprice){
                  if(OrderStopLoss() <= Ask - step){
                     sl = Ask - step;
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0) == false)
                        Print("Неудалось модифицировать Стоп Лосс покупок!");
                  }
               }
            }
         }
      }
   }

Изначально стоп лосс равен 0. Модифицируется при условии что цена пошла в нашу сторону. Используется сетка.

            if(OrderType() == OP_SELL){
               if(Bid + step <= sprice){
                  if(OrderStopLoss() >= Bid + step){
                     sl = Bid + step;
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0) == false)
                        Print("Неудалось модифицировать Стоп Лосс продаж!");
                  }
               }
            }

Этот участок отказывается работать. Нет ошибки. Просто не модифицирует ордера и все. Хотя...

            if(OrderType() == OP_BUY){
               if(Ask - step >= sprice){
                  if(OrderStopLoss() <= Ask - step){
                     sl = Ask - step;
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0) == false)
                        Print("Неудалось модифицировать Стоп Лосс покупок!");
                  }
               }
            }

здесь все в прядке. Модифицируется и один ордер и сетка...

Так в чем проблема???


P.S. sprice - средняя цена.

 

            if(OrderType() == OP_SELL){
               if(Bid + step <= sprice){
                  if(OrderStopLoss() >= Bid + step){
                     sl = Bid + step;
                     if(OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0) == false)
                        Print("Неудалось модифицировать Стоп Лосс продаж!");
                  }
               }
            }

Если в этом участке закрыть строчку

                  if(OrderStopLoss() >= Bid + step){

то происходит модификация, но стоп лосс не стабильный и постоянно скачет за ценой.

Так в чем проблема???

 

Так в чем проблема???

Наверное в том, что Вы поленились по шагам всё это запустить.

Причина обращения: