Скачать MetaTrader 5

Ошибка OrderModify ERROR 1 при изменения уровня стопа функцией трейлингстопа! Как исправить?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Павел
1000
Павел  
Советник выдаёт ошибку OrderModify ERROR 1 , но не всегда а только иногда. Источник ошибки - скорее всего трал, как ошибка возникает при попытке изменить уровня стопа. Сначала я пользовался этим тралом:
void Trailingstoplossi2 ()
{
    int cnt,  total2;
    total2=OrdersTotal();
    for(cnt=0;cnt<total2;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if( OrderSymbol()==Symbol()&& OrderMagicNumber()==MAGIC) 
        {
         if(OrderType()==OP_BUY)   
           {
            if(TrailingStop>0)  
              { 
              if((Bid-OrderOpenPrice()>Point*Pribil_2))
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop2 )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop2,Digits),OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              
              if((Bid-OrderOpenPrice()>Point*Pribil_1))
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop1 )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop1,Digits),OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
                              
               if((Bid-OrderOpenPrice()>Point*TrailingStop)||traling_ybitok==true)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {   
                if((OrderOpenPrice()-Ask)>(Point*Pribil_2) )
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop2)) )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop2,Digits),OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 } 
                           
               if((OrderOpenPrice()-Ask)>(Point*Pribil_1) )
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop1)) )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop1,Digits),OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }             
              
                            
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop) ||traling_ybitok==true)
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
    }
   return(0);
}
 Потом поставил обычный трал, вот его код:
void Trailingstoplossi ()
{
    
    int cnt,  total2;
    total2=OrdersTotal();
    for(cnt=0;cnt<total2;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if( OrderSymbol()==Symbol()&& OrderMagicNumber()==MAGIC) 
        {
         if(OrderType()==OP_BUY)   
           {
            if(TrailingStop>0)  
              {     
               RefreshRates();            
               if((Bid-OrderOpenPrice()>Point*TrailingStop))
                 {
                  if((OrderStopLoss()<Bid-Point*TrailingStop ))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else 
           {
            if(TrailingStop>0)  
              {  
               RefreshRates();               
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) )
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
    }
   return(0);
}
Но даже после этого ошибка всё равно остаётся и появляется при попытке изменить значение стоплосса.
Помогите найти ошибку и исправить код.
rsi
527
rsi  
Рецепт простой: вместо
if((OrderStopLoss()>... ) писать if((OrderStopLoss()-1.0*Point)>... ),
а вместо
if((OrderStopLoss()<... ) писать if((OrderStopLoss()+1.0*Point<... )
Вместо 1.0* можно, наверное, и 0.5*  и 5.0* - на любителя.
Павел
1000
Павел  
Щас проверю! Если так то это просто клёво! Я понял Вашу идею... Сенкс
Павел
1000
Павел  
0.5 нельзя, можно только 1 и больше.
Я протестировал и результат 12 ошибок 2007.09.19 19:08:52 2007.09.14 14:23 ххх GBPJPY,M15: OrderModify error 1
Этот способ не работает....
rsi
527
rsi  
meta-trader2007 писал (а):
0.5 нельзя, можно только 1 и больше.
Я протестировал и результат 12 ошибок 2007.09.19 19:08:52 2007.09.14 14:23 ххх GBPJPY,M15: OrderModify error 1
Этот способ не работает....
У меня работает. Посмотрите знаки (была опечатка в первом моем посте - исправил).
Павел
1000
Павел  
Написал if(OrderStopLoss()+1.0*Point < Bid-Point*TrailingStop ) и if(OrderStopLoss()-1.0*Point >(Ask+Point*TrailingStop) ошибка всё равно есть, а у Вас было такое , исправили так и нормально стало?  У меня стало 11 ошибок :)
Где спецы по MQL4 ??? Помогите!
Павел
1000
Павел  
Когда установил 15 вместо 1.0 осталось 6 ошибок!
Павел
1000
Павел  
При 50 две ошибки щас попробую с числом 80. а потом если не помжет то и сто напишу! :)
И почему с ошибками низзя?
rsi
527
rsi  
Не знаю в чём может быть дело. Можете посмотреть мой прошлогодний эксперт. Ошибок не выдаёт. Попробуйте явно вывести в Print() значения TrailingStop,  TrailingStop1, TrailingStop2 перед оператором модификации и посмотрите в журнале - может даст пищу для размышлений (в приведённом фрагменте они не проверяются).
Павел
1000
Павел  
Блин при 80 четыре ошибки!  У когонить есть готовая функция с тралом по шаговым? Чтоб тралить не по пунктам а шагом допустим в 20 пипсов? Поделитесь!
Кстати стандартный советники из терминал МАКДСАМПЛ тож даёт ошибку эту :( в MetaQuotes программисты с кривыми руками  работают!
Почему трал даёт эту ошибку?
Павел
1000
Павел  
Посмотрел. Там трейлингстоп замудрённый ....
к тому же он не расчитан на большой тайм-фрейм... :(
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий