Скачать MetaTrader 5

RefreshRates() внутри OnTick()

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Andrey Vasiliev
11303
Andrey Vasiliev  

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

Если это невозможно, то как проще всего реализовать обработку ошибок торговых операций с проверкой котировок на обновление?

Yedelkin
4532
Yedelkin  
MoneyJinn:

Подскажите, можно ли реализовать аналог RefreshRates() и дождаться обновления цен внутри OnTick()?

А смысл? Функция SymbolInfoTick() всего лишь возвращает текущие цены  для указанного символа в переменной типа MqlTick. Вам нужно, чтобы текущие цены отображались именно  в переменной типа MqlTick? Для иных случаев следует учитывать, что событие NewTick генерируется при поступлении нового тика по символу, к графику которого прикреплен эксперт.
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура для получения текущих цен - Документация по MQL5
Rashid Umarov
Админ
13326
Rashid Umarov  
Andrey Vasiliev
11303
Andrey Vasiliev  
Yedelkin:
А смысл? Функция SymbolInfoTick() всего лишь возвращает текущие цены  для указанного символа в переменной типа MqlTick. Вам нужно, чтобы текущие цены отображались именно  в переменной типа MqlTick? Для иных случаев следует учитывать, что событие NewTick генерируется при поступлении нового тика по символу, к графику которого прикреплен эксперт.

Пока все выглядит так, что до завершения обработки последнего события OnTick() сколько бы она ни продолжалась, терминал в режиме тестирования котировки не обновляет

и новые значения котировок с помощью структуры MqlTick и функции SymbolInfoTick(), а также SymbolInfoDouble() не получить.

Как быть, если до завершения OnTick() при обработке ошибок необходимо дождаться новых новых цен и использовать их?

Вешать эксперт на график стороннего символа? 

Andrey Vasiliev
11303
Andrey Vasiliev  
Rosh:
Вы читали статью Основы тестирования в MetaTrader 5?

К сожалению, нужной информации я там не нашел.

Из документации:

Если при поступлении новой котировки выполнялась функция OnTick, запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником, так как соответствующее событие не будет поставлено в очередь событий эксперта.

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

Котировки игнорируются - это понятно. Но почему они остаются недоступными - непонятно совсем. 

Rashid Umarov
Админ
13326
Rashid Umarov  

Что подразумевается под этим?

MoneyJinn:

Подскажите, можно ли реализовать аналог RefreshRates() и дождаться обновления цен внутри OnTick()?

Andrey Vasiliev
11303
Andrey Vasiliev  
Rosh:

Что подразумевается под этим?

Имеется в виду обновление и получение самых свежих котировок по инструменту.

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

Rashid Umarov
Админ
13326
Rashid Umarov  
MoneyJinn:

Имеется в виду обновление и получение самых свежих котировок по инструменту.

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

Давайте еще раз - что означает "обновление и получение самых свежих котировок по инструменту", учитывая что OnTick() всегда вызывается по факту обновления котировок. Как в тестере могут появиться котировки, "появившиеся уже после начала обработки события NewTick" ?
Andrey Vasiliev
11303
Andrey Vasiliev  
Rosh:
Давайте еще раз - что означает "обновление и получение самых свежих котировок по инструменту", учитывая что OnTick() всегда вызывается по факту обновления котировок. Как в тестере могут появиться котировки, "появившиеся уже после начала обработки события NewTick" ?

OnTick() вызывается по факту обновления котировок.

OnTick() может обрабатываться сколько угодно долго.

Необходимо получить новые котировки которые появляются во время обработки OnTick(). 

 

Если это невозможно сделать, то как вообще обрабатывать ошибки типа: "10020 - Цены изменились", если новую цену получить нельзя?

Может это косяк только тестера и в реале котировки получить все-таки можно?

Rashid Umarov
Админ
13326
Rashid Umarov  

Запрашивайте Информацию об инструменте, но отдавайте себе отчет в том, что тестер проигрывает историю по заранее детерминированным законам. Можете еще попробовать тестировать в режиме произвольной задержки исполнения торговых приказов:

Произвольная задержка

Режим произвольных задержек предусмотрен для тестирования экспертов в условиях, приближенных к реальным. С момента отсылки приказа и до его исполнения цена может измениться. В зависимости от отклонения, установленного в ордере, может произойти его исполнение по текущей цене (если она в пределах отклонения) или реквотирование. Тестирование в данном режиме позволит экспертописателю правильно запрограммировать обработку подобных ситуаций.

Имитация задержки осуществляется для всех торговых запросов, отсылаемых из терминала (выставление ордеров, изменение стоп-уровней, и т.д.). Задержка исполнения осуществляется по следующему принципу: случайным образом выбирается число от 0 до 9, и на такое число секунд осуществляется задержка; если выбранное число равно 9, то случайным образом выбирается еще одно число из такого же диапазона и прибавляется к первому. Таким образом, вероятность задержки исполнения на 0-8 секунд составляет 90%, а вероятность задержки на 9-18 секунд составляет 10%.

Andrey Vasiliev
11303
Andrey Vasiliev  

Как уже было отмечено ранее, информация в SymbolInfoDouble() также не обновляется!

Терминал не заносит данные о котировках на текущий момент времени в информацию об инструменте, если по этому инструменту не завершена обработка последнего события NewTick.

Получается, что это тупик и нормальную обработку ошибок в MT5 не реализовать? 

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий