Вопрос по iOpen

 

Здравствуйте, в учебнике написано

iOpen - Возвращает значение цены открытия указанного параметром shift бара с соответствующего графика (symbol, timeframe). В случае ошибки функция возвращает 0.

В своем советнике я написал след. код

   double PriceOpen = iOpen (Symbol(), Period(), 0);
   double Spread = MarketInfo(Symbol(), MODE_SPREAD);
   double Ask_Open = NormalizeDouble(PriceOpen + Spread * Point, Digits);
   double Bid_Open = NormalizeDouble(PriceOpen - Spread * Point, Digits);

Но теперь думаю над его правильностью.

Вопрос в следующем. Правильно ли я понял, что iOpen возвращает цену открытия без спрэда?

+ в истории котировок аналогичный вопрос возникает, там цены тоже без спрэда?

Сам я думаю что на 99% прав, но моя паранойя не дает мне покоя.

 
Так и проверьте индикатором, что там голову ломать.
 
В Ваших расчётах два спреда. Обычно хватает одного. iOpen это Bid, поэтому Bid_Open можно не объявлять. Получая спред из MarketInfo Вы расчитаете правильный текущий Ask, но рискуете получить ошибочный Ask_Open, так как ДЦ в условиях рынка может изменять спред и не факт что в текущий момент он такой же как в момент открытия свечи.
 
   double PriceOpen = iOpen (NULL, 0, 0);
   double Spread = MarketInfo(Symbol(), MODE_SPREAD)*Point;
   double Ask_Open = NormalizeDouble(PriceOpen + Spread, Digits);
   double Bid_Open = NormalizeDouble(PriceOpen, Digits);
 
Спасибо всем за ответы, не зря я сомневался)
Причина обращения: