//+------------------------------------------------------------------+
//|                                                  MA_Level_v2.mq4 |
//|                                                            Grell |
//|                                                dwgrell@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Grell"
#property link      "dwgrell@gmail.com"
#property indicator_separate_window //В отдельном окне
#property indicator_buffers 1 //Количество буферов
#property indicator_color1 Red //Цвет отображения
//Входные параметры
extern int       period=24;
extern int       method_ma=0;
extern int       ap_price=1;
//Буферы
double MA_L[];
//+------------------------------------------------------------------+
//| Инициализация индикатора                                         |
//+------------------------------------------------------------------+
int init()
  {
//индикаторы
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MA_L);
   return(0);
  }
//+------------------------------------------------------------------+
//| Деинициализация индикатора                                       |
//+------------------------------------------------------------------+
int deinit()
  {
  return(0);
  }
//+------------------------------------------------------------------+
//| Расчет индикатора                                                |
//+------------------------------------------------------------------+
int start()
  {
   if(method_ma>3||method_ma<0)method_ma=0;
   if(ap_price>6||ap_price<0)ap_price=1;
   int limit;
   int counted_bars=IndicatorCounted();
   if(counted_bars<0) return(-1);//Проверка на возможные ошибки
   if(counted_bars>0) counted_bars--;//Пересчет последнего бара
   limit=Bars-counted_bars;
   for(int i=0; i<limit; i++)//Главный цикл
     {
     MA_L[i]=0;
     for(int j=0;j<period;j++)//Внутренний цикл
       {
       double ma0=iMA(NULL,0,period,0,method_ma,ap_price,i+j);//Текущая средняя
       double ma1=iMA(NULL,0,period,0,method_ma,ap_price,i+j+1);//Предыдущая средняя
       double open0=Open[i+j];//Текущая цена открытия
       double open1=Open[i+j+1];//Предыдущая цена открытия
       MA_L[i]+=Calc(ma0,ma1,open0,open1);
       }
     MA_L[i]=MA_L[i]/period;
     }
   return(0);
  }
int Calc(double ma0,double ma1,double open0,double open1)
  {
  if(ma0<open0&&ma0>ma1&&open0>open1)return(2);//Средняя под ценой, возрастает вместе с ценой
  if(ma0<open0&&ma0>ma1)return(1);//Средняя под ценой, возрастает
  if(ma0>ma1&&open0>open1)return(1);//Средняя возрастает вместе с ценой
  if(ma0>open0&&ma0<ma1&&open0<open1)return(-2);//Средняя над ценой, убывает вместе с ценой
  if(ma0>open0&&ma0<ma1)return(-1);//Средняя над ценой, убывает
  if(ma0<ma1&&open0<open1)return(-1);//Средняя убывает вместе с ценой
  return(0);
  }