//+------------------------------------------------------------------+
//| MA Candles.mq4 |
//| Code adapted by cja |
//+------------------------------------------------------------------+
#property copyright "Code adapted by cja"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 RoyalBlue//wicks
#property indicator_color2 Red//wicks
#property indicator_color3 RoyalBlue
#property indicator_color4 Red
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 3
#property indicator_width4 3
//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.
//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.
//---- indicator parameters
extern string IIIIIIIIIIIIIIIIIIIII=">>> MA Settings >>>>>>>>>>>>>>>>>";
extern int MA1 = 12.0;
extern int MA2 = 26.0;
extern int MA1_MODE = 1;
extern int MA2_MODE = 1;
extern int MA1_PRICE = 0;
extern int MA2_PRICE = 0;
extern int MA1_SHIFT = 0;
extern int MA2_SHIFT = 0;
extern string IIIIIIIIIIIIIIIIIIIIIIIII=">>> Candle/Wick Display Settings >>>>>>>>>>>>>>>>>";
extern int BarWidth = 1,
CandleWidth = 3;
extern bool Show_Comment = true;
//---- indicator buffers
double Bar1[],
Bar2[],
Candle1[],
Candle2[],
Candle3[],
Candle4[],
Candle5[],
Candle6[];
//+------------------------------------------------------------------+
//| 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,BarWidth);
SetIndexStyle(1,DRAW_HISTOGRAM,0,BarWidth);
SetIndexStyle(2,DRAW_HISTOGRAM,0,CandleWidth);
SetIndexStyle(3,DRAW_HISTOGRAM,0,CandleWidth);
SetIndexLabel(0, "MA"+MA1+" + MA"+MA2);
SetIndexLabel(1, "MA"+MA1+" + MA"+MA2);
SetIndexLabel(2, "MA"+MA1+" + MA"+MA2);
SetIndexLabel(3, "MA"+MA1+" + MA"+MA2);
return(0);
}
int deinit()
{
//----
Comment("");
//----
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,MA2,MA2_SHIFT,MA2_MODE, MA2_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] = low; Candle1[i] = bodyLow;
Bar2[i] = low; Candle2[i] = bodyLow;
Bar1[i] = low; Candle3[i] = bodyLow;
Bar2[i] = low; Candle4[i] = bodyLow;
Bar1[i] = low; Candle5[i] = bodyLow;
Bar2[i] = low; Candle6[i] = bodyLow;
switch(col)
{
case 1: Bar1[i] = high; Candle1[i] = bodyHigh; break;
case 2: Bar2[i] = high; Candle2[i] = bodyHigh; break;
case 3: Bar1[i] = high; Candle3[i] = bodyHigh; break;
case 4: Bar2[i] = high; Candle4[i] = bodyHigh; break;
case 5: Bar1[i] = high; Candle5[i] = bodyHigh; break;
case 6: Bar2[i] = high; Candle6[i] = bodyHigh; 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";
if(Show_Comment==true){
Comment("\n","MA Candles "+Label1+" "+MA1+" & "+Label2+ " "+MA2+"");
}
}
return(0);
}
Comments