Осцилляторы нормированные > ADX (Average Directional Index) – индекс среднего направленного движения

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

ADX (Average Directional Index) – индекс среднего направленного движения

Непрочитанное сообщение evge » 08 фев 2016, 09:48

Индекс среднего направленного движения – это индикатор, показывающий силу текущего движения на рынке или среднюю величину приращений новых экстремумов.

Расчет индикатора достаточно громоздкий.

Шаг 1

Рассчитывается положительное и отрицательное направленное движение +DM и –DM, на основании правил, которые показаны на рис..

ADX-01.png
ADX-01.png (10.58 КБ) 31632 просмотра


Эти правила могут быть формализованы следующим образом.

Если Ht > Ht-1, то +DMt = Ht – Ht-1, иначе +DMt = 0
Если Lt < Lt-1, то –DMt = Lt-1 – Lt, иначе –DMt = 0

Меньшее из +DMt и –DMt приравнивается к нулю. А если они равны друг другу, то к нулю приравниваются оба.

Шаг 2

Вычисляется истинный диапазон TR (True Range)
TRt = max( |Lt – C t-1|, |Ht – Ct-1|, |Ht – Lt| )

Шаг 3

Вычисляем сглаженные индикаторы положительного направления +DI и отрицательного направления –DI.

Если TRt = 0, то +SDIt = 0 и –SDIt = 0,
Если TRt ≠ 0, то +SDIt = +DMt / TRt и –SDIt = –DMt / TRt.

Сглаживая +SDI и -SDI экспоненциальным скользящим средним (EMA) с периодом Period, получаем

+DIt = EMA( +SDI, Period),
–DIt = EMA(–SDI, Period).

Шаг 4

Вычисляем среднее направленное движение ADX.
Для этого сначала находим направленное движение DX.

DXt = (|+DIt – –DIt| / |+DIt + –DIt|) × 100.

Затем, сглаживая ряд DX, получаем значение ADX:

ADXt = EMA (DX, Period).

Индикатор ADX показывает силу тенденции, которая определяется как частота и величина формирования новых экстремумов. При росте индикатора ADX, можно говорить о том, что рыночный тренд становится сильнее. Падающий индикатор ADX сигнализирует, что доминирующая тенденция на рынке ослабевает или меняется. Линии +DI и –DI показывают превалирование новых максимумов или минимумов в текущем движении цены.

Типовые параметры

Для индикатора обычно используется следующее типовое значение параметра Period = 14 на дневном тайм-фрейме.

Сигналы

  • ADX растет – показывает силу текущей тенденции.
  • ADX начинает расти из области менее 15 – начало тенденции после консолидации.
  • Пересечение +DI и -DI определяет направление сигнала.

Автор: Уэллс Уайлдер (Welles Wilder).
Первоисточник: Welles Wilder. New Concepts in Technical Trading Systems. 1978.

Пример:

ADX-00.png
ADX-00.png (43.45 КБ) 31632 просмотра


Исходный текст:

Код: Выделить всё

function Initialize()
{
  IndicatorName = "ADX";
  PriceStudy = false;
  AddInput("Input", Inputs.Candle);         
  AddParameter("Period", 14);
  AddSeries("ADX", DrawAs.Line, Color.Blue);   
  AddSeries("DIP", DrawAs.Line, Color.Green);   
  AddSeries("DIN", DrawAs.Line, Color.Red);    
  AddGlobalVariable("DIp", Types.Double, 0.0);
  AddGlobalVariable("DIn", Types.Double, 0.0);
  AddGlobalVariable("vATR", Types.Double, 0.0);
}

function Evaluate()
{
// AlfaDirect. 2015. OX
// ADX (Average Directional Index) Сглаживание EMA.
// Реализация MQL
double KC = (double)2.0 / (Period + 1.0);
double KE = 1.0 - KC;
if (CurrentIndex == 0)
{
   DIp = 0.0;    DIn = 0.0;    DIP = 0.0;    DIN = 0.0;    ADX = 0.0;
    vATR = Input.High[0] - Input.Low[0];
}
else
{
    // Расчет (DX+    DX-) --------------------------
    double dH = Input.High[0] - Input.High[-1];         
    double dL = Input.Low[-1] - Input.Low[0];
   double DXp = 0.0;
   double DXn = 0.0;

    if (dH > 0.0) 
       DXp = dH;
    else
       DXp = 0.0;

    if (dL > 0)
        DXn = dL;
    else
        DXn = 0.0;

    if (DXp == DXn)
    {
       DXn = 0.0;         DXp = 0.0;
    }
   
    if (DXp > DXn)
       DXn = 0.0;
   
    if (DXp < DXn)
       DXp = 0.0;
   
    // Расчет TR --------------------------------------------------
    double TR = Math.Max(Math.Max(Math.Abs(Input.High[0] - Input.Low[0]), Math.Abs(Input.High[0] - Input.Close[-1])), Math.Abs(Input.Low[0] - Input.Close[-1]));

       vATR = KE*vATR + KC*TR;
         
    // Расчет (DI+  DI-) ----------------------------------------------
    if (vATR < 0.00000000001)
    {
        DIp = KE*DIp; 
        DIn = KE*DIn; 
        DIP = DIP[-1];
        DIN = DIN[-1];
    }
    else
    {
        DIp = KE*DIp + KC*DXp; 
        DIn = KE*DIn + KC*DXn; 
        DIP = DIp / vATR * 100.0;
        DIN = DIn / vATR * 100.0;
    }

    // ADX --------------------------------
    double  div = ( DIP[0] + DIN[0] );
    double  Buffer = 0.0;
    if (div == 0.0) 
        Buffer = 0.0;
    else
        Buffer = 100.0 * (Math.Abs(DIP[0]-DIN[0]) / div);

    ADX = KE*ADX[-1] + KC*Buffer; 
}
}


Индикатор является встроенным индикатором, поэтому создавать пользовательский индикатор не имеет смысла.
никогда такого не было и вот опять

Avialr
Сообщения: 34
Зарегистрирован: 05 фев 2016, 18:15

Re: ADX (Average Directional Index) – индекс среднего направленного движения

Непрочитанное сообщение Avialr » 19 июн 2016, 19:14

Идея такая - на 5-минутном графике - отобразить данный индикатор - как на часовом
Я так понимаю нужно дополнительно поставить какой то коэффициент (корректирующий временной интервал) - ведь 1 час - это 12 раз по 5 минут.
Это реально?
Подскажите куда этот коэффициент нужно применить.

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Re: ADX (Average Directional Index) – индекс среднего направленного движения

Непрочитанное сообщение evge » 19 июн 2016, 22:58

Код: Выделить всё

if ( BarTime().Hours != BarTime(-1).Hours )


как пример SMAhour - SMA H1 на нижестоящих таймфреймах
никогда такого не было и вот опять

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Re: ADX (Average Directional Index) – индекс среднего направленного движения

Непрочитанное сообщение evge » 20 июн 2016, 10:11

Вот модифицировал код индикатора ADX, получился ADXHour

ADXHour - ADX H1 на нижестоящих таймфреймах
никогда такого не было и вот опять

Max
Сообщения: 9
Зарегистрирован: 07 фев 2017, 08:51
Благодарил (а): 3 раза

Re: ADX (Average Directional Index) – индекс среднего направленного движения

Непрочитанное сообщение Max » 07 фев 2017, 09:17

Непонятно почему ADX отнесен к этому подразделу форума, к индикаторам объема он никакого отношения не имеет :?

Аватара пользователя
evge
Администратор
Сообщения: 1807
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 83 раза
Поблагодарили: 363 раза
Контактная информация:

Re: ADX (Average Directional Index) – индекс среднего направленного движения

Непрочитанное сообщение evge » 07 фев 2017, 09:20

Max писал(а):Непонятно почему ADX отнесен к этому подразделу форума, к индикаторам объема он никакого отношения не имеет :?


да, этот раздел "Библиотека пользовательских индикаторов" создавался первым и переносился, как есть, из одноименного документа документации Альфа-Директ 4, там индикатор и был отнесен к этому разделу. Спасибо, поправлю :)
никогда такого не было и вот опять


Вернуться в «Осцилляторы нормированные»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость