Помогите решить Error 1 с OrderModify

 
Коллеги, добрый день,

Есть тралл ТП который работает, но всегда выдает Error 1, а в редких случаях переводить ТП в убыток. Помогите решать проблему пожалуйста.

[code]
void TrallTP()
{
   double price = 0, lots = 0, avgprice = 0;
   for (int i=OrdersTotal()-1; i >= 0; i--)
   {
      if (OrderSelect(i,SELECT_BY_POS)) 
      {
         if (OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
         {
            price +=OrderOpenPrice() * OrderLots();
            lots +=OrderLots();
         }      
      }
   }
   
   if (price == 0) return;
   avgprice = NormalizeDouble(price / lots, Digits);
   
   if (OrderType() == OP_BUY) TP = NormalizeDouble(avgprice + Takeprofit * Point, Digits);
   if (OrderType() == OP_SELL) TP = NormalizeDouble(avgprice - Takeprofit * Point, Digits);
   
   for (int i=OrdersTotal()-1; i >= 0; i--)
   {
      if (OrderSelect(i,SELECT_BY_POS)) 
      {
         if (OrderMagicNumber() == Magic)
         {
            if (!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), TP, OrderExpiration(), clrAliceBlue)) printf("Error: ", GetLastError());
         }
      }
   }       
}

[/code]
 
Перед тем как посылать на модификацию, проверьте OrderTakeProfit(), скорее всего, там  (на этой же цене, на которую хотите изменить) TP уже и стоит и модифицировать нечего. Обычно так и возникает error 1
 
Roman Meskhidze:
Коллеги, добрый день,

Есть тралл ТП который работает, но всегда выдает Error 1, а в редких случаях переводить ТП в убыток. Помогите решать проблему пожалуйста.

[code]
void TrallTP()
{
   double price = 0, lots = 0, avgprice = 0;
   for (int i=OrdersTotal()-1; i >= 0; i--)
   {
      if (OrderSelect(i,SELECT_BY_POS)) 
      {
         if (OrderMagicNumber() == Magic && OrderSymbol() == Symbol())
         {
            price +=OrderOpenPrice() * OrderLots();
            lots +=OrderLots();
         }      
      }
   }
   
   if (price == 0) return;
   avgprice = NormalizeDouble(price / lots, Digits);
   
   if (OrderType() == OP_BUY) TP = NormalizeDouble(avgprice + Takeprofit * Point, Digits);
   if (OrderType() == OP_SELL) TP = NormalizeDouble(avgprice - Takeprofit * Point, Digits);
   
   for (int i=OrdersTotal()-1; i >= 0; i--)
   {
      if (OrderSelect(i,SELECT_BY_POS)) 
      {
         if (OrderMagicNumber() == Magic)
         {
            if (!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), TP, OrderExpiration(), clrAliceBlue)) printf("Error: ", GetLastError());
         }
      }
   }       
}

[/code]

1. Какие ошибки выдает в Журнале? Надо с этого начинать следствие. 

2. Запишите на обоях красным фломастером - Digits, Point и т.д. использовать более нельзя!!!!!!!!!!!!!! 

Вероятно TP оказывается меньше Ask для BUY и наоборот для SELL. А если у счета есть уровни MODE_STOPLEVEL, надо и их учитывать. Распечатаете значения через Print.

 
Alexey Volchanskiy:

2. Запишите на обоях красным фломастером - Digits, Point и т.д. использовать более нельзя!!!!!!!!!!!!!! 

Почему нельзя?

Он не проверяет, а надо ли модифицировать TP, может он уже там (на этой же цене, на которую хочет изменить) и стоит.

 
Oksana Berenko:
Перед тем как посылать на модификацию, проверьте, скорее всего, там TP уже и стоит и модифицировать нечего. Обычно так и возникает error 1
Ну и что, что уже стоит? У рыночных имеем право изменить SL & TP.
 
Oksana Berenko:

Почему нельзя?

Он не проверяет, а надо ли модифицировать TP, может он уже там и стоит.

Digit, Point are depricated. Эти переменные терминала использовались в "старом" MQL. Сейчас лучше всего использовать функции а-ля Digits().

 
Alexey Volchanskiy:
Ну и что, что уже стоит? У рыночных имеем право изменить SL & TP.
Когда TP= 1,0665  и посылаешь ему изменить на такой же, на 1,0665, то приходит error 1 (Нет ошибки, но результат неизвестен)!
 
Alexey Volchanskiy:

Digit, Point are depricated. Эти переменные терминала использовались в "старом" MQL. Сейчас лучше всего использовать функции а-ля Digits().

Странно, но в документации об этом ни слова https://docs.mql4.com/ru/predefined/pointvar

я про mql4

double Point - Документация на MQL4
  • docs.mql4.com
double Point - Документация на MQL4
 
Oksana Berenko:

Странно, но в документации об этом ни слова https://docs.mql4.com/ru/predefined/pointvar

я про mql4

На сайте дока устарела. Сейчас надо или через функцию Point() или через "новую" переменную http://docs.mql4.com/ru/predefined/_point

Это если компилировать с #property strict 

 
Alexey Volchanskiy:

На сайте дока устарела. Сейчас надо или через функцию Point() или через "новую" переменную http://docs.mql4.com/ru/predefined/_point

Это если компилировать с #property strict 

И что не работает?

Мне кажется у тебя один раз были проблемы с ним и теперь всёпропало. 

 
if (OrderMagicNumber() == Magic)
         {

           if(NormalizeDouble(TP,Digits)!=NormalizeDouble(OrderTakeProfit(),Digits)) 

            if (!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), NormalizeDouble(TP,Digits), OrderExpiration(), clrAliceBlue)) printf("Error: ", GetLastError());
         }