//+------------------------------------------------------------------+
//|                                             Indicator "Waise_adj"|
//+------------------------------------------------------------------+
#property copyright   "Copyright 2016, Trade like a Pro"
#property link        "http://tradelikeapro.ru/"
#property strict

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 clrRed
#property indicator_color2 clrWheat
#property indicator_color3 clrChartreuse
#define Z 270
//--- input parameters
extern double            mni_I   =  5.0;                     // Первый множитель
extern double            mni_II  = 10.0;                     // Второй множитель
extern double            mni_III = 15.0;                     // Третий множитель        
input ENUM_MA_METHOD     InpMAEveryMethod  = MODE_LWMA;      // Тип линии вычитаемого
input ENUM_APPLIED_PRICE InpEveryPrice     = PRICE_WEIGHTED; // Выбор цены вычитаемого
input ENUM_MA_METHOD     InpMASinglEMethod = MODE_LWMA;      // Тип линии уменьшаемого
input ENUM_APPLIED_PRICE InpSinglEPrice    = PRICE_WEIGHTED; // Выбор цены уменьшаемого
extern int               ValidBars = 1500;                   // Количество баров для расчета
//--- buffers
double ExtEin[];
double ExtZwei[];
double ExtDrei[];
//+------------------------------------------------------------------+
//|    Custom indicator initialization function                      |
//+------------------------------------------------------------------+
int init() 
  {
   string short_name;
//--- indicator lines
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0, ExtEin);
   SetIndexLabel(0,"Ein_adj");
   
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1, ExtZwei);
   SetIndexLabel(1,"Zwei_adj");
   
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2, ExtDrei);
   SetIndexLabel(2,"Drei_adj");
//--- name for DataWindow and indicator subwindow label
   short_name="Waise_adj("+DoubleToStr(mni_I,1)+","+DoubleToStr(mni_II,1)+","+DoubleToStr(mni_III,1)+","+StringSubstr(EnumToString(InpMAEveryMethod),5)+","+StringSubstr(EnumToString(InpEveryPrice),6)+","+StringSubstr(EnumToString(InpMASinglEMethod),5)+","+StringSubstr(EnumToString(InpSinglEPrice),6)+")";
   IndicatorShortName(short_name);
   IndicatorDigits(_Digits);
//--- initialization done
   return (0);
  }
//+------------------------------------------------------------------+
//|    Main function                                                 |
//+------------------------------------------------------------------+
int start() 
  {
   double mov1A;    // Меняем по вкусу
   double mov5A;    // Меняем по вкусу
   double mov10A;   // Меняем по вкусу
   double mov15A;   // Меняем по вкусу
   double mov22A;   // Меняем по вкусу
   double mov65A;   // Меняем по вкусу
   double mov130A;  // Меняем по вкусу
   double mov260A;  // Меняем по вкусу
   double Sigma_I;
   double Sigma_II;
   double Fltr;
   double Fltr_A;
   double Pre_mni;
//----   
   if(Bars < Z) return(0);
   int i=MathMin(Bars-Z,ValidBars);
   for(int k=i; k>=0; k--) 
     {
      mov1A = iMA(NULL, 0, 1, 0,     InpMASinglEMethod, InpSinglEPrice, k);
      mov5A = iMA(NULL, 0, 5, 0,     InpMAEveryMethod, InpEveryPrice, k);
      mov10A = iMA(NULL, 0, 10, 0,   InpMAEveryMethod, InpEveryPrice, k);
      mov15A = iMA(NULL, 0, 15, 0,   InpMAEveryMethod, InpEveryPrice, k);
      mov22A = iMA(NULL, 0, 22, 0,   InpMAEveryMethod, InpEveryPrice, k);
      mov65A = iMA(NULL, 0, 65, 0,   InpMAEveryMethod, InpEveryPrice, k);
      mov130A = iMA(NULL, 0, 130, 0, InpMAEveryMethod, InpEveryPrice, k);
      mov260A = iMA(NULL, 0, 260, 0, InpMAEveryMethod, InpEveryPrice, k);
      Sigma_I = (mov5A + mov10A + mov22A + mov65A) / 4.0;
      Sigma_II=(mov22A+mov65A+mov130A+mov260A)/4.0;
      Fltr=Sigma_I-Sigma_II;
      Pre_mni= Fltr-Fltr_A;
      Fltr_A = Fltr;
      ExtEin[k]  = mov1A - mni_I*Pre_mni;
      ExtZwei[k] = mov1A - mni_II*Pre_mni;
      ExtDrei[k] = mov1A - mni_III*Pre_mni;
     }
   return (0);
  }
//+------------------------------------------------------------------+
