MA_filter_6MA_FlatTrend_direct





//+------------------------------------------------------------------+
//|                                                    4MAs Trend.mq4|
//|                                              Flat Trend          |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 1
#property indicator_buffers 3
#property indicator_color1 LimeGreen
#property indicator_color2 Red
#property indicator_color3 Gold

//---- input parameters
extern int Minutes=0;
extern int MA1_Period=7;
extern int MA1_Mode=3;
extern int MA2_Period=9;
extern int MA2_Mode=3;
extern int MA3_Period=11;
extern int MA3_Mode=3;
extern int MA4_Period=13;
extern int MA4_Mode=3;
extern int MA5_Period=15;
extern int MA5_Mode=3;
extern int MA6_Period=21;
extern int MA6_Mode=3;



extern bool DirectionFilterOn  = true;


//extern int MaxBarsToCount=1000;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
string TimeFrameStr;
double MA1,MA2,MA3,MA4,MA5,MA6;
double MA1p,MA2p,MA3p,MA4p,MA5p,MA6p;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
  SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,5,LimeGreen);
  SetIndexBuffer(0,ExtMapBuffer1);
  SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,5, Red);
  SetIndexBuffer(1,ExtMapBuffer2);
  SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,5, Gold);
  SetIndexBuffer(2,ExtMapBuffer3);
  
  for(int i=0; i<=indicator_buffers; i++)  SetIndexLabel(i,NULL);

switch(Minutes)
   {
      case 1 : TimeFrameStr="M1"; break;
      case 5 : TimeFrameStr="M5"; break;
      case 15 : TimeFrameStr="M15"; break;
      case 30 : TimeFrameStr="M30"; break;
      case 60 : TimeFrameStr="H1"; break;
      case 240 : TimeFrameStr="H4"; break;
      case 1440 : TimeFrameStr="D1"; break;
      case 10080 : TimeFrameStr="W1"; break;
      case 43200 : TimeFrameStr="MN"; break;
      default : TimeFrameStr="TF0"; Minutes=0;
   }
   
   if (DirectionFilterOn)string name = " Direction Filter On "; else name = "";
   
   IndicatorShortName("Flat Trend w 6MA ["+TimeFrameStr+"] "+name);  

 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
 {

   int i,limit, counted_bars=IndicatorCounted();

   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit= Bars-counted_bars;

   for(i=limit; i>=0; i--)

   {
   
      ExtMapBuffer1[i]=0.0;   ExtMapBuffer2[i]=0.0;   ExtMapBuffer3[i]=0.0;
   
   
      MA1=iMA(NULL,Minutes,MA1_Period,0,MA1_Mode,5,i);
      MA2=iMA(NULL,Minutes,MA2_Period,0,MA2_Mode,5,i);
      MA3=iMA(NULL,Minutes,MA3_Period,0,MA3_Mode,5,i);
      MA4=iMA(NULL,Minutes,MA4_Period,0,MA4_Mode,5,i);
      MA5=iMA(NULL,Minutes,MA5_Period,0,MA5_Mode,5,i);
      MA6=iMA(NULL,Minutes,MA6_Period,0,MA6_Mode,5,i);


   if (DirectionFilterOn) 
      {
      
      MA1p=iMA(NULL,Minutes,MA1_Period,0,MA1_Mode,5,i+1);
      MA2p=iMA(NULL,Minutes,MA2_Period,0,MA2_Mode,5,i+1);
      MA3p=iMA(NULL,Minutes,MA3_Period,0,MA3_Mode,5,i+1);
      MA4p=iMA(NULL,Minutes,MA4_Period,0,MA4_Mode,5,i+1);
      MA5p=iMA(NULL,Minutes,MA5_Period,0,MA5_Mode,5,i+1);
      MA6p=iMA(NULL,Minutes,MA6_Period,0,MA6_Mode,5,i+1);


      
      if(MA1>MA1p&&MA2>MA2p&&MA3>MA3p&&MA4>MA4p&&MA5>MA5p&&MA6>MA6p)    ExtMapBuffer1[i] = 1;  
      else
      if(MA1<MA1p&&MA2<MA2p&&MA3<MA3p&&MA4<MA4p&&MA5<MA5p&&MA6<MA6p)    ExtMapBuffer2[i] = 1;  
      
      else                                                              ExtMapBuffer3[i] = 1;   
      
      }
   else   
      {
               
      if(MA1>MA2 && MA2>MA3 && MA3>MA4 && MA4>MA5 && MA5>MA6)           ExtMapBuffer1[i] = 1;      
      else
      if(MA1<MA2 && MA2<MA3 && MA3<MA4 && MA4<MA5 && MA5<MA6)           ExtMapBuffer2[i] = 1;  
      
      else                                                              ExtMapBuffer3[i] = 1;          
      
      }
  
  
  
  }
   

//----
   return(0);
 }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:



Indicator Curves created:

Implements a curve of type DRAW_HISTOGRAM


Indicators Used:

Moving average indicator


Custom Indicators Used:

Order Management characteristics:

Other Features: