Модификация: Дополнительно указывается смещение проверки пробоя.
Задаются серии 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);}
}
Скачать исходный текст: