CCI(50) здесь служит для определения тренда, а ATR(5) используется в расчете уровней. Так, если CCI(50) принимает положительное значение, то индикатор в зависимости от значений минимумов баров, а так же ATR(5), либо растет, либо рисует горизонтальный участок. Ну а когда CCI(50) меньше нуля, все наоборот – индикатор либо понижается, либо рисует горизонтальный участок.
Параметры
PeriodATR - период для индикатора ATR (по умолчанию 5)
PeriodCCI - период для индикатора CCI (по умолчанию 50)
K - коэффициент ATR. Для увеличения или уменьшения действия ATR на индикатор. Задавать можно значения меньше или больше единицы. 1 = ATR.
Примеры работы
Исходный текст индикатора:
Код: Выделить всё
function Initialize()
{
IndicatorName = "SuperTrend";
PriceStudy = true;
AddInput("Input", Inputs.Candle);
AddSeries("U", DrawAs.Custom, Color.Green);
AddSeries("D", DrawAs.Custom, Color.Red);
AddSeries("ST", DrawAs.Custom, Color.Transparent, false);
AddParameter("PeriodATR", 5);
AddParameter("PeriodCCI", 50);
AddParameter("K", 2);
}
function Evaluate()
{
// evge 08.06.2017 http://alfadirect4.ru
var I = Input;
var A = ATR(I, PeriodATR);
var C = CCI(I, PeriodCCI);
var MPer = Math.Max(PeriodATR, PeriodCCI);
if (C[0] >= 0)
{
ST = I.Low[0] - A[0] * K; if (CurrentIndex > MPer) ST[0] = Math.Max(ST[0], ST[1]);
U[1] = ST[1]; U[0] = ST[0]; U.DrawLine();
}
else
{
ST = I.High[0] + A[0] * K; if (CurrentIndex > MPer) ST[0] = Math.Min(ST[0], ST[1]);
D[1] = ST[1]; D[0] = ST[0]; D.DrawLine();
}
}
Скачать исходный текст
Исправленный под новые версии, прежний в новых версиях АД4 перестал компилироваться с требованием наименования изменения ряда на Input. Ряд I заменен на Input.