Страница 1 из 1

NRTRm (Nick Rypock Trailing Reverse Mod) – процент отклонения от экстремума с доп. смещением

Добавлено: 09 мар 2016, 21:46
evge
NRTRm – индикатор, который при росте показывает заданный процент отклонения вниз от достигнутого максимума, а при падении показывает заданный процент отклонения вверх от достигнутого минимума.

Модификация: Дополнительно указывается смещение проверки пробоя.
Задаются серии Up, Down без вывода на график (только возможность показать последнее значение), для возможности использования их в стратегиях.
Восходящие и нисходящие тенденции рисуются разным цветом (цвет изменить нельзя, только для Up, Down последнее значение на поле цены).

Параметры:
PST - % отклонения от экстремума
Shift - % доп. смещения для определения смены тенденции

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

NRTRm-01.png
Индикатор NRTRm
NRTRm-01.png (27.67 КБ) 61705 просмотров


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

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

function Initialize()
{
// Обязательные параметры:
  IndicatorName = "NRTRm"; 
  PriceStudy = true;        // Рисовать в области цены (true – да, false – нет)
  AddInput("Input", Inputs.Price);     // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
  AddSeries("Up", DrawAs.Custom, Color.Blue);
  AddSeries("Down", DrawAs.Custom, Color.Magenta);
  AddSeries("NRTR", DrawAs.Custom, Color.Transparent);   
  AddParameter("PST", 2);   // Параметр % отклонения от экстремума
  AddParameter("Shift", 1); // Смена тенденции % от текущей цены
  AddGlobalVariable("Current", Types.Boolean, true); //true - рост, false - падение
}

function Evaluate()
{
// Модификация NRTR, evge 09.03.2016, http://alfadirect4.ru

// AlfaDirect. 2014. OX
// NRTR. Реализация по коду MS
var C = Input[0];
var TR = C * PST / 100;
var S = C * Shift / 100;

 if (CurrentIndex < 1)
 {
      NRTR = Input[0];
     Current = true;
  }
 else
 {
   if (C == NRTR[-1] )
          NRTR = NRTR[-1] ;
  else
     if (Input[-1] < NRTR[-1] && C < NRTR[-1] && !Current) {
          NRTR = Math.Min( NRTR[-1], C + TR) ;
         }
     else
        if (Input[-1] > NRTR[-1] && C > NRTR[-1] && Current) {
              NRTR = Math.Max( NRTR[-1], C - TR);
         }
        else {
            if ((C - S) > NRTR[-1] && !Current) {
               NRTR = C - TR; Current = true; } else NRTR = NRTR[-1];
            if ((C + S) < NRTR[-1] && Current) {
               NRTR = C + TR; Current = false; } else NRTR = NRTR[-1];             
         }
  }

if (Current)
   { Up[0] = NRTR[0]; NRTR.DrawLine(Color.Blue, Line.Solid, 2); }
   else
   { Down[0] = NRTR[0]; NRTR.DrawLine(Color.Magenta, Line.Solid, 2);}

}


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

NRTRm.zip
(1.36 КБ) 3779 скачиваний

Re: NRTRm (Nick Rypock Trailing Reverse Mod) – процент отклонения от экстремума с доп. смещением

Добавлено: 13 мар 2016, 08:05
evge
Ещё один вариант модификации, где добавлены 2 параметра:

CType - 0 - текущая и предыдущая цена = Close, НЕ 0 - цена = (High + Low) / 2
PType - 0 - использовать % для PST и Shift, НЕ 0 - использовать шаг цены

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

function Initialize()
{
// Обязательные параметры:
  IndicatorName = "NRTRm"; 
  PriceStudy = true;        // Рисовать в области цены (true – да, false – нет)
  AddInput("Input", Inputs.Candle);     // Input - входной ряд (Inputs.Price) или свечи (Inputs.Candle)
  AddSeries("Up", DrawAs.Custom, Color.Blue);
  AddSeries("Down", DrawAs.Custom, Color.Magenta);
  AddSeries("NRTR", DrawAs.Custom, Color.Transparent);
  AddParameter("CType", 0); // 0 - текущая и предыдущая цена = Close, НЕ 0 - цена = (High + Low) / 2
  AddParameter("PType", 0); // 0 - использовать % для PST и Shift, НЕ 0 - использовать шаг цены   
  AddParameter("PST", 2);   // % или шаг цены отклонения от экстремума
  AddParameter("Shift", 1); // Смена тенденции % или шаг цены от текущей цены
  AddGlobalVariable("Current", Types.Boolean, true); //true - рост, false - падение
}

function Evaluate()
{
// Модификация NRTR v2, evge 13.03.2016, http://alfadirect4.ru

// AlfaDirect. 2014. OX
// NRTR. Реализация по коду MS
var C = Input.Close[0];
var C1 = Input.Close[1];
var TR = C * PST / 100;
var S = C * Shift / 100;

if (CType !=0) { C = (Input.High[0] + Input.Low[0]) / 2; C1 = (Input.High[1] + Input.Low[1]) / 2; }
if (PType !=0) { TR = PST; S = Shift; }

 if (CurrentIndex < 1)
 {
      NRTR = Input.Close[0];
     if (CType !=0) NRTR = (Input.High[0] + Input.Low[0]) / 2;
     Current = true;
  }
 else
 {
   if (C == NRTR[-1] )
          NRTR = NRTR[-1] ;
  else
     if (C1 < NRTR[-1] && C < NRTR[-1] && !Current) {
          NRTR = Math.Min( NRTR[-1], C + TR) ;
         }
     else
        if (C1 > NRTR[-1] && C > NRTR[-1] && Current) {
              NRTR = Math.Max( NRTR[-1], C - TR);
         }
        else {
            if ((C - S) > NRTR[-1] && !Current) {
               NRTR = C - TR; Current = true; } else NRTR = NRTR[-1];
            if ((C + S) < NRTR[-1] && Current) {
               NRTR = C + TR; Current = false; } else NRTR = NRTR[-1];             
         }
  }

if (Current)
   { Up[0] = NRTR[0]; NRTR.DrawLine(Color.Blue, Line.Solid, 2); }
   else
   { Down[0] = NRTR[0]; NRTR.DrawLine(Color.Magenta, Line.Solid, 2);}

}

Re: NRTRm (Nick Rypock Trailing Reverse Mod) – процент отклонения от экстремума с доп. смещением

Добавлено: 30 май 2018, 13:10
Konstantin
Добрый день, evge!
Не совсем разобрался с программированием, поэтому обращаюсь к Вам.
Можете сделать сглаживание индикатора NRTR как здесь https://www.mql5.com/ru/code/19621 или здесь https://www.mql5.com/ru/code/7038 ?

Re: NRTRm (Nick Rypock Trailing Reverse Mod) – процент отклонения от экстремума с доп. смещением

Добавлено: 31 май 2018, 06:37
evge
Здравствуйте!

На основе ATR есть на форуме и в библиотеке пользовательских индикаторов. Можно установить из самого терминала.

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

Re: NRTRm (Nick Rypock Trailing Reverse Mod) – процент отклонения от экстремума с доп. смещением

Добавлено: 04 сен 2023, 18:42
Mandarin84
Очень интересный индикатор
но когда его запускаешь на АЛЬФЕ сразу всё тормозить начинает
он столько памяти жрёт что порой стакан цена уже убежала а график еще подтупливает не поспевает.
Как только этот индикатор удаляю сразу всё летает без задержек.

Подскажите в чем причина. Чего он так много анализирует что весь комп замирает от его расчетов)

Re: NRTRm (Nick Rypock Trailing Reverse Mod) – процент отклонения от экстремума с доп. смещением

Добавлено: 27 сен 2023, 20:01
BugsDigger
А можно в явном виде расставить все { } в многочисленных if-else-if-else ?
А то как-то теряюсь в логике. :?