Сравнение последнего значения индикатора со средним

 

     Вопрос : как прописать, код чтобы  значения "deviation" сравнивалось со средним значение за установленный период?

Пока что идет сравнение с  предыдущим значением.  

      deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);

      UpperBuffer[i]=oldval+deviation;

      LowerBuffer[i]=oldval-deviation;

      string Text =DoubleToStr( deviation, Dig);               // Текст для отображения

      if(NormalizeDouble(deviation,Dig)>deviation-i)           // Выбор цвета зависит от динамики

      Color_Day_Percent = Color_Up;                            // Цвет для +

      if(NormalizeDouble(deviation,Dig)<deviation-i)           // Выбор цвета зависит от динамики

      Color_Day_Percent = Color_Dn;                            // Цвет для -

      if(NormalizeDouble(deviation,Dig)==deviation-i)          // Выбор цвета зависит от динамики

      Color_Day_Percent = Color_0;                             // Цвет для 0
Файлы:
 

Как я понимаю, нужно рассчитывать среднее значение  "deviation" за период который берется для расчета самого значения "deviation". И после этого, среднее значение подставлять в правую часть неравенства

 NormalizeDouble(deviation,Dig)>deviation-i

Но как это отобразить в коде? 

 

Сначало считаешь сумму деви и количество деви, потом узнаешь среднее значение

после цыкла узнаёшь остальное.

 

Или что тебе нужно? Просьба написана криво. 

 
eevviill:

Сначало считаешь сумму деви и количество деви, потом узнаешь среднее значение

после цыкла узнаёшь остальное.

 

Или что тебе нужно? Просьба написана криво. 

Да именно это и нужно. Только это не получится наверное посчитать в самом неравенстве. Нужно вводить дополнительную переменную, считать ее, а уже после ставить значение в неравенство.

Или можно проще? 

 
FiVik:

Да именно это и нужно. Только это не получится наверное посчитать в самом неравенстве. Нужно вводить дополнительную переменную, считать ее, а уже после ставить значение в неравенство.

Или можно проще? 

Нуда. Счётчик елементов надо. Ну если все елементы заполнены в буфере то просто потом можно делить на ArrraySize(buf)
 

Тяжко мне дается писание индикаторов

Ошибок компилятор не  обнаруживает , но индикатор не работает 

 deviation=BandsDeviations*MathSqrt(sum/BandsPeriod);
      UpperBuffer[i]=oldval+deviation;
      LowerBuffer[i]=oldval-deviation;
///-------------------------------------------------------------------
   for(i=0;i<=BandsPeriod-1;i++)
   {Average_deviation=(deviation+deviation-i)/i+1;
   i++;}
///-------------------------------------------------------------------
      string Text =DoubleToStr( deviation, Dig);               // Текст для отображения
      if(NormalizeDouble(deviation,Dig)>Average_deviation)           // Выбор цвета зависит от динамики
      Color_Day_Percent = Color_Up;                            // Цвет для +
      if(NormalizeDouble(deviation,Dig)<Average_deviation)           // Выбор цвета зависит от динамики
      Color_Day_Percent = Color_Dn;                            // Цвет для -
      if(NormalizeDouble(deviation,Dig)==Average_deviation)          // Выбор цвета зависит от динамики
      Color_Day_Percent = Color_0;                             // Цвет для 0

 Т.е. ввел переменную "Average_deviation", но не могу понять как записать правильно цикл.

Для переменной "deviation" есть свой буфер 

 
Есть же iMAOnArray, что вы циклами-то страдаете?
 
evillive:
Есть же iMAOnArray, что вы циклами-то страдаете?

Знал бы все нюансы не страдал.

 

Averagedeviation=iMAOnArray(deviationBuffer,0,120,0,MODE_EMA,1);  

 Так будет правильно?

Берем буфер переменной "deviation", используем все элементы массива на периоде усреднения 120 с помощью экспоненциальной средней начиная расчет с предпоследнего значения? 

 
FiVik:

Знал бы все нюансы не страдал.

 Averagedeviation=iMAOnArray(deviationBuffer,0,120,0,MODE_EMA,1);

 

 Так будет правильно?

Берем буфер переменной "deviation", используем все элементы массива на периоде усреднения 120 с помощью экспоненциальной средней начиная расчет с предпоследнего значения? 

Да, как-то так.

 
FiVik:

Тяжко мне дается писание индикаторов

Ошибок компилятор не  обнаруживает , но индикатор не работает 

 Т.е. ввел переменную "Average_deviation", но не могу понять как записать правильно цикл.

Для переменной "deviation" есть свой буфер 

Average_deviation+=
А потом поделить на BandsPeriod
 

evillive элементы массива индикатора  считываются от старых к новым, а мне нужно наоборот- брать элементы новые т.е. как в таймсерии.

Нашел функцию ArraySetAsSeries которая переворачивает доступ к массиву, но что-то не получается адекватная цифра.

eevviill а так как вы советуете, полностью вешает терминал, и его невозможно запустить.

Причина обращения: