Что не так с OrderModify()

 

Здравствуйте. Не могу понять, почему выходит ошибка №1 от OrderModify()? Сами ордера модифицируются.  И еще...В тестере эта ошибка выходит по несколько раз в секунду тем самым раздувая файл журнала. Будет ли происходить тоже самое на реальном счете?

 for ( int j = OrdersTotal() - 1; j >= 0; j -- )
    {
    
        
        if(OrderSelect(j,SELECT_BY_POS))
      { 
    
    
    if(OrderType()==OP_BUY) 
    { 
       
  
     if(OrderStopLoss()<OrderOpenPrice()+delta*Point)
      {
        if(Bid-OrderOpenPrice()>=OrderOpenPrice()-OrderStopLoss())
           { 
            OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),Digits), NormalizeDouble(OrderOpenPrice()+delta*Point,Digits),OrderTakeProfit(),0,clrAqua);
            
           }
      }
    } 
    
     if(OrderType()==OP_SELL) 
       {  
        if(OrderStopLoss()>OrderOpenPrice()-delta*Point)
            {
           
            if(OrderOpenPrice()-Ask>=OrderStopLoss()-OrderOpenPrice())
               { 
               
                 OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),Digits), NormalizeDouble(OrderOpenPrice()-delta*Point,Digits),OrderTakeProfit(),0,clrAqua);
                
               }
            }   
       
       }
 
Ermak1243:

Здравствуйте. Не могу понять, почему выходит ошибка №1 от OrderModify()? Сами ордера модифицируются.  И еще...В тестере эта ошибка выходит по несколько раз в секунду тем самым раздувая файл журнала. Будет ли происходить тоже самое на реальном счете?

На реале вам могут отключить автоторговлю за слишком частые торговые приказы.

Стоп уже стоит, а вы пытаетесь его воткнуть по той же цене. Отсюда и ошибка, которая кроется в операторе

if(OrderStopLoss()>OrderOpenPrice()-delta*Point)

Можно исправить так

if(OrderStopLoss()>OrderOpenPrice()-delta*Point + 0.1*Point )
 
Mislaid:

На реале вам могут отключить автоторговлю за слишком частые торговые приказы.

Стоп уже стоит, а вы пытаетесь его воткнуть по той же цене. Отсюда и ошибка, которая кроется в операторе

Можно исправить так



Ошибки №1 уже нет, но теперь выходит ошибка №130...Как быть?
 
Ermak1243:
Ошибки №1 уже нет, но теперь выходит ошибка №130...Как быть?
Я вам уже писал "... нужно проверить допустимость уровня выставляемого стоплосса."
 
Mislaid:
Я вам уже писал "... нужно проверить допустимость уровня выставляемого стоплосса."
Упустил из виду)
 
Ermak1243:
Упустил из виду)
Вы имели ввиду так:      "if(!OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),Digits), NormalizeDouble(OrderOpenPrice()-delta*Point,Digits),OrderTakeProfit(),0,clrAqua)) break;" ?    
 
Ermak1243:
Вы имели ввиду так:      "if(!OrderModify(OrderTicket(),NormalizeDouble(OrderOpenPrice(),Digits), NormalizeDouble(OrderOpenPrice()-delta*Point,Digits),OrderTakeProfit(),0,clrAqua)) break;" ?    

Совсем не так. Уровень стопа должен быть выше Ask, увеличенного, как минимум, на величину спреда. Конкретная величина зависит от ДЦ. В идеале, ее можно узнать с помощью MarketInfo(), но, не всегда.

Вообще, плохая идея ставить стоп близко к Ask.

 
Mislaid:

Совсем не так. Уровень стопа должен быть выше Ask, увеличенного, как минимум, на величину спреда. Конкретная величина зависит от ДЦ. В идеале, ее можно узнать с помощью MarketInfo(), но, не всегда.

Вообще, плохая идея ставить стоп близко к Ask.

Сделал как Вы сказали. Все работает!) Спасибо)