Неправильные значения из iMFI индикатора, почему?

 
Привет. У меня возникла проблема при получении данных из индикатора iMFI.
double ifmi_indicator = iMFI(symb_pair_with_suffix, StringToInteger(duration), 10, 1);

Данный код вызывается по таймеру, из другого графика. Один на котором стоит советник, остальные данные получаю из кода. Данные из ifmi_indicator не совпадают с теми, что получаю в терминале при просмотре индикатора на этом символе ни на текущем баре, на на предыдущем. В чем проблема? Иногда данные приходят вообще странные, которых вообще нет при просмотре графика вручную. Например я смотрю - значение 20, из кода 70. В чем может быть проблема? Неделю пытался понять где проблема, но так не понял в чем она. RefreshRates() не помогает. Ума ни приложу почему реальные данные отличаются от данных в индикаторе. Данный код размещен в цикле, по символам. Для 24 символов пытаюсь получать значения индикатора, иногда даже бывает успешно. Коллеги, прошу помощи.

Язык mql4.
 
Troodi:

Данный код вызывается по таймеру, из другого графика

в Вашем скудненьком примере для воспроизведения:

1. жестко прописан бар №1 - таймер не гарантирует синхронности с появлением новых баров на чарте

2. Вы могли потерять (или скрыть область видимости) значения переменных symb_pair_with_suffix и duration 

3. Вы могли обращаться к таймфреймам и / или другим торговым инструментам не подгрузив исторические данные, в таком случае будет инициированна подгрузка истории, но на текущем вызове Вы будете получать некорректные расчеты

решение - напишите индикатор в одну строку:

buf[i] = iMFI(NULL, my_tf, my_period, i);

если расчет индикатора производит корректно, значит ошибка не в вызове https://docs.mql4.com/ru/indicators/imfi 

и пробуйте этим индикатором моделировать ситуацию с не активными чартами / ТФ....думаю там у Вас проблема

iMFI - Технические индикаторы - Справочник MQL4
iMFI - Технические индикаторы - Справочник MQL4
  • docs.mql4.com
iMFI - Технические индикаторы - Справочник MQL4
 
Troodi:
Привет. У меня возникла проблема при получении данных из индикатора iMFI.

Данный код вызывается по таймеру, из другого графика. Один на котором стоит советник, остальные данные получаю из кода. Данные из ifmi_indicator не совпадают с теми, что получаю в терминале при просмотре индикатора на этом символе ни на текущем баре, на на предыдущем. В чем проблема? Иногда данные приходят вообще странные, которых вообще нет при просмотре графика вручную. Например я смотрю - значение 20, из кода 70. В чем может быть проблема? Неделю пытался понять где проблема, но так не понял в чем она. RefreshRates() не помогает. Ума ни приложу почему реальные данные отличаются от данных в индикаторе. Данный код размещен в цикле, по символам. Для 24 символов пытаюсь получать значения индикатора, иногда даже бывает успешно. Коллеги, прошу помощи.

Язык mql4.

Вы вызываете imfi для таймфрейма, отличного от рабочего графика?

 
SeriousRacoon:

Вы вызываете imfi для таймфрейма, отличного от рабочего графика?

Да, но при вызове я указываю таймфрейм с которого брать информацию. Так мало того, сам график может быть скрыт. Хотя даже с открытыми графиками такая же проблема.

 
Igor Makanu:

в Вашем скудненьком примере для воспроизведения:

1. жестко прописан бар №1 - таймер не гарантирует синхронности с появлением новых баров на чарте

2. Вы могли потерять (или скрыть область видимости) значения переменных symb_pair_with_suffix и duration 

3. Вы могли обращаться к таймфреймам и / или другим торговым инструментам не подгрузив исторические данные, в таком случае будет инициированна подгрузка истории, но на текущем вызове Вы будете получать некорректные расчеты

решение - напишите индикатор в одну строку:

если расчет индикатора производит корректно, значит ошибка не в вызове https://docs.mql4.com/ru/indicators/imfi 

и пробуйте этим индикатором моделировать ситуацию с не активными чартами / ТФ....думаю там у Вас проблема

Спасибо за советы!
1. На самом деле на форуме я ошибся и написал первый бар, на самом деле я беру нулевой. Но мне просто надо знать последний известный объем, так что новый бар может ещё и не появился, но объем последний будет известен (я так предполагаю).
2. По поводу видимости точно всё верно.
3. А можно немного подробнее? Заносить какое-то количество баров в буфер?

 
Troodi:

Спасибо за советы!
1. На самом деле на форуме я ошибся и написал первый бар, на самом деле я беру нулевой. Но мне просто надо знать последний известный объем, так что новый бар может ещё и не появился, но объем последний будет известен (я так предполагаю).
2. По поводу видимости точно всё верно.
3. А можно немного подробнее? Заносить какое-то количество баров в буфер?

про нулевой бар, добейтесь стабильного получения данных индикатора на баре №1, затем поменяете на бар №0 - на баре №0 данные будут изменяться по приходу тика

3. подкачку истории организуйте - поиском по форуму или моим постам, каждые 2 месяца писал пример, я в таймера данные подкачиваю

 
Igor Makanu:

про нулевой бар, добейтесь стабильного получения данных индикатора на баре №1, затем поменяете на бар №0 - на баре №0 данные будут изменяться по приходу тика

3. подкачку истории организуйте - поиском по форуму или моим постам, каждые 2 месяца писал пример, я в таймера данные подкачиваю

Спасибо, посмотрю.

 
Troodi:

Да, но при вызове я указываю таймфрейм с которого брать информацию. Так мало того, сам график может быть скрыт. Хотя даже с открытыми графиками такая же проблема.

Бар 0 с верхнего тайм-фрейма будет всегда волатилен. Бар 1 на текущем ТФ всегда соответствует бару 0 на верхнем. Тут просто нужна внимательность и iBarShift там, где нужно.
Причина обращения: