Вопрос о работе в тестере функции CloseOrder()

 

Сегодня столкнулся с такой ситуацией:

написал я нового эксперта. Гоняю в тестере.

Иногда при частичном закрытии ордера функцией OrderClose()

тестер возвращает ошибку 4059 - ERR_FUNC_NOT_ALLOWED_IN_TESTING 4059  - функция не разрешена в тестовом режиме.

А иногда частичное закрытие проходит. 

С чем это может быть связано?

 
Не мультивалютник случаем?
 
повставляйте после каждой третьей строчки кода (а где есть сомнения и после каждой) вывод ошибки (если она есть). Чтоб точно определить место и время её появления. А потом нам расскажите этот ньюанс. Очень интересно узнать...
 
Vinin >>:
Не мультивалютник случаем?

Нет, создавался для торговле на одном инструменте.

 
sergeev >>:
повставляйте после каждой третьей строчки кода (а где есть сомнения и после каждой) вывод ошибки (если она есть). Чтоб точно определить место и время её появления. А потом нам расскажите этот ньюанс. Очень интересно узнать...
//Вот кусок этого кода:

int i, n=OrdersHistoryTotal();     
     if (n==0) return(0);
     if (OrderSelect(n-1,SELECT_BY_POS,MODE_HISTORY) && OrderMagicNumber()==Magic 
       && OrderClosePrice()==OrderTakeProfit() && OrderOpenTime()<iTime(NULL,PERIOD_D1,0))
       {
         double NewLot = NormalizeDouble(OrderLots()*PercClose/100,2);
         int OT=OrderType(); 
         n=OrdersTotal();
         if (n==0) return(0);
         for (i=0; i<n-1; i++)  // закроем частично первый убыточный ордер
           if (OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderProfit()<0)
           {
             if (OT==OP_BUY && OrderType()==OP_SELL && OrderLots()>NewLot) 
             {
               OrderClose(OrderTicket(),NewLot,Ask,Slippage,Red);
               Alert("SELL partional close");
             }  
             if (OT==OP_SELL && OrderType()==OP_BUY && OrderLots()>NewLot) 
             {
               OrderClose(OrderTicket(),NewLot,Bid,Slippage,Red);
               Alert("BUY partional close");
             }  
             if (PrintError(200)==0) break;
           }     
       }        
 
т.е. функция PrintError() как раз иногда выдает ошибку 4059. К функции Alert() она ведь не может относиться, т.к. тестер записывает сообщения Alert в лог. А ближайшая предыдущая функция к Alert - OrderClose()
 
MikeZTN >>:

тестер возвращает ошибку 4059 - ERR_FUNC_NOT_ALLOWED_IN_TESTING 4059 - функция не разрешена в тестовом режиме.

Может новый объем больше старого? Т.е. в результате получится сделка с отрицательным объемом.
 
TheXpert >>:
Может новый объем больше старого? Т.е. в результате получится сделка с отрицательным объемом.

Послеотладки выяснил, что передавался нулевой объем. СТранно, что не генерировалось исключение "Неправильный объем".

 

4059

Балин... Дурная ошибка. Пытаюсь тестить советник анализирующий несколько инструментов. Используются Open[0], High[i], Low[i], Open[i] (где i >0), MarketInfo ("Символ", MODE_POINT). Все, никакого "криминала", а в результате ничего не работает. Зачем это исключение? И когда оно появилось? (Раньше вроде работало...)

 
Ошибку вызывает MarketInfo ("Символ", MODE_POINT), где символ отличен от тестируемого, при этом функция выдает правильное значение, пришлось просто лишнюю обработку для тестера слелать.... Если функция работает зачем тогда пугать "меня") такими ошибками?:)
Причина обращения: