Пример:
Исходный текст:
Код: Выделить всё
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;
}
}
}