//Version: 4 //Time: Sunday, November 13, 2006 //+------------------------------------------------------------------+ //| XP Moving Average | //| xpMA.mq4 | //| Developed by Coders Guru | //| http://www.xpworx.com | //+------------------------------------------------------------------+ #property link "http://www.xpworx.com" #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 Yellow #property indicator_color2 Orange #property indicator_color3 Lime #define MODE_DEMA 4 #define MODE_TEMA 5 #define MODE_T3MA 6 #define MODE_JMA 7 /* 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. ------------------------------------*/ /* 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 = 24; extern int MA_Type = MODE_TEMA; extern int MA_Applied = PRICE_CLOSE; extern double T3MA_VolumeFactor = 0.8; extern double JMA_Phase = 0; extern int Step_Period = 4; extern bool DebugMode = false; bool Alert_On = true; bool Arrows_On = true; int UpArrowCode = 233; int DownArrowCode = 234; color UpArrowColor = Lime; color DownArrowColor = Orange; int UpArrowSize = 3; int DownArrowSize = 3; double UpBuffer[]; double DownBuffer[]; double Buffer3[]; double buffer[]; double tempbuffer[]; double matriple[]; double signal[]; int init() { DeleteAllObjects(); IndicatorBuffers(7); SetIndexStyle(2,DRAW_LINE,STYLE_DOT,2); SetIndexBuffer(2,UpBuffer); SetIndexStyle(1,DRAW_LINE,STYLE_DOT,2); SetIndexBuffer(1,DownBuffer); SetIndexStyle(0,DRAW_LINE,STYLE_DOT,2); SetIndexBuffer(0,Buffer3); SetIndexBuffer(3,signal); SetIndexBuffer(4,buffer); SetIndexBuffer(5,tempbuffer); SetIndexBuffer(6,matriple); SetIndexLabel(0,"XP Moving Average"); SetIndexLabel(1,"UpBuffer"); SetIndexLabel(2,"DownBuffer"); SetIndexLabel(3,"Signal"); return(0); } int deinit() { DeleteAllObjects(); 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--; limit=Bars-counted_bars-1; switch (MA_Type) { case 0: case 1: case 2: case 3: { for(i=0; ibuffer[shift+1] ) { DownBuffer[shift] = EMPTY_VALUE; } else { UpBuffer[shift] = CLR_NONE; DownBuffer[shift] = CLR_NONE; } }*/ for(shift=0; shiftdMA) { DownBuffer[shift] = EMPTY_VALUE; } else { UpBuffer[shift] = EMPTY_VALUE; DownBuffer[shift] = EMPTY_VALUE; } } for(shift=0; shift=0;cnt--) { name=ObjectName(cnt); if (StringFind(name,"xpMA",0)>-1) ObjectDelete(name); ObjectsRedraw(); } } bool AlertOnce(string alert_msg, int ref) { static int LastAlert_1 = 0; static int LastAlert_2 = 0; static int LastAlert_3 = 0; static int LastAlert_4 = 0; switch(ref) { case 1: if( LastAlert_1 == 0 || LastAlert_1 < Bars ) { Alert(alert_msg); LastAlert_1 = Bars; return (1); } break; case 2: if( LastAlert_2 == 0 || LastAlert_2 < Bars ) { Alert(alert_msg); LastAlert_2 = Bars; return (1); } break; case 3: if( LastAlert_3 == 0 || LastAlert_3 < Bars ) { Alert(alert_msg); LastAlert_3 = Bars; return (1); } break; case 4: if( LastAlert_4 == 0 || LastAlert_4 < Bars ) { Alert(alert_msg); LastAlert_4 = Bars; return (1); } break; } } void TakeScreenShot(int exit_on = -1) { int count = 1; if(!GlobalVariableCheck("ssc")) { GlobalVariableSet("ssc",1); count = 1; } else { count = GlobalVariableGet("ssc") + 1; GlobalVariableSet("ssc",count); } if ( exit_on > 0 && count > exit_on ) return(0); string filename = "xpMA\\" + "xpMA_" + Symbol() + "_" + DoubleToStr(count,0) + ".jpg"; ScreenShot(filename,320,480); } string PeriodToText() { switch (Period()) { case 1: return("M1"); break; case 5: return("M5"); break; case 15: return("M15"); break; case 30: return("M30"); break; case 60: return("H1"); break; case 240: return("H4"); break; case 1440: return("D1"); break; case 10080: return("W1"); break; case 43200: return("MN1"); break; } }