//+------------------------------------------------------------------+ //| MTF_MA_In_Color.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| Modified from MTF_LSMA_In_Color to use any MA by Robert Hill | //| Added use of Applied Price by Robert Hill | //| Thanks to David Honeywell for MTF code | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, FX Sniper and Robert Hill" #property link "http://www.metaquotes.net/" #define LSMA 4 #define ITREND 5 #define HMA 6 #define NONLAG 7 //---- indicator settings #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Yellow #property indicator_color2 Green #property indicator_color3 Red //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; //---- input parameters /************************************************************************* PERIOD_M1 1 PERIOD_M5 5 PERIOD_M15 15 PERIOD_M30 30 PERIOD_H1 60 PERIOD_H4 240 PERIOD_D1 1440 PERIOD_W1 10080 PERIOD_MN1 43200 You must use the numeric value of the timeframe that you want to use when you set the 'TimeFrame' value with the indicator inputs. --------------------------------------- MODE_SMA 0 Simple moving average, MODE_EMA 1 Exponential moving average, MODE_SMMA 2 Smoothed moving average, MODE_LWMA 3 Linear weighted moving average. LSMA 4 Least Squares Moving Average (linreg) You must use the numeric value of the MA Mode that you want to use when you set the 'ma_mode' value with the indicator inputs. **************************************************************************/ extern int TimeFrame=0; extern int MAPeriod=14; extern string dstr0 = " Moving Average Mode"; extern string dstr1 = " 0 = SMA"; extern string dstr2 = " 1 = EMA"; extern string dstr3 = " 2 = SMMA"; extern string dstr4 = " 3 = LWMA"; extern string dstr5 = " 4 = LSMA"; extern string dstr6 = " 5 = Ehlers Itrend"; extern string dstr7 = " 6 = HMA"; extern string dstr8 = " 7 = NonLag"; extern int MA_Mode=1; extern string p = "--Applied Price Types--"; extern string p0 = " 0 = close"; extern string p1 = " 1 = open"; extern string p2 = " 2 = high"; extern string p3 = " 3 = low"; extern string p4 = " 4 = median(high+low)/2"; extern string p5 = " 5 = typical(high+low+close)/3"; extern string p6 = " 6 = weighted(high+low+close+close)/4"; extern int MAAppliedPrice = 0;//0=close, 1=open, 2=high, 3=low, 4=median(high+low)/2, 5=typical(high+low+close)/3, 6=weighted(high+low+close+close)/4 extern int Draw4HowLongg = 1500; //---- variables int MAMode; string strMAType; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { // IndicatorBuffers(3); //---- drawing settings SetIndexBuffer(2,ExtMapBuffer1); SetIndexBuffer(1,ExtMapBuffer2); SetIndexBuffer(0,ExtMapBuffer3); SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); //---- name for DataWindow and indicator subwindow label switch(TimeFrame) { case 1 : string TimeFrameStr="Period_M1"; break; case 5 : TimeFrameStr="Period_M5"; break; case 15 : TimeFrameStr="Period_M15"; break; case 30 : TimeFrameStr="Period_M30"; break; case 60 : TimeFrameStr="Period_H1"; break; case 240 : TimeFrameStr="Period_H4"; break; case 1440 : TimeFrameStr="Period_D1"; break; case 10080 : TimeFrameStr="Period_W1"; break; case 43200 : TimeFrameStr="Period_MN1"; break; default : TimeFrameStr="Current Timeframe"; } switch (MA_Mode) { case 1: strMAType="EMA"; MAMode=MODE_EMA; break; case 2: strMAType="SMMA"; MAMode=MODE_SMMA; break; case 3: strMAType="LWMA"; MAMode=MODE_LWMA; break; case LSMA: strMAType="LSMA"; break; case ITREND: strMAType="ITrend";break; case HMA: strMAType="HMA";break; case NONLAG: strMAType="NonLag";break; default: strMAType="SMA"; MAMode=MODE_SMA; break; } IndicatorShortName( "MTF_" + strMAType+ " (" +MAPeriod + ") " + "-("+TimeFrameStr+")"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| LSMA with PriceMode | //| PrMode 0=close, 1=open, 2=high, 3=low, 4=median(high+low)/2, | //| 5=typical(high+low+close)/3, 6=weighted(high+low+close+close)/4 | //+------------------------------------------------------------------+ double fLSMA(int iTimeFrame,int Rperiod, int prMode, int mshift) { int i; double sum, price; int length; double lengthvar; double tmp; double wt; length = Rperiod; sum = 0; for(i = length; i >= 1 ; i--) { lengthvar = length + 1; lengthvar /= 3; tmp = 0; switch (prMode) { case 0: price = iClose(NULL,iTimeFrame,length-i+mshift);break; case 1: price = iOpen(NULL,iTimeFrame,length-i+mshift);break; case 2: price = iHigh(NULL,iTimeFrame,length-i+mshift);break; case 3: price = iLow(NULL,iTimeFrame,length-i+mshift);break; case 4: price = (iHigh(NULL,iTimeFrame,length-i+mshift) + iLow(NULL,iTimeFrame,length-i+mshift))/2;break; case 5: price = (iHigh(NULL,iTimeFrame,length-i+mshift) + iLow(NULL,iTimeFrame,length-i+mshift) + iClose(NULL,iTimeFrame,length-i+mshift))/3;break; case 6: price = (iHigh(NULL,iTimeFrame,length-i+mshift) + iLow(NULL,iTimeFrame,length-i+mshift) + iClose(NULL,iTimeFrame,length-i+mshift) + iClose(NULL,iTimeFrame,length-i+mshift))/4;break; } tmp = ( i - lengthvar)*price; sum+=tmp; } wt = sum*6/(length*(length+1)); return(wt); } int start() { datetime TimeArray[]; double MA_Cur, MA_Prev; int i, limit, y=0; int counted_bars = IndicatorCounted(); //---- check for possible errors if (counted_bars<0) return(-1); //---- last counted bar will be recounted if (counted_bars>0) counted_bars--; // Plot defined time frame on to current time frame ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame); limit = Bars - counted_bars; //counted_bars; for( i=0, y=0; i<limit; i++) { if (Time[i]<TimeArray[y]) y++; /*********************************************************** Add your main indicator loop below. You can reference an existing indicator with its iName or iCustom. Rule 1: Add extern inputs above for all neccesary values Rule 2: Use 'TimeFrame' for the indicator time frame Rule 3: Use 'y' for your indicator's shift value **********************************************************/ //========== COLOR CODING =========================================== switch (MA_Mode) { case LSMA : MA_Cur = fLSMA(TimeFrame,MAPeriod, MAAppliedPrice,y); MA_Prev = fLSMA(TimeFrame,MAPeriod, MAAppliedPrice,y+1); break; case ITREND : MA_Cur=iCustom(NULL,TimeFrame,"Ehlers_iTrend",MAPeriod,0,y); MA_Prev=iCustom(NULL,TimeFrame,"Ehlers_iTrend",MAPeriod,0,y+1); break; case HMA : MA_Cur=iCustom(NULL,TimeFrame,"HMA2",MAPeriod,0,y); MA_Prev=iCustom(NULL,TimeFrame,"HMA2",MAPeriod,0,y+1); break; case NONLAG : MA_Cur=iCustom(NULL,TimeFrame,"NonLagMA",MAAppliedPrice,MAPeriod,0,y); MA_Prev=iCustom(NULL,TimeFrame,"NonLagMA",MAAppliedPrice,MAPeriod,0,y+1); break; default : MA_Cur = iMA(NULL,TimeFrame,MAPeriod,0,MAMode, MAAppliedPrice,y); MA_Prev = iMA(NULL,TimeFrame,MAPeriod,0,MAMode, MAAppliedPrice,y+1); } MA_Cur = NormalizeDouble(MA_Cur,MarketInfo(Symbol(), MODE_DIGITS)); MA_Prev = NormalizeDouble(MA_Prev,MarketInfo(Symbol(), MODE_DIGITS)); ExtMapBuffer3[i] = MA_Cur; //red ExtMapBuffer2[i] = MA_Cur; //green ExtMapBuffer1[i] = MA_Cur; //yellow if (MA_Prev > MA_Cur) { ExtMapBuffer2[i] = EMPTY_VALUE; } else if (MA_Prev < MA_Cur) { ExtMapBuffer1[i] = EMPTY_VALUE; //-1 red/greem tight } else { ExtMapBuffer1[i]=EMPTY_VALUE;//EMPTY_VALUE; ExtMapBuffer2[i]=EMPTY_VALUE;//EMPTY_VALUE; } } return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains open prices of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains open time of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Moving average indicator
Custom Indicators Used:
Ehlers_iTrend
HMA2
NonLagMA
Order Management characteristics:
Other Features: