Добрый день всем!
Столкнулся с некоторой проблемой.
В советнике на образовании нового бара снимаю показания индикатора с предыдущей свечи, т.е. уже полностью сформированной.
Вывел данные в журнал принтованием и увидел, что данные в советнике отличаются от данных на этой же свече в окне данных.
Как следствие, идет не правильный расчет и выдача сигнала советником.
Индикатор свои значения не перерисовывает.
И такое наблюдается не всегда и только у некоторых брокеров, например у Герчика...
С чем это может быть связано и как с этим бороться?
Буду очень благодарен всем с конструктивным ответом.
Скорее всего это у всех так. Происходит это от того, что данные индикатора будут доступны только после выхода из функции OnTick() советника. Это мы недавно обсуждали… Я не храню ссылки. В общем, проще пропускать первый тик нового бара, а на втором читать значения индикатора. Или найти это обсуждение и делать пользовательское событие и чтение индикатора уже из события графика.
Скорее всего это у всех так. Происходит это от того, что данные индикатора будут доступны только после выхода из функции OnTick() советника. Это мы недавно обсуждали… Я не храню ссылки. В общем, проще пропускать первый тик нового бара, а на втором читать значения индикатора. Или найти это обсуждение и делать пользовательское событие и чтение индикатора уже из события графика.
Если чесс, то я столкнулся с таким впервые...
дело в том, что пока не образовался новый бар я не беру данные индикатора...
и тут вот еще что... на текущем баре в этот момент данные совпадают с данными советника,
а вот данные предыдущего, закрытого бара, отличаются...
вот что не понятно...
у таких брокеров как Адмирал, Робофорекс или данные от Метоквота, нет ни каких проблем...
Все четко считается и выдается...
но по данным индикаторов проблем не было...
Если чесс, то я столкнулся с таким впервые...
дело в том, что пока не образовался новый бар я не беру данные индикатора...
и тут вот еще что... на текущем баре в этот момент данные совпадают с данными советника,
а вот данные предыдущего, закрытого бара, отличаются...
вот что не понятно...
у таких брокеров как Адмирал, Робофорекс или данные от Метоквота, нет ни каких проблем...
Все четко считается и выдается...
но по данным индикаторов проблем не было...
Это не может быть по разному у разных ДЦ. Это тонкости терминала. На последнем тике бара индикатор пересчитался, значение для советника доступно. На следующем тике новый бар. Индикатор пересчитывается и его новое значение будет доступно только тогда, когда будет выполнен код индикатора. А советник уже считает новый бар. В общем мне сложно всё это описать. Попробуйте пропустить первый тик нового бара в советнике и показания будут совпадать без проблем.
Это не может быть по разному у разных ДЦ. Это тонкости терминала. На последнем тике бара индикатор пересчитался, значение для советника доступно. На следующем тике новый бар. Индикатор пересчитывается и его новое значение будет доступно только тогда, когда будет выполнен код индикатора. А советник уже считает новый бар. В общем мне сложно всё это описать. Попробуйте пропустить первый тик нового бара в советнике и показания будут совпадать без проблем.
К сожалению, но такое именно присутствует только у избранных ДЦ...
Я беру данные индикатора только после пересчета нового бара...
Получаю данные и нового, и предыдущего бара...
Данные нового бара, полностью совпадают, а у предыдущего нет...
Если пошли данные нового бара, значит данные предыдущего уже меняться не могут...
Хорошо, Спасибо...
К сожалению, но такое именно присутствует только у избранных ДЦ...
Я беру данные индикатора только после пересчета нового бара...
Получаю данные и нового, и предыдущего бара...
Данные нового бара, полностью совпадают, а у предыдущего нет...
Если пошли данные нового бара, значит данные предыдущего уже меняться не могут...
Хорошо, Спасибо...
добавляйте условия
бар может не определиться или быть меньше нуля
соответственно данные расчета нужно исключить
ну и дальше примерно в том же духе
также, желательно математику расчета индикатора переносить в советник и сравнивать с расчетами индикатора
не совпали - исключаем
расчеты последнего бара делайте по бид или аск, как Вам угодно
в принципе, проблема решаема, все зависит от конкретного расчета
Скорее всего это у всех так. Происходит это от того, что данные индикатора будут доступны только после выхода из функции OnTick() советника. Это мы недавно обсуждали… Я не храню ссылки. В общем, проще пропускать первый тик нового бара, а на втором читать значения индикатора. Или найти это обсуждение и делать пользовательское событие и чтение индикатора уже из события графика.
Там ведь только про индикатор со старшего таймфрейма говорилось. Или я ошибаюсь?
Я не храню ссылки.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Slava, 2021.05.29 18:16
Хочу напомнить.
1. Для каждого символа, для которого открыт хоть один график, работает отдельный поток для обработки пришедших тиков. Может быть открыто несколько графиков по какому-то символу, но поток будет всё равно один.
2. Поток символа обрабатывает не графики, а таймсерии. То есть, те самые массивы данных, которые отдаются на запрос CopyRates
3. Бесполезно спрашивать у своего символа в OnTick или OnCalculate, синхронизирован ли он. Конечно, да!
4. Все таймсерии обрабатываются по порядку, от младшей к старшей. Сначала применение тика, потом расчёт всех индикаторов, созданных на данной таймсерии. Если вы из индикатора, работающего на M1, спрашиваете данные для этого же символа H1, то вы никогда не получите данных с применённым тиком. Данные всегда будут на один тик назад, какие бы ухищрения вы не применяли. Потому что один поток на символ с последовательной обработкой таймфреймов.
5. Предыдущее утверждение не касается экспертов и скриптов, потому что эксперты и скрипты работают каждый в своём отдельном потоке.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Anton, 2021.06.01 09:40
Утверждение получилось немного двусмысленное. На всякий случай уточняю. Да, при обработке тика все таймсерии обрабатываются по порядку, от младшей к старшей. Каждый тик добавляется к данным каждой таймсерии, затем производится расчет индикаторов на каждой таймсерии, по порядку. Т.е. для индикатора в OnCalculate() данные самих таймсерий (всех) безусловно обновленные, но данные индикаторов старших таймфреймов еще не пересчитаны.
Alexey Viktorov #:
Я не храню ссылки.
https://www.mql5.com/ru/forum/464362/page6#comment_52906886
https://www.mql5.com/ru/forum/1111/page3543#comment_53761163
Друзья, индикатор и советник находятся на одном 1м ТФ...
Всем большущее спасибо!
В общем то, ситуацию порешал, встроив небольшой триггер на сигнал,
но что касается не соответствия данных, то приведу пример:
ДЦ Инстафорекс
на графике цена закрытия бара 1.08546, хай 1.08553
в окне данных закрытие 1.08564, хай 1.08565
и как при таких данных воспринимать данные на истории?
Видим одно, на самом деле все совсем по другому...
Стратегию строим глазами с учетом ценовых баров,
а они совсем не те что поступают данные в советник.
а на минутке это просто бешенная дельта при скальпинге.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Столкнулся с некоторой проблемой.
В советнике на образовании нового бара снимаю показания индикатора с предыдущей свечи, т.е. уже полностью сформированной.
Вывел данные в журнал принтованием и увидел, что данные в советнике отличаются от данных на этой же свече в окне данных.
Как следствие, идет не правильный расчет и выдача сигнала советником.
Индикатор свои значения не перерисовывает.
И такое наблюдается не всегда и только у некоторых брокеров, например у Герчика...
С чем это может быть связано и как с этим бороться?
Буду очень благодарен всем с конструктивным ответом.