//+------------------------------------------------------------------+ //| 4h_MACD_FX_Strategy.mq4 | //| Giorgio "Obi Wan" Scarabello | //| http://www.fxtradeblog.com/index.html | //+------------------------------------------------------------------+ #property copyright "Giorgio Obi Wan Scarabello" #property link "http://www.fxtradeblog.com/index.html" #property indicator_chart_window #property indicator_buffers 5 #property indicator_color1 SkyBlue #property indicator_color2 MediumSeaGreen #property indicator_color3 Red #property indicator_color4 Blue #property indicator_color5 Green #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 2 #property indicator_width4 3 #property indicator_width5 1 #property indicator_style1 2 #property indicator_style2 2 #property indicator_style3 0 #property indicator_style4 0 #property indicator_style5 2 //---- buffers double ExtMapBuffer1[]; double ExtMapBuffer2[]; double ExtMapBuffer3[]; double ExtMapBuffer4[]; double ExtMapBuffer5[]; //---- Variables double EMA8=0.0; double EMA21=0.0; double SMA89=0.0; double SMA200=0.0; double EMA365=0.0; int rhythm=0; string rh=""; int x=0; int limit; int col=0xFFFFFF; extern int fontsize = 10; extern int corner = 3; //extern bool orientation = 0; extern int xdispl = 1; extern int ydispl = 1; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,ExtMapBuffer1); SetIndexLabel(0,"EMA 8"); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1,ExtMapBuffer2); SetIndexLabel(1,"EMA 21"); SetIndexStyle(2,DRAW_LINE); SetIndexBuffer(2,ExtMapBuffer3); SetIndexLabel(2,"SMA 89"); SetIndexStyle(3,DRAW_LINE); SetIndexBuffer(3,ExtMapBuffer4); SetIndexLabel(3,"SMA 200"); SetIndexStyle(4,DRAW_LINE); SetIndexBuffer(4,ExtMapBuffer5); SetIndexLabel(4,"EMA 365"); //---- //---- Text Object ObjectCreate("Rhythm", OBJ_LABEL, 0, 0, 0); //ObjectSetText("Range", gs_rRange,fontsize,"Arial",Yellow); ObjectSet("Rhythm", OBJPROP_CORNER, corner); ObjectSet("Rhythm", OBJPROP_XDISTANCE, xdispl); ObjectSet("Rhythm", OBJPROP_YDISTANCE, ydispl); //---- Line Objects ObjectCreate("Roundover", OBJ_HLINE, 0, 0, 0); ObjectSet("Roundover", OBJPROP_STYLE, STYLE_DASH); ObjectSet("Roundover", OBJPROP_COLOR, Lime); ObjectCreate("Roundunder", OBJ_HLINE, 0, 0, 0); ObjectSet("Roundunder", OBJPROP_STYLE, STYLE_DASH); ObjectSet("Roundunder", OBJPROP_COLOR, Red); return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- ObjectDelete("Rhythm"); ObjectDelete("Roundover"); ObjectDelete("Roundunder"); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); //---- if(counted_bars>0) counted_bars--; limit=Bars-counted_bars; //Moving averages stuff for (x=limit; x>=0; x--) { //calculation EMA8=iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,x); EMA21=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,x); SMA89=iMA(NULL,0,89,0,MODE_SMA,PRICE_CLOSE,x); SMA200=iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,x); EMA365=iMA(NULL,0,365,0,MODE_EMA,PRICE_CLOSE,x); //drawing ExtMapBuffer1[x]=EMA8; ExtMapBuffer2[x]=EMA21; ExtMapBuffer3[x]=SMA89; ExtMapBuffer4[x]=SMA200; ExtMapBuffer5[x]=EMA365; } //Rhythm stuff rhythm=0; if (Close[0]>SMA89) { rhythm=1; rh="Weak Bull Rhythm Strength"; col=0xAAFFAA; if (Close[0]>EMA8) { rhythm++; rh="Strong Bull Rhythm Strength"; col=0x00FF00; } } else if (Close[0]<SMA89) { rhythm=-1; rh="Weak Bear Rhythm Strength"; col=0xAAAAFF; if (Close[0]<EMA8) { rhythm--; rh="Strong Bear Rhythm Strength"; col=0x0000FF; } } else { rhythm=0; rh="No Rhythm Strength"; col=0xFFFFFF; } ObjectSetText("Rhythm", "Rhythm="+rhythm+" "+rh,fontsize,"Tahoma",col); //---- Lines stuff //---- Price calculation string hs1, hs2; double hv1, hv2; hs1=DoubleToStr( Close[0], Digits); hs1=StringSubstr( hs1, 0, 4); hs1=hs1+"00"; hv1= StrToDouble(hs1); if (Digits==4) { hv1=hv1+0.01; } else { hv1++; } hs2=DoubleToStr( Close[0], Digits); hs2=StringSubstr( hs2, 0, 4); hs2=hs2+"00"; hv2= StrToDouble(hs2); //---- Drawing ObjectSet("Roundover", OBJPROP_PRICE1, hv1); ObjectSet("Roundunder", OBJPROP_PRICE1, hv2); //---- return(0); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: