Я пытаюсь выяснить, как рассчитывается ADX в MetaTrader. Я изучил документацию и код ADX.mq4 , но все еще получаю неправильные результаты.
Я экспериментирую с месячными данными, чтобы увидеть расчет по первым барам истории. Использование стандартного 14 периода и закрытой примененной цены.
Индикатор начинает рисовать на графике с 15-го бара, но в окне данных отображаются значения еще со второго бара, что нормально, поскольку он использует экспоненциальный метод.
Предположим, у нас есть следующие данные бара OHLC:
2002.06.01,00:00,0.93240,0.99140,0.93240,0.99100
2002.07.01,00:00,0.99100,1.01180,0.97260,0.97730
Тогда первое значение (начиная со второго бара) должно быть рассчитано следующим образом:
1. price move
+M = High(i) - High(i - 1) => 0.0204
-M = Low(i - 1) - Low(i) => -0.0402
2. directional move and true range
+DM = if +M > -M and +M > 0 then +M else 0 => 0.0204
-DM = if -M > +M and -M > 0 then -M else 0 => 0
TR = Max((High - Low), Abs(High - Close(i - 1)), Abs(Low - Close(i - 1))) => 0.0392
3. the first exponential value of directional movement index
+DI = +DM / TR * 100 => 52.0408
-DI = -DM / TR * 100 => 0
4. the first exponential value of average directional movement index
ADX = Abs(+DI - -DI) / (+DI + -DI) * 100 => 100
Но терминал отображает следующее:
+DI = 6.9388
-DI = 0
ADX = 13.3333
Что не так с ручными вычислениями?
PS: такие же результаты наблюдаются в MT5