//+------------------------------------------------------------------+ //| MA Candles Two Colors: Copylight © 2013, File45 (Phylo) | //| http://codebase.mql4.com/en/author/file45 //| //| Thanks to Mladen for code enhancements: http://www.forex-tsd.com/metatrader-4/20171-please-fix-indicator-ea-82.html | //+------------------------------------------------------------------+ #property indicator_chart_window #property indicator_buffers 4 #property indicator_color1 RoyalBlue//wicks #property indicator_color2 Red//wicks #property indicator_color3 RoyalBlue // Candle Bodies #property indicator_color4 Red // Candle Bodies extern int Candle_MA_Period = 34; extern int Candle_MA_Shift = 0; extern int Candle_Type = 1; extern int Candle_MA_Price = 0; extern int Candle_Shadow_Width = 1; extern int Candle_Body_Width = 3; extern string Type_Key = "0: SMA, 1: EMA, 2: SMMA, 3: LWMA"; extern string Price_Key = "0: Close, 1: Open, 2: High"; extern string Price_Key_cont = " 3: Low, 4: Median"; int MA1 = 1; int MA1_MODE = 0; int MA1_PRICE = 0; int MA1_SHIFT = 0; // ======================== indicator buffers double Bar1[], Bar2[], Candle1[], Candle2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorShortName("MA Candles"); IndicatorBuffers(4); SetIndexBuffer(0,Bar1); SetIndexBuffer(1,Bar2); SetIndexBuffer(2,Candle1); SetIndexBuffer(3,Candle2); SetIndexStyle(0,DRAW_HISTOGRAM,0,Candle_Shadow_Width); SetIndexStyle(1,DRAW_HISTOGRAM,0,Candle_Shadow_Width); SetIndexStyle(2,DRAW_HISTOGRAM,0,Candle_Body_Width); SetIndexStyle(3,DRAW_HISTOGRAM,0,Candle_Body_Width); // ======================== Data Window Truth Table: R up L is Red Candle up Low; R dn L is Red Candle down Low, etc,. SetIndexLabel(0, "R up L, R dn L, B up H, B dn H"); SetIndexLabel(1, "R up H, R dn H, B up L, B dn L"); SetIndexLabel(2, "R up O, R dn C, B up C, B dn O"); SetIndexLabel(3, "R up C, R dn O, B up O, B dn C"); return(0); } double MA_1 (int i = 0){return(iMA(NULL,0,MA1,MA1_SHIFT,MA1_MODE, MA1_PRICE,i));} double MA_2 (int i = 0){return(iMA(NULL,0,Candle_MA_Period,Candle_MA_Shift,Candle_Type, Candle_MA_Price,i));} void SetCandleColor(int col, int i) { double high,low,bodyHigh,bodyLow; bodyHigh = MathMax(Open[i],Close[i]); bodyLow = MathMin(Open[i],Close[i]); high = High[i]; low = Low[i]; Bar1[i] = EMPTY_VALUE; Bar2[i] = EMPTY_VALUE; Candle1[i] = EMPTY_VALUE; Candle2[i] = EMPTY_VALUE; switch(col) { case 1: Bar1[i] = high; Bar2[i] = low; Candle1[i] = bodyHigh; Candle2[i] = bodyLow; break; case 2: Bar2[i] = high; Bar1[i] = low; Candle2[i] = bodyHigh; Candle1[i] = bodyLow; break; } } int start() { for(int i = MathMax(Bars-1-IndicatorCounted(),1); i>=0; i--) { double Ma1 = MA_1(i); double Ma2 = MA_2(i); if(Ma1 > Ma2) { SetCandleColor(1,i); } else { if(Ma1 < Ma2) SetCandleColor(2,i); } /* string Label1="",Label2=""; if(MA1_MODE==0)Label1="MA"; if(MA2_MODE==0)Label2="MA"; if(MA1_MODE==1)Label1="EMA"; if(MA2_MODE==1)Label2="EMA"; if(MA1_MODE==2)Label1="SMMA"; if(MA2_MODE==2)Label2="SMMA"; if(MA1_MODE==3)Label1="LWMA"; if(MA2_MODE==3)Label2="LWMA";*/ } return(0); } int deinit() { return(0); }