//+------------------------------------------------------------------+
//|                                             6 Indicator Combined |
//+------------------------------------------------------------------+
#property copyright "fxdaytrader"
#property link      ""

#property indicator_separate_window
#property indicator_buffers 2


#property indicator_levelcolor   SteelBlue
#property indicator_level1       25.0
#property indicator_level2       -25.0


#property indicator_color1 clrPaleVioletRed
#property indicator_color2 clrLimeGreen
#property indicator_width1 2
#property indicator_width2 1


extern double     AddValue          = 0.0;
extern string     is0               = "indicator settings:";
extern string     is1               = "RSI:";
extern int        rsiperiod         = 13;
extern int        rsiprice          = 0;
extern string     is2               = "STOCHASTIC:";
extern int        StochK            = 8;
extern int        StochD            = 3;
extern int        StochSlowing      = 3;
extern int        StochMethod       = 1;
extern string     spfhi             = "0:Low/High, 1:Close/Close";
extern int        StochPriceField   = 1;
extern string     is3               = "CCI:";
extern int        cciperiod         = 21;
extern int        cciprice          = 0;
extern string     is4               = "MOMENTUM:";
extern int        momperiod         = 13;
extern int        momprice          = 0;
extern string     is5               = "MONEY FLOW INDEX:";
extern int        mfiperiod         = 13;
extern string     is6               = "DEMARKER:";
extern int        demarkerperiod    = 14;
extern int        Level             = 25;
extern bool       MA_filter         = FALSE;
extern int        Period_MA         = 14;
extern int        Mode_MA           = 0;
extern bool       Alerts            = FALSE;
extern bool       AlertSound        = FALSE;
extern bool       Arrow             = FALSE;
extern int        ArrowSize         = 1;
extern int        SIGNAL_BAR        = 1;


double g_ibuf_236[];
double g_ibuf_240[];
double gda_unused_244[];
double gda_unused_248[];
int gi_252=0;
int g_time_256=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init() 
  {
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,g_ibuf_236);
   SetIndexLabel(0,"Indicatorline");
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,g_ibuf_240);
   SetIndexLabel(1,"MA");
   IndicatorShortName("MultiIndicator & AAA");
   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit() 
  {
   for(int li_0=ObjectsTotal()-1; li_0>=0; li_0--)
      if(StringSubstr(ObjectName(li_0),0,StringLen("MultiInd"))=="MultiInd") ObjectDelete(ObjectName(li_0));
   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start() 
  {
   double irsi_0;
   double icci_8;
   double imomentum_16;
   double imfi_24;
   double idemarker_32;
   double istochastic_40;
   double istochastic_48;
   int li_unused_72;
   int li_56=IndicatorCounted();
   if(li_56>0) li_56--;
   int li_60=Bars-li_56;
   for(int li_64=0; li_64<li_60; li_64++) 
     {
      irsi_0 = iRSI(Symbol(), 0, rsiperiod, rsiprice, li_64);
      icci_8 = iCCI(Symbol(), 0, cciperiod, cciprice, li_64);
      imomentum_16=iMomentum(Symbol(),0,momperiod,momprice,li_64);
      imfi_24=iMFI(Symbol(),0,mfiperiod,li_64);
      idemarker_32=iDeMarker(Symbol(),0,demarkerperiod,li_64);
      istochastic_40 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod, StochPriceField, MODE_MAIN, li_64);
      istochastic_48 = iStochastic(Symbol(), 0, StochK, StochD, StochSlowing, StochMethod, StochPriceField, MODE_SIGNAL, li_64);
      if(irsi_0 == 0.0) irsi_0 = 0.00000001;
      if(icci_8 == 0.0) icci_8 = 0.00000001;
      if(imomentum_16==0.0) imomentum_16=0.00000001;
      if(imfi_24==0.0) imfi_24=0.00000001;
      if(idemarker_32==0.0) idemarker_32=0.00000001;
      if(istochastic_40 == 0.0) istochastic_40 = 0.00000001;
      if(istochastic_48 == 0.0) istochastic_48 = 0.00000001;
      g_ibuf_236[li_64] = 100.0 * ((irsi_0 + (istochastic_40 + istochastic_48) / 3.0 + icci_8 / 5.0 + imfi_24 + 100.0 * idemarker_32) / 5.0 * (1 / imomentum_16) - 0.31415926) + AddValue;
     }
   for(int li_68=li_60; li_68>=0; li_68--) 
     {
      if(MA_filter) g_ibuf_240[li_68]=iMAOnArray(g_ibuf_236,0,Period_MA,0,Mode_MA,li_68);
      if(Arrow) 
        {
         li_unused_72=1;
         if(g_ibuf_236[li_68+SIGNAL_BAR+1]>(-Level) && g_ibuf_236[li_68+SIGNAL_BAR]<(-Level)) manageArr(li_68+1,Red,234,1);
         if(g_ibuf_236[li_68+SIGNAL_BAR+1]<Level && g_ibuf_236[li_68+SIGNAL_BAR]>Level) manageArr(li_68+1,Yellow,233,0);
        }
     }
   if(SIGNAL_BAR > 0 && Time[0] <= g_time_256) return (0);
   g_time_256=Time[0];
   if(Alerts) 
     {
      if(gi_252<=0) 
        {
         if(g_ibuf_236[SIGNAL_BAR+1]>(-Level) && g_ibuf_236[SIGNAL_BAR]<(-Level)) Alert(WindowExpertName()+"  (",Symbol(),", ",Period(),")  -  SELL!!!");
         if(gi_252<=0)
            if(g_ibuf_236[SIGNAL_BAR+1]<Level && g_ibuf_236[SIGNAL_BAR]>Level) Alert(WindowExpertName()+"  (",Symbol(),", ",Period(),")  -  BUY!!!");
        }
     }
   if(AlertSound) 
     {
      if(gi_252<=0) 
        {
         if(g_ibuf_236[SIGNAL_BAR+1]>(-Level) && g_ibuf_236[SIGNAL_BAR]<(-Level)) PlaySound("stops.wav");
         if(gi_252<=0)
            if(g_ibuf_236[SIGNAL_BAR+1]<Level && g_ibuf_236[SIGNAL_BAR]>Level) PlaySound("stops.wav");
        }
     }
   WindowRedraw();
   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void manageArr(int ai_0,color a_color_4,int ai_8,bool ai_12) 
  {
   string name_16="MultiInd"+Time[ai_0];
   double ld_24=3.0*iATR(NULL,0,20,ai_0)/4.0;
   ObjectCreate(name_16,OBJ_ARROW,0,Time[ai_0],0);
   ObjectSet(name_16,OBJPROP_COLOR,a_color_4);
   ObjectSet(name_16,OBJPROP_ARROWCODE,ai_8);
   ObjectSet(name_16,OBJPROP_WIDTH,ArrowSize);
   if(ai_12) 
     {
      ObjectSet(name_16,OBJPROP_PRICE1,High[ai_0]+ld_24);
      return;
     }
   ObjectSet(name_16,OBJPROP_PRICE1,Low[ai_0]-ld_24);
  }
//+------------------------------------------------------------------+
