Ошибки, баги, вопросы - страница 119

 
Где-то на форуме прочитал, что комментарии при тестировании в журнал не пишутся (в целях экономии дискового пространства). В этой связи вопрос: как же тогда отладить программу в тестере? Пробовал printf, PrintFormat - ничего в тестере не работает, даже Alert попробовал.
 
Scriptong:
Где-то на форуме прочитал, что комментарии при тестировании в журнал не пишутся (в целях экономии дискового пространства). В этой связи вопрос: как же тогда отладить программу в тестере? Пробовал printf, PrintFormat - ничего в тестере не работает, даже Alert попробовал.
Смотрите логи агентов тестирования - туда пишется все, но только у локальных агентов. Удаленные агенты не пишут в логи вывод Print() и тому подобное из соображений сохранения инфомации.
Документация по MQL5: Общие функции / Print
Документация по MQL5: Общие функции / Print
  • www.mql5.com
Общие функции / Print - Документация по MQL5
 

Проверил. У меня агент локальный (по крайне мере числится в Local). После запуска эксперта в режиме "Каждый тик" содержимое закладки "Журнал" совпадает с содержимым файла лога агента (файлы эксперта и лог прикреплены). 

Да, забыл. Период тестирования "Last Month".

Файлы:
test.mq5  2 kb
 

В Вашем логе написано "debug version of 'test.ex5', please recompile it"

Это означает, что EX5, предназначенные для отладки (при нажатии F5 в эдиторе получается EX5 с отладочной информацией), не могут быть запущены в тестере.

Мы сделаем автоматическую перекомпиляцию таких экспертов. А пока вручную перекомпилируйте своего эксперта. 

 
alexvd:
А можете привести полный код?

А я наверно весь и привел, уж больше и сообразить не могу в чем причина...

Попробую описать ситуацию более подробно.

Существует простенький класс "CMqlTimer", в задачу этого класса входит отслеживание момента смены различных временных интервалов: час, день, неделя, месяц, год.

Выполняется все до примитива просто, к примеру, если минуты равны 0 значит наступил "новый час"; если номер дня недели не соответствует записанному в переменную произошла смена суток ("00:00:00" по времени сервера). Ну и так далее.

Анализ происходит при срабатывании таймера, с интервалом в 1 секунду, работа ведется в CMqlTimer::OnTimer(). Если сменился определенный временной интервал должна выполниться определенная функция. К примеру, если наступили "новые" сутки должна выполниться функция CMqlTimer::OnRolloverDay().


Так вот, если все остальное убрать и оставить только суть OnRolloverDay() получится примерно следующее:

//Function CMqlTimer.OnRolloverDay
bool CMqlTimer::OnRolloverDay()
//Дневной ролловер
{
//----------------------------------------------------------------------------//
//Work variables
string MessageText; //Text for message
int    UserEventID; //Identifier of the user event  

bool Result; //Returned importance
//----------------------------------------------------------------------------//

Result = true;

ResetLastError();

RolloverCountDay = RolloverCountDay+1;

UserEventID = CHARTEVENT_CUSTOM+15;
MessageText = StringFormat("Rollover Day (№ %d)",RolloverCountDay); //Можно просто "Rollover Day"
//We refer user event of the work chart
EventChartCustom(0,(ushort)UserEventID-CHARTEVENT_CUSTOM,0,0,MessageText);

//Checking for presence of the errors
  if(_LastError!=0)
  //В результате работы произошла ошибка
  {
  Result = false;  
  }
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

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

Выглядит это примерно так

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
{
//----------------------------------------------------------------------------//
//Work variables
//----------------------------------------------------------------------------//

//----------------------------------------------------------------------------//
//                          Processing user events                            //
//----------------------------------------------------------------------------//
  if(id>CHARTEVENT_CUSTOM)
  //User event is received
  {
  Expert.OnEvent(id,lparam,dparam,sparam);
  }
//----------------------------------------------------------------------------//  
}

Так вот, в режиме тестирования события не доходят до OnChartEvent, т.е. советник в режиме тестирования не может обработать событие отправленное при помощи EventChartCustom. Проверял при помощи отображения всех (всех подряд) событий в лог.

PS

самое интересное то что на демке все события доходят, а в тестере работать отказывается.

До 319 все работало и в тестере события успешно обрабатывались. Правда последний релиз где это работало сказать не могу...

 
stringo:

В Вашем логе написано "debug version of 'test.ex5', please recompile it"

Это означает, что EX5, предназначенные для отладки (при нажатии F5 в эдиторе получается EX5 с отладочной информацией), не могут быть запущены в тестере.

Мы сделаем автоматическую перекомпиляцию таких экспертов. А пока вручную перекомпилируйте своего эксперта. 

Спасибо. Не знал, что есть разница между файлами, получающимися при нажатии F5 и F7.
 
Interesting:

А я наверно весь и привел, уж больше и сообразить не могу в чем причина...

Попробую описать ситуацию более подробно.

...
Спасибо. Будем думать.
 

Не могу понять в чем дело, советник на тестере работает без ошибок и на тест машине организаторов тоже проходит без ошибок.

Запускаю на демо-счете, получаю ошибку при попытке открыть ордер:

2010.09.06 13:26:50    Trades    '101894' : failed instant buy 0.10 USDJPY at 84.179 [Unsupported filling mode]
2010.09.06 13:26:45    Trades    '101894' : failed instant buy 0.10 USDCAD at 1.03689 [Unsupported filling mode]
2010.09.06 13:26:39    Trades    '101894' : failed instant buy 0.10 USDJPY at 84.174 [Unsupported filling mode]
2010.09.06 13:26:34    Trades    '101894' : failed instant buy 0.10 USDCAD at 1.03685 [Unsupported filling mode]
2010.09.06 13:26:28    Trades    '101894' : failed instant buy 0.10 USDJPY at 84.174 [Unsupported filling mode]
2010.09.06 13:26:23    Trades    '101894' : failed instant buy 0.10 USDCAD at 1.03688 [Unsupported filling mode]
2010.09.06 13:26:18    Trades    '101894' : failed instant buy 0.10 USDJPY at 84.181 [Unsupported filling mode]

Запрос для SELL:

MqlTradeRequest request;
         request.action=TRADE_ACTION_DEAL;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price=SymbolInfoDouble(Symbol_[i], SYMBOL_BID);
         request.sl=0;
         request.tp=0;
         request.deviation=SymbolInfoInteger(Symbol_[i], SYMBOL_SPREAD)*2;
         request.type=ORDER_TYPE_SELL;
         request.type_filling=ORDER_FILLING_CANCEL

Запрос для BUY:

MqlTradeRequest request;
         request.action=TRADE_ACTION_DEAL;
         request.symbol=Symbol_[i];
         request.volume=volume_exe;
         request.price=SymbolInfoDouble(Symbol_[i], SYMBOL_ASK);
         request.sl=0;
         request.tp=0;
         request.deviation=SymbolInfoInteger(Symbol_[i], SYMBOL_SPREAD)*2;
         request.type=ORDER_TYPE_BUY;
         request.type_filling=ORDER_FILLING_CANCEL;

При этом OrderCheck ошибку не находит.


 

Заменил запрос  ORDER_FILLING_CANCEL на запрос ORDER_FILLING_AON, заработал эксперт.

Но проблема осталась, почему такая разница в работе тестера и сервера.


Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

Вот будет прикол, если на сервере чемпионата станет все наоборот.

Причина обращения: