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

 
Anton Zverev:

iCustom+IndicatorRelease. Плодить сложные сущности на ровном месте - наверное, это не костыльное решение. О вкусах не спорят. Вопрос в том, сколько такой костыль на множестве агентов будет выжирать ресурсов впустую.

Ну почти все круто в пятерке. Скорость на высоте. А тут, извините, какая-то полная волосатость, где не ожидаешь.

Зачем делать релиз индикатору?

Пусть на каждый новый тик посылает чарт-евент тестируемому эксперту.

Создание индикатора на каждом тике с последующим релизом - вот где растрата ресурсов впустую

 
Anton Zverev:

Василий упомянул, что на ФОРТС (не в тестере) работает механизм через подписку и BookEvent. Тем самым вообще избавляя от привязки советника к какому-либо графику.

В тестере BookEvent пока не реализован
 
Slawa:

Зачем делать релиз индикатору?

Пусть на каждый новый тик посылает чарт-евент тестируемому эксперту.

Создание индикатора на каждом тике с последующим релизом - вот где растрата ресурсов впустую

Плохо изъясняюсь, вот Вы и не поняли. Тут подробно https://www.mql5.com/ru/code/280

И сколько это решение выжирает ресурсов ради реализации такой простой вещи?! 

Мультивалютный обработчик событий OnTick(string symbol)
Мультивалютный обработчик событий OnTick(string symbol)
  • голосов: 27
  • 2011.02.01
  • Konstantin Gruzdev
  • www.mql5.com
Упрощенная реализация полноценного мультивалютного режима в MetaTrader 5. Нет необходимости вникать в то, как это работает. Минимум простых настроек. Максимум удобства для пользователей. Работает в тестере.
 
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.

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