Модификация: Дополнительно указывается смещение проверки пробоя.
Задаются серии Up, Down без вывода на график (только возможность показать последнее значение), для возможности использования их в стратегиях.
Восходящие и нисходящие тенденции рисуются разным цветом (цвет изменить нельзя, только для Up, Down последнее значение на поле цены).
Параметры:
PST - % отклонения от экстремума
Shift - % доп. смещения для определения смены тенденции
Примеры работы:
Исходный текст индикатора:
Код: Выделить всё
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);}
}
Скачать исходный текст:

 
 