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

[Удален]  
Slawa:
В тестере BookEvent пока не реализован
Так а толку то в нем в тестере, если он на форексе не пашет даже не в тестере? Василий сделал, по-моему, здравое предложение выше.
[Удален]  
Slawa:

И цикл организовывать не на секунду, а на чуть меньше часа. С обязательной проверкой IsStopped()

Sleep, кстати, обязателен. Иначе завесите тестер. Ну и ресурсы у системы будут отжираться при обычной работе советника

Даже не протестировать Ваш вариант

2016.04.26 19:39:05     Core 1  2016.04.25 00:16:48   infinite Sleep loop detected while testing
2016.04.26 19:39:05     Core 1  EURUSD : 2016.04.25 00:00 - 2016.04.26 00:00  1439 minute bars absent in total while real ticks present
2016.04.26 19:39:05     Core 1  EURUSD : real ticks begin from 2016.01.04 00:00:00
2016.04.26 19:39:05     Core 1    SleepPause=10
2016.04.26 19:39:05     Core 1    TimerInterval=1000

Код

sinput uint TimerInterval = 1000; // Через сколько секунд вызывать OnTimer
sinput uint SleepPause = 10;      // На сколько милисекунд делать Sleep
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnInit()
  {
   EventSetTimer(TimerInterval);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   const uint Amount=TimerInterval*1000/SleepPause;

   for(uint i=0;(i<Amount) && (!IsStopped()); i++)
      Sleep(SleepPause);
  }
//+------------------------------------------------------------------+
 
Anton Zverev:

Даже не протестировать Ваш вариант

Код

И что Вы тут тестировали?
[Удален]  
Slawa:
И что Вы тут тестировали?
Запускаю в тестере тот код. И получаю зависание с сообщением infinite Sleep loop detected while testing.
 
Anton Zverev:
Запускаю в тестере тот код. И получаю зависание с сообщением infinite Sleep loop detected while testing.

Много раз уже говорили: "Читайте документацию"

Не Вы ли отвечали: "Я прочитал всю документацию. Несколько раз"?

А вот это читали? Похоже, что нет...

Если в результате выполнения функции Sleep() текущее время в тестере вышло за  конец периода тестирования, то  будет получена ошибка "бесконечный цикл в Sleep". При получение такой ошибки результаты тестирования не отбрасываются,  все вычисления производятся в полном объеме (количество сделок, просадка и т.д.) и результаты данного тестирования передаются терминалу.

[Удален]  
Slawa:

А вот это читали?

Читал и очень внимательно. Дело в том, что если Sleep используется в OnTimer, то невозможно определить, когда выходишь за интервал тестирования. IsStopped (в коде прописал сразу из-за чтения документации) не срабатывает в момент выхода. Чей косяк?
[Удален]  
Slawa:

А по поводу пропуска тиков в цикле в OnTimer необходимы воспроизводимые доказательства. Они у Вас есть?

Вы об этом в документации написали!

В тестере же вызовы Sleep() не задерживают процесс тестирования. При вызове Sleep() "проигрываются" сгенерированные тики в пределах указанной задержки, в результате чего могут сработать отложенные ордера, стопы и т.д. После вызова Sleep() cмоделированное  в тестере время увеличивается на интервал, указанный в параметре функции Sleep.

Вот и не получится на каждом из этих тиков вызвать советник. Принимается доказательство? 

 
Anton Zverev:

Вы об этом в документации написали!

Вот и не получится на каждом из этих тиков вызвать советник. Принимается доказательство? 

Вы это серьёзно?

Проигрался тик, и Вы его тут же можете взять ещё горяченьким при помощи запроса SymbolInfoTick. Я сразу про эту возможность написал. Если хотите, то можете делать Sleep(1), а не Sleep(10)

 
Anton Zverev:
Читал и очень внимательно. Дело в том, что если Sleep используется в OnTimer, то невозможно определить, когда выходишь за интервал тестирования. IsStopped (в коде прописал сразу из-за чтения документации) не срабатывает в момент выхода. Чей косяк?

А зачем определять момент выхода за пределы интервала тестирования? За Вас это определит тестер и прекратит тестирование. Вы точно читали приведённую мной цитату?

[Удален]  
Slawa:

А зачем определять момент выхода за пределы интервала тестирования? За Вас это определит тестер и прекратит тестирование. Вы точно читали приведённую мной цитату?

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

IsStopped() во время выхода за интервал в OnTimer не становится true. Поэтому и облом.