Индикатор Арун в качестве основных показателей использует экстремальные значения, которые инструмент приминает во время трендового движения, и значения пересечения с нулевой осью.
Инструмент Арун включает в себя 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;  
}

 )
 )