SAR (Stop And Reverse) – стоп и реверс > NATR (N-ATR Trailing Reverse) – число средних истинных отклонений

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

NATR (N-ATR Trailing Reverse) – число средних истинных отклонений

Непрочитанное сообщение evge » 07 фев 2016, 11:13

NATR – индикатор, который при росте показывает заданное число значений ATR вниз от достигнутого максимума, а при падении показывает заданное число значений ATR вверх от достигнутого минимума.

Пример:

eNATR-00.png
eNATR-00.png (25.23 КБ) 42315 просмотров


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

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

function Initialize()
{
  IndicatorName = "eNATR";
  PriceStudy = true;
  AddInput("Input", Inputs.Candle);         // Определяем тип входного ряда
  AddParameter("K_ATR", 30, 1);              // Определяем изменяемый параметр
  AddParameter("N_ATR", 4);                  // Определяем изменяемый параметр
  AddGlobalVariable("gDirection", Types.Double, 1.0);   // Определяем глобальную переменную
  AddGlobalVariable("gHigh", Types.Double, 0.0);         // Определяем глобальную переменную
  AddGlobalVariable("gLow", Types.Double, 100000000000.0);   // Определяем глобальную
  AddSeries("eNATR", DrawAs.Line, Color.Blue);   // Определяем выходной ряд
}

function Evaluate()
{
// AlfaDirect. 2014. OX
// NATR. Отклонение от экстремума (по High и Low) на заданное кол-во значений ATR - переворот направления
  if (CurrentIndex < 1)
  {
     eNATR = Input.High[0];
     gHigh =  Input.High[0];
  }
  else
  {
    var cATR = 0.0;
    // Пример вызова встроенного индикатора ATR
    cATR = N_ATR*ATR(Input, K_ATR);
    if (gDirection > 0.0)
    { 
       if (Input.High[0] > gHigh)
            gHigh = Input.High[0];

       if (Input.Close[0] < gHigh-cATR)
         {
           gDirection = -1.0;
           gLow = Input.Low[0];
          eNATR = gLow + cATR;
       }
         else
         eNATR = gHigh - cATR;
    }
    else
       if (gDirection < 0.0)
       {
         if (Input.Low[0] < gLow)
               gLow = Input.Low[0];

         if (Input.Close[0] > gLow+cATR)
         {
               gDirection = 1.0;
               gHigh = Input.High[0];
                eNATR = gHigh - cATR;
         }
           else
             eNATR = gLow + cATR;
       }
  }
}
никогда такого не было и вот опять

abelok
Сообщения: 23
Зарегистрирован: 20 ноя 2016, 07:43
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: NATR (N-ATR Trailing Reverse) – число средних истинных отклонений

Непрочитанное сообщение abelok » 31 май 2018, 14:28

Непринципиально, но лучше поменять обозначения.
И оставить K_ATR и L_ATR.

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

function Initialize()
{
  IndicatorName = "eNATR";
  PriceStudy = true;
  AddInput("Input", Inputs.Candle);         // Определяем тип входного ряда
  AddParameter("K_ATR", 3, 1);              // Определяем изменяемый параметр
  AddParameter("L_ATR", 18);                  // Определяем изменяемый параметр
  AddGlobalVariable("gDirection", Types.Double, 1.0);   // Определяем глобальную переменную
  AddGlobalVariable("gHigh", Types.Double, 0.0);         // Определяем глобальную переменную
  AddGlobalVariable("gLow", Types.Double, 100000000000.0);   // Определяем глобальную
  AddSeries("eNATR", DrawAs.Line, Color.Blue);   // Определяем выходной ряд
}

function Evaluate()
{
// AlfaDirect. 2014. OX
// NATR. Отклонение от экстремума (по High и Low) на заданное кол-во значений ATR - переворот направления
  if (CurrentIndex < 1)
  {
     eNATR = Input.High[0];
     gHigh =  Input.High[0];
  }
  else
  {
    var cATR = 0.0;
    // Пример вызова встроенного индикатора ATR
    cATR = K_ATR*ATR(Input, L_ATR);
    if (gDirection > 0.0)
    { 
       if (Input.High[0] > gHigh)
            gHigh = Input.High[0];

       if (Input.Close[0] < gHigh-cATR)
         {
           gDirection = -1.0;
           gLow = Input.Low[0];
          eNATR = gLow + cATR;
       }
         else
         eNATR = gHigh - cATR;
    }
    else
       if (gDirection < 0.0)
       {
         if (Input.Low[0] < gLow)
               gLow = Input.Low[0];

         if (Input.Close[0] > gLow+cATR)
         {
               gDirection = 1.0;
               gHigh = Input.High[0];
                eNATR = gHigh - cATR;
         }
           else
             eNATR = gLow + cATR;
       }
  }
}


Вернуться в «SAR (Stop And Reverse) – стоп и реверс»

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

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