Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1233

Добавлено: evge » 20 июн 2016, 10:09

Тема: ADXHour - ADX H1 на нижестоящих таймфреймах

Текст сообщения:

ADXhour формирует ADX по данным таймфрейма H1 на нижестоящих таймфреймах.
Индикатор строится на ТФ <= 1 час. Последнее значение индикатора = ADX(ТФ=1час) с запаздыванием на 1 бар.

Автор модификации
evge

Автор кода ADX в АД4
AlfaDirect. 2016. OX

Входящие параметры

Period - период в таймфрейме H1 для формирования ADX

Примеры работы

ADXHour.zip
(1.43 КБ) 1437 скачиваний


Исходный код

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

function Initialize()
{
  IndicatorName = "ADXHour";
  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);

  AddGlobalVariable("H", Types.Double, 0.0);
  AddGlobalVariable("L", Types.Double, 0.0);
  AddGlobalVariable("C", Types.Double, 0.0);

  AddGlobalVariable("H1", Types.Double, 0.0);
  AddGlobalVariable("L1", Types.Double, 0.0);
  AddGlobalVariable("C1", Types.Double, 0.0);
}

function Evaluate()
{
// AlfaDirect. 2015. OX
// ADX (Average Directional Index) Сглаживание EMA.
// Реализация MQL
//
// evge 20.06.2016 ADXHour модификация

double KC = (double)2.0 / (Period + 1.0);
double KE = 1.0 - KC;
if (CurrentIndex == 0)
{
   DIp = 0.0;    DIn = 0.0;   
   H = Input.High[0]; L = Input.Low[0]; C = Input.Close[0];
   H1 = H; L1 = L; C1 = C; 
}
else
{

ADX = ADX[1]; DIP = DIP[1]; DIN = DIN[1];

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

//определяем H L C текущего часа
if (Input.High[0] > H) H = Input.High[0];
if (Input.Low[0] < L) L = Input.Low[0];
C = Input.Close[0];

} else {

    // Расчет (DX+    DX-) --------------------------
   double dH = H - H1;
   double dL = L1 - L;
   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(H - L), Math.Abs(H - C1)), Math.Abs(L - C1));

       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; 

   H1 = H; L1 = L; C1 = C;
   H = Input.High[0]; L = Input.Low[0]; C = Input.Close[0];
   
} //Hours != Hours[-1]

} //CI != 0;

}


Скачать исходный текст

ADXHour-01.png