Индикатор Арун в качестве основных показателей использует экстремальные значения, которые инструмент приминает во время трендового движения, и значения пересечения с нулевой осью.
Инструмент Арун включает в себя 2 линии:
Aroon Up отображается в зеленом цвете.
Aroon Down окрашена в красный.
Для расчета значений используются такие формулы:
Aroon Up = [(Бар) — (Бар после пика цены)] / (Бар) x 100.
Aroon Down = [(Бар) — (Бар после минимальной цены)] / (Бар) x 100.
Код: Выделить всё
function Initialize()
{
IndicatorName = "Aroon";
PriceStudy = false;
AddInput ("Input", Inputs.Candle);
AddParameter("Period", 10);
AddGlobalVariable("hi", Types.Double, 0);
AddGlobalVariable("lo", Types.Double, 0);
AddGlobalVariable("hibar", Types.Double, 0);
AddGlobalVariable("lobar", Types.Double, 0);
AddSeries ("AUP", DrawAs.Line, Color.Green);
AddSeries ("ADW", DrawAs.Line, Color.Red);
}
function Evaluate()
{
// Jude_Masson 19.02.2022 https://alfadirect4.ru
hi = Input.High[0]; hibar = 0; lo = Input.Low[0]; lobar = 0; //Обнуляем переменные
for (int i=1; i < Period; i++) //Цикл на поиск максимального бара
{
if (Input.High[i] > hi )
{
hi = Input.High[i];
hibar = i +1; //Записываем насколько High далеко
}
if (Input.Low[i] < lo )
{
lo = Input.Low[i];
lobar = i +1; //Записываем насколько Low далеко
}
}
AUP = (Period-hibar)/ Period*100;
ADW = (Period-lobar)/ Period*100;
}
Тут версия с двумя периодами для Hi и Low отдельно.
Код: Выделить всё
function Initialize()
{
IndicatorName = "AroonUD";
PriceStudy = false;
AddInput ("Input", Inputs.Candle);
AddParameter("PeriodU", 10);
AddParameter("PeriodD", 10);
AddGlobalVariable("hi", Types.Double, 0);
AddGlobalVariable("lo", Types.Double, 0);
AddGlobalVariable("hibar", Types.Double, 0);
AddGlobalVariable("lobar", Types.Double, 0);
AddSeries ("AUP", DrawAs.Line, Color.Green);
AddSeries ("ADW", DrawAs.Line, Color.Red);
}
function Evaluate()
{
// Jude_Masson 19.02.2022 https://alfadirect4.ru
hi = Input.High[0]; hibar = 0; lo = Input.Low[0]; lobar = 0;
for (int i=1; i < PeriodU; i++)
{
if (Input.High[i] > hi )
{
hi = Input.High[i];
hibar = i +1;
}
}
for (int i=1; i < PeriodD; i++)
{
if (Input.Low[i] < lo )
{
lo = Input.Low[i];
lobar = i +1;
}
}
AUP = (PeriodU-hibar)/ PeriodU*100;
ADW = (PeriodD-lobar)/ PeriodD*100;
}