//+------------------------------------------------------------------+ //| XP Moving Average | //| xpMA.mq4 | //| Developed by Coders Guru | //| mod2007forextsd.com ki http://www.xpworx.com | //+------------------------------------------------------------------+ #property link "http://www.xpworx.com" #property indicator_chart_window #property indicator_buffers 3 #property indicator_color1 Yellow #property indicator_color2 Red #property indicator_color3 Blue /* Moving average types constants: ------------------------------------ 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. MODE_DEMA 4 Double Exponential Moving Average. MODE_TEMA 5 Triple Exponential Moving Average. MODE_T3MA 6 T3 Moving Average. MODE_JMA 7 Jurik Moving Average. MODE_SATL 8 SATL Moving Average. MODE_FATL 8 FATL (RFTL) Moving Average. ------------------------------------*/ /* Applied price constants: ------------------------------- PRICE_CLOSE 0 Close price. PRICE_OPEN 1 Open price. PRICE_HIGH 2 High price. PRICE_LOW 3 Low price. PRICE_MEDIAN 4 Median price, (high+low)/2. PRICE_TYPICAL 5 Typical price, (high+low+close)/3. PRICE_WEIGHTED 6 Weighted close price, (high+low+close+close)/4. --------------------------------- */ extern int MA_Period = 34; extern int MA_Type = 0; extern int MA_Mode = 0; extern int MA_AppliedPrice = PRICE_CLOSE; extern double T3b = 0.618; extern double JMA_Phase = 0; extern int MaxBarsToCount = 900; extern string note__MA_Type_Mode ="SMA0 EMA1 SMMA2 LWMA3 DEMA4 TEMA5 T3MA6 JMA7 SATL8 FATL9"; extern string MA_Price_ ="0C 1O 2H3L 4Md 5Tp 6WghC: Md(HL/2)4,Tp(HLC/3)5,Wgh(HLCC/4)6"; double UpBuffer[]; double DownBuffer[]; double Buffer3[]; double buffer[]; double tempbuffer[]; double matriple[]; int init() { string short_name; IndicatorBuffers(6); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,UpBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,DownBuffer); SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(3,Buffer3); SetIndexBuffer(0,buffer); SetIndexBuffer(4,tempbuffer); SetIndexBuffer(5,matriple); switch(MA_Type) { case 1 : short_name= " EMA(" ; break; case 2 : short_name= " SMMA("; break; case 3 : short_name= " LWMA("; break; case 4 : short_name= " DEMA("; break; case 5 : short_name= " TEMA("; break; case 6 : short_name= " T3MA("; break; case 7 : short_name= " JMA(" ; break; case 8 : short_name= " SATL("; break; case 9 : short_name= " FATL("; break; default: short_name= " SMA(" ; } SetIndexLabel(0,"xpMA "+short_name +" ("+ MA_Period+") "); IndicatorShortName( "xpMA "+short_name +" ("+ MA_Period+")"); return(0); } int deinit() { return(0); } void start() { int limit; int i = 0; int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; // if(counted_bars<0) return(-1); // limit=Bars-counted_bars-1; limit=Bars-counted_bars; limit=MathMin(limit,MaxBarsToCount); switch (MA_Type) { case 0: case 1: case 2: case 3: { for(i=0; i<limit; i++) { buffer[i] = iMA(NULL,0,MA_Period,0,MA_Type,MA_AppliedPrice,i); } } break; case 4: { for(i=0; i<limit; i++) { tempbuffer[i] = iMA(NULL,0,MA_Period,0,MODE_EMA,MA_AppliedPrice,i); } for(i=0; i<limit; i++) { matriple[i] = iMAOnArray(tempbuffer,0,MA_Period,0,MODE_EMA,i); } for(i=0; i<limit; i++) { buffer[i] = iMAOnArray(matriple,0,MA_Period,0,MODE_EMA,i); } } break; case 5: { for(i=0; i<limit; i++) { tempbuffer[i] = iMA(NULL,0,MA_Period,0,MODE_EMA,MA_AppliedPrice,i); } for(i=0; i<limit; i++) { buffer[i] = iMAOnArray(tempbuffer,0,MA_Period,0,MODE_EMA,i); } } break; case 6: { for(i=0; i<limit; i++) { buffer[i] = iCustom(NULL,0,"T3_clean",MA_Period,MA_AppliedPrice,T3b,0,i); } } break; case 7: { for(i=0; i<limit; i++) { buffer[i] = iCustom(NULL,0,"JMA",MA_Period,JMA_Phase,0,i); } } break; case 8: { for(i=0; i<limit; i++) { buffer[i] = iCustom(NULL,0,"SATL",0,i); } } break; case 9: { for(i=0; i<limit; i++) { buffer[i] = iCustom(NULL,0,"RFTL",MaxBarsToCount,0,i); } } break; } for(int shift=0; shift<limit; shift++) { UpBuffer[shift] = buffer[shift]; DownBuffer[shift] = buffer[shift]; Buffer3[shift] = buffer[shift]; } for(shift=0; shift<limit; shift++) { if (buffer[shift]<buffer[shift+1]) { UpBuffer[shift] = EMPTY_VALUE; } else if (buffer[shift]>buffer[shift+1] ) { DownBuffer[shift] = EMPTY_VALUE; } else { UpBuffer[shift] = EMPTY_VALUE; DownBuffer[shift] = EMPTY_VALUE; } } return(0); }
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Moving average indicator
Custom Indicators Used:
JMA
SATL
RFTL
T3_clean
Order Management characteristics:
Other Features: