Не могу определит ошибку OrderModify ERROR 1

 

Привет всем,

Написан код для Трейлинга и Безубытка, но на тестах, местами появляется ошибка OrderModify ERROR 1.

Можно ли кто дать мудрый совет по этому поводу ?

int Trailing()
   {
int i;
err=GetLastError();
// без убыток
if (ExtBreakeven>0 && k>0)
for (i=1;i<=k;i++)
   {
   if (OrderN[i*2-1] > 0)
      if(OrderSelect(OrderN[i*2-1], SELECT_BY_TICKET)==true)
      {
         if ((ask-OrderOpenPrice())>NormalizeDouble(ExtBreakeven * precision, digit + 1) && OrderOpenPrice()>OrderStopLoss()) 
         {
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,0);
//            return(0);
         }
         err=GetLastError();
         if (err>1)
            {
            Print("Ошибка модификации СЛ в без убыток! OrderN[k]=",OrderN[i*2-1]," Error=",err);
            }
      }
   if (OrderN[i*2] > 0)
      if(OrderSelect(OrderN[i*2], SELECT_BY_TICKET)==true)
      {
         if ((OrderOpenPrice()-bid)>NormalizeDouble(ExtBreakeven * precision, digit + 1) && OrderOpenPrice()<OrderStopLoss()) 
         {
            OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,0);
//            return(0);
         }
         err=GetLastError();
         if (err>1)
            {
            Print("Ошибка модификации СЛ в без убыток! OrderN[k]=",OrderN[i*2]," Error=",err);
            }
      }
   }

   
// Трейлинг
if (ExtTrailingStop>0 && k>0)
for (i=1;i<=k;i++)
   {
   if (OrderN[i*2-1] > 0)
      if(OrderSelect(OrderN[i*2-1], SELECT_BY_TICKET)==true)
      {
         if ((ask-OrderOpenPrice())>NormalizeDouble(ExtTrailingStop * precision, digit + 1) && OrderStopLoss()<(ask-NormalizeDouble(ExtTrailingStop * precision, digit + 1))) 
         {
            OrderModify(OrderTicket(),OrderOpenPrice(),(ask-NormalizeDouble(ExtTrailingStop * precision, digit + 1)),OrderTakeProfit(),0,0);
//            return(0);
         }
         err=GetLastError();
         if (err>1)
            {
            Print("Ошибка модификации СЛ во время1 трейлинга! OrderN[k]=",OrderN[i*2-1]," Error=",err);
            }
      }
      else 
      {
      Print("Неудалось выделить ордер во время трейлинга  ",OrderN[i*2-1]);
      }

   if (OrderN[i*2] > 0)
      if(OrderSelect(OrderN[i*2], SELECT_BY_TICKET)==true)
      {
         if ((OrderOpenPrice()-bid)>NormalizeDouble(ExtTrailingStop * precision, digit + 1) && OrderStopLoss()>(bid+NormalizeDouble(ExtTrailingStop * precision, digit + 1))) 
         {
            OrderModify(OrderTicket(),OrderOpenPrice(),bid+NormalizeDouble(ExtTrailingStop * precision, digit + 1),OrderTakeProfit(),0,0);
//            return(0);
         }
         err=GetLastError();
         if (err>1)
            {
            Print("Ошибка модификации СЛ во время2 трейлинга! OrderN[k]=",OrderN[i*2]," Error=",err);
            }
      }
      else 
      {
      Print("Неудалось выделить ордер во время трейлинга  ",OrderN[i*2]);
      }

   }
   return(0);
   }
 
Lala:

Привет всем,

Написан код для Трейлинга и Безубытка, но на тестах, местами появляется ошибка OrderModify ERROR 1.


вы пытаетесь отмодифицировать на ту же цену.

это не ошибка, а предупреждение - НЕТ ИЗМЕНЕНИЙ

 
Ааа ясно, спасибо ! Теперь знаю в чем дело. А можно ли как то правильно обойти эту проблему ?
 
Lala:
Ааа ясно, спасибо ! Теперь знаю в чем дело. А можно ли как то правильно обойти эту проблему ?

конечно


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

если не равны, то модифицируйте

 
Lala:
Ааа ясно, спасибо ! Теперь знаю в чем дело. А можно ли как то правильно обойти эту проблему ?
Определите нужный вам шаг и прибавьте или убавьте стоплосс в зависимости от нужного вам направления! Подсказки в Доке и в Учебнике!
Причина обращения: