
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Prival:
Редко, но бывают ситуации, когда котировки по одному инструменту замирают и надолго (видел такое в йеной). И если советник висит на этой паре то ты попал, если не перевел весь код в OnTime().
Lizar:
Такое событие можно получить при помощи TimeCuurent(), а вот что с ним дальше делать, как синронизировать - вопрос.
А причем тут TimeCuurent()?
Справка гласит:
В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это – время прихода последней котировки по любому символу, доступного в окне "Обзор рынка", то самое время, которое показано в заголовке этого окна.
Справка гласит:
В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это – время прихода последней котировки по любому символу, доступного в окне "Обзор рынка", то самое время, которое показано в заголовке этого окна.
Да это понятно. только если поместить ее в OnTime мы сможем обновлять время не чаще раза в минуту, а если в текущую OnTick() то рискуем пропустить тики по какой-то из пар (в мультах).
А что делать в блоке обработки это понятно (для мультов) - Получаем новое значение, сравниваем с имеющимся и делаем выводы был новый тик или нет.
Но вот скажите мне, нафига это делать в эксперте?
Справка гласит:
ошибка. вот что гласит справка https://www.mql5.com/ru/docs/basis/function/events
Событие NewTick генерируется только для экспертов при поступлении нового тика по символу, к графику которого прикреплен эксперт.
Еще раз. Мы говорим про советник который висит на каком-то символе. Он запускается по событию
void OnTick() {}
если находиться внутри этой функции, а тиков по этой паре уже более часа нет, то и ничего сделать в течении часа нельзя. Пока единственный выход, это делать в таймере, он запускается независимо от прихода тиков по инструменту.
Да это понятно. только если поместить ее в OnTime мы сможем обновлять время не чаще раза в минуту, а если в текущую OnTick() то рискуем пропустить тики по какой-то из пар (в мультах).
ошибка. вот что гласит справка https://www.mql5.com/ru/docs/basis/function/events
Еще раз. Мы говорим про советник который висит на каком-то символе. Он запускается по событию
void OnTick() {}
если находиться внутри этой функции, а тиков по этой паре уже более часа нет, то и ничего сделать в течении часа нельзя. Пока единственный выход, это делать в таймере, он запускается независимо от прихода тиков по инструменту.
Да, если действовать в рамках этого https://www.mql5.com/ru/docs/basis/function/events, то согласен, что наилучший вариант, как сейчас видится, это OnTime. Но это нас только спасет от зависимости поступления тиков. И не спасет от однопоточности: пока обрабатываем сигнал по одному инструменту, рискуем пропустить или запаздать с обработкой других. Особенно это актуально становится при условии "время обработки торговых заявок от 2 до 7 секунд" + реквоты.
А про TimeCuurent() вспомнил, потому что Interesting заговорил про тики в реальном времени по всем парам находящимся в обзоре рынка.
Очень интересная статья. Спасибо, что поделились всем этим.
Однако есть несколько замечаний:
Говоря об этой функции, вы говорите:
If you call this prototype function from one place, then we have what we need. But if we want to use this function, for example, again in another place in the same calculation loop, it will always return false, which means that there is no bar. And this will not always be true. Static variable in this case imposes an artificial limit on the number of prototype function calls.
Вы заменили статическую локальную переменную на глобальную, что одно и то же, и не решили свою проблему.
Тем не менее, ваша статья заставляет задуматься и предлагает интересные идеи.
Хорошая статья, спасибо, что поделились! Все это было очень полезно!
В общем, я взял вашу функцию isNewBar, и при компиляции она выдает следующее сообщение:"возможна потеря данных из-за преобразования типов".
Поэтому я изменил типы var с datetime на long таким образом:
Теперь она компилируется без каких-либо замечаний и, кажется, работает нормально. Спасибо!