Со временем эта погрешность накапливается и даёт неверную картину.
На скринах сверху стандартный индикатор OBV, снизу моя реализация:
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- for(int i = prev_calculated == 0 ? 0 : prev_calculated - 1; i < rates_total; i++) { OBVBuffer[i] = i > 0 ? OBVBuffer[i - 1] : 0; const long ivol = AppliedVolume == VOLUME_REAL ? volume[i] : tick_volume[i]; if(open[i] < close[i]) { OBVBuffer[i] = OBVBuffer[i] + ivol; } else if(open[i] > close[i]) { OBVBuffer[i] = OBVBuffer[i] - ivol; } } //--- return value of prev_calculated for next call return(rates_total); }
Файлы:
scr3.jpg
361 kb
Вопрос: это действительно ошибка в реализации стандартного индикатора или я что-то не понимаю?
+ индикатор не работает на таймфрейме выше M30 (превращается в сплошную линию).
Файлы:
scr4.jpg
340 kb
Индикатор сравнивает цены закрытия - я не прав. Вопрос снимается.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здесь описана формула расчета индикатора OBV.
Но похоже, что индикатор в MT5 реализован с ошибкой.
Сейчас опубликую несколько примеров.
UPD: индикатор сравнивает цены закрытия, а я сравниваю open и close. Вопрос снимается.