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

 
joo:
возможно само присутствие Sleep (по сравнению с его отсутствием) в коде как то сказывается на общем времени выполнения, но то, что Sleep не считается в тестере - это точно.
Ну, здесь я не спец... Полминуты задержки при обработке функции Sleep() с отрицательным аргументом и потеря 17 дней тестирования - вот факты.
 

Код вешает терминал:

   MqlRates s1[];

   int count=TerminalInfoInteger(TERMINAL_MAXBARS);
   int s1_copied=CopyRates(Symbol(),Period(),0,count,s1);
   if(s1_copied<=0)
      Print("Ошибка копирования ценовых данных ",GetLastError());
   else Print("Скопировано ",ArraySize(s1)," баров");

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

   ArrayFree(s1);

 В чем причина?

 
Graff:

Код вешает терминал:

 В чем причина?

Для начала:
 int count=TerminalInfoInteger(TERMINAL_MAXBARS);
 Print("count=",count);

В настройках терминала не Unlim стоит?

 
uncleVic:
Для начала:

В настройках терминала не Unlim стоит?


макс баров стоит 5000. это значение можно уменьшить?
 
Graff:
макс баров стоит 5000. это значение можно уменьшить?

По-моему, меньше нельзя (не уверен).

Ну а Print(count) что выдаёт?

 
uncleVic:

По-моему, меньше нельзя (не уверен).

Ну а Print(count) что выдаёт?

2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) Скопировано 5000 баров
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

в коммент -1 

запустил на другом инструменте - не завсис, но в коммент -1  вывел

ПРАВКА: завис через несколько сек. Код запукскаю из int OnInit()

 
joo:
ага, а в тестере работает, потому что в нем Sleep игнорируется.

В тестере Sleep полностью и достаточно точно эмулируется.

В примере из-за арифметического переполнения при работе с целочисленными значениями получилось как раз ожидание в 17.5 дней. Тестер именно столько и ждал.

То есть, никаких ошибок тестера или среды исполнения MQL5 нет, а есть явная ошибка программиста.

 

Renat:

То есть, никаких ошибок тестера или среды исполнения MQL5 нет, а есть явная ошибка программиста.

Это совершенно понятно.

Renat:

В тестере Sleep полностью и достаточно точно эмулируется.

В примере из-за арифметического переполнения при работе с целочисленными значениями получилось как раз ожидание в 17.5 дней. Тестер именно столько и ждал.

Ммм, вона оно как. А я ошибочно считал, что Sleep просто игнорируется.

Выходит, что если я в эксперте в режиме тестирования укажу в Sleep (3 месяца) , к примеру, то тестер просто перемотает историю вперед на 3 месяца? - это здорово.

 
Да, перемотает. Только предел у функции 49 дней, пока не переполнится интовый счетчик миллисекунд.

Во время ожидания тестер продолжает полностью эмулировать торговое окружение, включая всю отработку ранее выставленных ордеров. Тестер в МТ5 очень детальный.
 
Graff:
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) Скопировано 5000 баров
2011.06.30 21:41:29 MultiInstruments3 (EURUSD,M5) count=5000

в коммент -1 

запустил на другом инструменте - не завсис, но в коммент -1  вывел

ПРАВКА: завис через несколько сек. Код запукскаю из int OnInit()

Да. Слона-то мы и не приметили.

Что-то у меня сильные подозрения вызывает во эта строчка:

   Comment(ArrayMaximum(s1,0,WHOLE_ARRAY));

ArrayMaximum

Ищет в одномерном числовом массиве максимальный элемент.

int  ArrayMaximum(
   double  array[],               // массив для поиска
   int     start=0                // с какого индекса начинаем поиск
   int     count=WHOLE_ARRAY,     // количество проверяемых
   );


а в нашем случае:

   MqlRates s1[];

Мне кажется компилятор не должен это пропускать. У Вас что? Нет даже предупреждения? Если нет, ставьте заявку в Сервисдеск. Ок?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
Причина обращения: