Почему iClose возвращает цену, отличную от цены на графике для одной и той же пары

 

Добрый день,

1. Вставил такой код для проверки в индикатор:

2. Код вывел такие данные:

3. Смотрю на графике - вижу совсем другие данные закрытия:


С чем это может быть связано?

 

То, что у бара с индексом i на графике EURUSD время 20:57, не означает, что и на других инструментах у бара с индексом i такое же время.

Выведете еще iTime( Instrument1, 0, i )

 

Было что-то подобное, только в МТ5, даже тему заводил. На чем душа успокоилась, уже не помню, да и ДЦ прекратил обслуживание граждан РФ. Так что, пока не актуально.

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

Об отличиях значений индикаторов на графике от значение их буферов.

Yuriy Asaulenko, 2018.03.01 11:34

Имеем индикатор с 3-мя линиями на графике и, соответственно с 3-мя буферами. Последнее значение индикатора перестраивается по текущему Close. Предполагается использование индикатора в стратегии.

Сейчас нас интересует только последнее значение. Пишем код:

Определяем хэндл
int               hFBat2S;
hFBat2S=iCustom(NULL,0,"MyInd\\FBat\\FBat2S");

Функция считывания буферов. Возвращает последнее значение указанного буфера
double cQuoteData::IndValue(int buffnum)
  {
   double out[1];
   CopyBuffer(hFBat2S,buffnum,0,1,out);
   return out[0];
  }

В OnTick распечатываем последние значения всех буферов индикатора
void OnTick()
  {
   Print("OnTick, 0: "+ (string)cQuoteData::IndValue(0) + ", 1: " + (string)cQuoteData::IndValue(1)+ 
   ", 2: " + (string)cQuoteData::IndValue(2));
  };

Смотрим распечатку

2018.03.01 13:12:23.733 SigmaExpert (EURUSD,M1) OnTick, 0: 1.218771922983449, 1: 1.218960029262306, 2: 1.218583816704593

Для буфера 0 - на графике - 1.218529, в буфере -1.218771922983449

 Для буфера 1 - на графике - 1.218763, в буфере -1.218960029262306,

 для буфера 2 - на графике -  1.218240, в буфере -1.218583816704593.

  На других ТФ все тоже самое.

 Как видим, разница в несколько единиц 4-го знака, что существенно превышает спрэд.

Для больших ТФ м.б. это и сойдет, а для малых это уже никуда не годится.


 


 
Andrey Khatimlianskii:

То, что у бара с индексом i на графике EURUSD время 20:57, не означает, что и на других инструментах у бара с индексом i такое же время.

Выведете еще iTime( Instrument1, 0, i )

Да, вы правы. Дело в этом. Подскажете, с чем может быть связано и как с этим бороться? В MT5 такая же проблема есть или там решили?
 
SergeyN:
Да, вы правы. Дело в этом. Подскажете, с чем может быть связано и как с этим бороться? В MT5 такая же проблема есть или там решили?

Это не является ошибкой или проблемой. Поэтому бороться с этим не получится. )))

Такое положение дел является нормальным и его лишь нужно учитывать при разработке. Нужно принять как аксиому, что индексация баров на графиках с разными символами и/или таймфреймами в общем случае не совпадает. Совпадение - это частный случай. Исходя из этой аксиомы, приходим к следующему алгоритму установления соответствия между барами разных символов/ТФ:

  1. Определить время открытия бара на текущем символе/ТФ по его индексу (функция iTime).
  2. Найти бар с временем открытия, которое совпадает с временем из п. 1 или находится внутри бара другого символа ТФ (функция iBarShift).

Причина обращения: