Пауза в тестере

Olena Zelenska  

У меня сверхзадача, для себя, сделать в тестере стратегий МТ4, да и МТ5 не помешало бы, паузу

но

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

Просто мне нужен полный реализм времени, чтоб свеча 1 минута была по времени 1 минута, а не пролетала за 3сек или наоборот тикала 5 минут.

Регулятор скорости тестера здесь очень грубо регулирует скорость.

Подскажите как из советника, на время поставить тестер на паузу и потом пустить опять.

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

Особенности работы программ в тестере стратегий - Программы MQL4 - Справочник MQL4
Особенности работы программ в тестере стратегий - Программы MQL4 - Справочник MQL4
  • docs.mql4.com
Существуют ограничения работы некоторых функций в тестере стратегий клиентского терминала, их вызов приведет к ошибке 4059 (Функция не разрешена в тестовом режиме). Функция Sleep() Функции Print() и PrintFormat() Для увеличения быстродействия при оптимизации параметров советника функции Print() и PrintFormat() не выполняются. Исключением...
Stanislav Korotky  

Пишите в сервис-деск - для МТ5 могут сделать (когда-нибудь, может быть), МТ4 уже закрыт для изменений. В общем-то в тестере есть кнопка паузы. Чем она не устраивает? Если бы была более подробно описана прикладная проблема, возможно удалось бы найти другое решение.

В обоих терминалах можно использовать так называемые кликеры, чтобы нажимать кнопки в интерфейсе тестера по условиям. Для МТ4 я давно писал DLL BreakPoint, там можно было на паузу поставить тестер вызовом функции из MQL, но с тех пор терминал сильно изменился и нужно вносить в сишные исходники правки - иначе работает не совсем корректно. Если устраивает, что по выбранным условиям (например, при смене дня при открытии очередного бара) вылазит модальный диалог с запросом, продолжать ли искать контролы тестера (при этом выполнение останавливается, интерфейс терминала фактически недоступен), то можно пользоваться как есть.

fxsaber  
https://www.mql5.com/ru/docs/common/debugbreak
Документация по MQL5: Общие функции / DebugBreak
Документация по MQL5: Общие функции / DebugBreak
  • www.mql5.com
Прерывание выполнения mql5-программы происходит только в том случае, если программа запущена в режиме отладки. Функцию можно использовать для просмотра значений переменных и/или дальнейшего пошагового выполнения.
Olena Zelenska  

Попробую другими словами сказать о проблеме.

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

Запускаю свой советник в режиме визио и тестирую свою скальп-стратегию на истории, мне нужно ощущение реального времени в тестере,

чтобы 1 бар на ТФ 1 минута, был по реальному времени 60 секунд. Ползунок скорость не дает установить точного времени, 1 бар может пролететь за секунды, или длится на много больше минуты.

Мне надо синхронизировать 1 бар 1 минутного ТФ с реальным временем.

1 минута в тестере = 1 минуте в реале.

Georgiy Merts  

Что-то подобное когда-то делал... Надо поглядеть...

Поглядел - у меня это сделано через GetTickCount() - запрашиваем в цикле, пока не наберется нужное количество милисекунд.  В тестере это приводит к паузе.

По идее, можно исхитриться сделать "1 минуту в реале = 1 минуту в тестере" будет проблематично.

Но, смысла я в этом как-то не вижу - что толку-то тянуть минуты, если нет торговых действий или каких-то других изменений ? Если же они есть - гораздо разумнее поставить брейкпоинт в нужном месте.

Olena Zelenska  
George Merts:

Что-то подобное когда-то делал... Надо поглядеть...

Поглядел - у меня это сделано через GetTickCount() - запрашиваем в цикле, пока не наберется нужное количество милисекунд.  В тестере это приводит к паузе.

По идее, можно исхитриться сделать "1 минуту в реале = 1 минуту в тестере" будет проблематично.

Но, смысла я в этом как-то не вижу - что толку-то тянуть минуты, если нет торговых действий или каких-то других изменений ? Если же они есть - гораздо разумнее поставить брейкпоинт в нужном месте.

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


"GetTickCount() - запрашиваем в цикле". 

Бедный тестер будет кружить по кругу и греть процессор. А более изящного решения нет?

Georgiy Merts  
Olena Zelenska:

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


"GetTickCount() - запрашиваем в цикле". 

Бедный тестер будет кружить по кругу и греть процессор. А более изящного решения нет?

Вы за процессор волнуетесь ?

А насчет "чувств, эмоций и интуиции" - это лучше пойти в онлайн казино. А в трейдинге это, боюсь, прямой путь к сливу и неудачам.

Olena Zelenska  

"А насчет "чувств, эмоций и интуиции" - это лучше пойти в онлайн казино. А в трейдинге это, боюсь, прямой путь к сливу и неудачам. "

Спасибо за предупреждение...  но это тема для другой дискуссии.


"Вы за процессор волнуетесь ? " - ну согласитесь, нагрузить процессор холостым циклом, это же Моветон.

Taras Slobodyanik  
Olena Zelenska:

"Вы за процессор волнуетесь ? " - ну согласитесь, нагрузить процессор холостым циклом, это же Моветон.

теоретически, можно регулировать частоту тактового генератора)
будет "тёплый ламповый звук"

Olena Zelenska  
Taras Slobodyanik:

теоретически, можно регулировать частоту тактового генератора)
будет "тёплый ламповый звук"

Кстати это тоже вариант, частотой процессора регулировать скорость тестера )

Забавно, не правда ли...

Stanislav Korotky  
Olena Zelenska:

Попробую другими словами сказать о проблеме.

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

Запускаю свой советник в режиме визио и тестирую свою скальп-стратегию на истории, мне нужно ощущение реального времени в тестере,

чтобы 1 бар на ТФ 1 минута, был по реальному времени 60 секунд. Ползунок скорость не дает установить точного времени, 1 бар может пролететь за секунды, или длится на много больше минуты.

Мне надо синхронизировать 1 бар 1 минутного ТФ с реальным временем.

1 минута в тестере = 1 минуте в реале.

Непосредственно в тестере (без помощи MQ) вряд ли удастся сделать.

Как вариант, можно посмотреть на эту статью, где один товарищ фактически сделал аналог тестера и сам там реализовал генерацию тиков - так что управление временем доступно. Но потребуется допилить.