Почему разные значения от индикатора?

 
Добрый день всем!
Столкнулся с некоторой проблемой.
В советнике на образовании нового бара снимаю показания индикатора с предыдущей свечи, т.е. уже полностью сформированной.
Вывел данные в журнал принтованием и увидел, что данные в советнике отличаются от данных на этой же свече в окне данных.
Как следствие, идет не правильный расчет и выдача сигнала советником.
Индикатор свои значения не перерисовывает.
И такое наблюдается не всегда и только у некоторых брокеров, например у Герчика...
С чем это может быть связано и как с этим бороться?
Буду очень благодарен всем с конструктивным ответом.
 
Gennady Mazur:
Добрый день всем!
Столкнулся с некоторой проблемой.
В советнике на образовании нового бара снимаю показания индикатора с предыдущей свечи, т.е. уже полностью сформированной.
Вывел данные в журнал принтованием и увидел, что данные в советнике отличаются от данных на этой же свече в окне данных.
Как следствие, идет не правильный расчет и выдача сигнала советником.
Индикатор свои значения не перерисовывает.
И такое наблюдается не всегда и только у некоторых брокеров, например у Герчика...
С чем это может быть связано и как с этим бороться?
Буду очень благодарен всем с конструктивным ответом.

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

 
Alexey Viktorov #:

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

Если чесс, то я столкнулся с таким впервые...
дело в том, что пока не образовался новый бар я не беру данные индикатора...
и тут вот еще что... на текущем баре в этот момент данные совпадают с данными советника,
а вот данные предыдущего, закрытого бара, отличаются...
вот что не понятно...
у таких брокеров как Адмирал, Робофорекс или данные от Метоквота, нет ни каких проблем...
Все четко считается и выдается...

Ранее я замечал, да и сейчас есть, сильное отличие данных по свечам например у Инсты,
но по данным индикаторов проблем не было...
 
Gennady Mazur #:

Если чесс, то я столкнулся с таким впервые...
дело в том, что пока не образовался новый бар я не беру данные индикатора...
и тут вот еще что... на текущем баре в этот момент данные совпадают с данными советника,
а вот данные предыдущего, закрытого бара, отличаются...
вот что не понятно...
у таких брокеров как Адмирал, Робофорекс или данные от Метоквота, нет ни каких проблем...
Все четко считается и выдается...

Ранее я замечал, да и сейчас есть, сильное отличие данных по свечам например у Инсты,
но по данным индикаторов проблем не было...

Это не может быть по разному у разных ДЦ. Это тонкости терминала. На последнем тике бара индикатор пересчитался, значение для советника доступно. На следующем тике новый бар. Индикатор пересчитывается и его новое значение будет доступно только тогда, когда будет выполнен код индикатора. А советник уже считает новый бар. В общем мне сложно всё это описать. Попробуйте пропустить первый тик нового бара в советнике и показания будут совпадать без проблем.

 
Alexey Viktorov #:

Это не может быть по разному у разных ДЦ. Это тонкости терминала. На последнем тике бара индикатор пересчитался, значение для советника доступно. На следующем тике новый бар. Индикатор пересчитывается и его новое значение будет доступно только тогда, когда будет выполнен код индикатора. А советник уже считает новый бар. В общем мне сложно всё это описать. Попробуйте пропустить первый тик нового бара в советнике и показания будут совпадать без проблем.

К сожалению, но такое именно присутствует только у избранных ДЦ...
Я беру данные индикатора только после пересчета нового бара...
Получаю данные и нового, и предыдущего бара...
Данные нового бара, полностью совпадают, а у предыдущего нет...
Если пошли данные нового бара, значит данные предыдущего уже меняться не могут...
Хорошо, Спасибо...

 
Gennady Mazur #:

К сожалению, но такое именно присутствует только у избранных ДЦ...
Я беру данные индикатора только после пересчета нового бара...
Получаю данные и нового, и предыдущего бара...
Данные нового бара, полностью совпадают, а у предыдущего нет...
Если пошли данные нового бара, значит данные предыдущего уже меняться не могут...
Хорошо, Спасибо...

добавляйте условия

бар может не определиться или быть меньше нуля

соответственно данные расчета нужно исключить

ну и дальше примерно в том же духе

также, желательно математику расчета индикатора переносить в советник и сравнивать с расчетами индикатора

не совпали - исключаем

расчеты последнего бара делайте по бид или аск, как Вам угодно

в принципе, проблема решаема, все зависит от конкретного расчета

 
Alexey Viktorov #:

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

Там ведь только про индикатор со старшего таймфрейма говорилось. Или я ошибаюсь?

 
Vladislav Boyko #:

Или я ошибаюсь?

А я вообще не помню. Помню только, что по пользовательскому событию абсолютно безразлично со старшего ТФ или с младшего… А вот с текущего не помню куда входит, в старшие или младшие…

 
Alexey Viktorov #:
Я не храню ссылки.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Slava, 2021.05.29 18:16

Хочу напомнить.

1. Для каждого символа, для которого открыт хоть один график, работает отдельный поток для обработки пришедших тиков. Может быть открыто несколько графиков по какому-то символу, но поток будет всё равно один.

2. Поток символа обрабатывает не графики, а таймсерии. То есть, те самые массивы данных, которые отдаются на запрос CopyRates

3. Бесполезно спрашивать у своего символа в OnTick или OnCalculate, синхронизирован ли он. Конечно, да!

4. Все таймсерии обрабатываются по порядку, от младшей к старшей. Сначала применение тика, потом расчёт всех индикаторов, созданных на данной таймсерии. Если вы из индикатора, работающего на M1, спрашиваете данные для этого же символа H1, то вы никогда не получите данных с применённым тиком. Данные всегда будут на один тик назад, какие бы ухищрения вы не применяли. Потому что один поток на символ с последовательной обработкой таймфреймов.

5. Предыдущее утверждение не касается экспертов и скриптов, потому что эксперты и скрипты работают каждый в своём отдельном потоке.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Anton, 2021.06.01 09:40

4. Все таймсерии обрабатываются по порядку, от младшей к старшей. Сначала применение тика, потом расчёт всех индикаторов, созданных на данной таймсерии. Если вы из индикатора, работающего на M1, спрашиваете данные для этого же символа H1, то вы никогда не получите данных с применённым тиком. Данные всегда будут на один тик назад, какие бы ухищрения вы не применяли. Потому что один поток на символ с последовательной обработкой таймфреймов.

Утверждение получилось немного двусмысленное. На всякий случай уточняю. Да, при обработке тика все таймсерии обрабатываются по порядку, от младшей к старшей. Каждый тик добавляется к данным каждой таймсерии, затем производится расчет индикаторов на каждой таймсерии, по порядку. Т.е. для индикатора в OnCalculate() данные самих таймсерий (всех) безусловно обновленные, но данные индикаторов старших таймфреймов еще не пересчитаны.

 

Друзья, индикатор и советник находятся на одном 1м ТФ...
Всем большущее спасибо!

В общем то, ситуацию порешал, встроив небольшой триггер на сигнал,
но что касается не соответствия данных, то приведу пример:
ДЦ Инстафорекс
на графике цена закрытия бара 1.08546, хай 1.08553
в окне данных закрытие 1.08564, хай 1.08565
и как при таких данных воспринимать данные на истории?
Видим одно, на самом деле все совсем по другому...


Стратегию строим глазами с учетом ценовых баров,

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