MACD Histogram values

Ernest Klokow  

When using the MACD indicator on the chart it shows 2 values -  a Histogram and a Signal line.

If you use the iMACD() function to calculaute the MACD values you have 2 options - MODE_MAIN and MODE_SIGNAL.

I have always assumed thet MODE_MAIN represents the Histogram values.

Now to my dismay I discover that this is a fallacy! It represents the MACD values - of how it is calculated I have no idea! (But I can find out if I am interested)

My trading decisions are based on the MACD Histogram values (among others) and now I find out that if I use MODE_MAIN I get incorrect values.

It seems there is a way to use iCustom() with "iMACD" as the indicator name to get these values - or I have to write code to calculate these values.

Which is the best way? or can it be done with iMACD also?

If code is required is the following code correct?

//Define Inputs
input int  period  = 100;

// define the MACD parameters
int fast_ema_period = 12;
int slow_ema_period = 26;
int signal_period = 9;

// calculate the MACD values
double macd_main[], macd_signal[];
int macd_handle = iMACD(_Symbol, _Period, fast_ema_period, slow_ema_period, signal_period, PRICE_CLOSE);
CopyBuffer(macd_handle, 0, 0, period, macd_main);
CopyBuffer(macd_handle, 1, 0, period, macd_signal);
IndicatorRelease(macd_handle);

// calculate the MACD histogram values
double macd_histogram[];
for(int i = 0; i < period; i++)
{
    macd_histogram[i] = macd_main[i] - macd_signal[i];
}

// output the MACD histogram values to the Experts tab
for(int i = 0; i < period; i++)
{
    Print("MACD Histogram[", i, "]: ", macd_histogram[i]);
}
Yashar Seyyedin  
Ernest Klokow:

When using the MACD indicator on the chart it shows 2 values -  a Histogram and a Signal line.

If you use the iMACD() function to calculaute the MACD values you have 2 options - MODE_MAIN and MODE_SIGNAL.

I have always assumed thet MODE_MAIN represents the Histogram values.

Now to my dismay I discover that this is a fallacy! It represents the MACD values - of how it is calculated I have no idea! (But I can find out if I am interested)

My trading decisions are based on the MACD Histogram values (among others) and now I find out that if I use MODE_MAIN I get incorrect values.

It seems there is a way to use iCustom() with "iMACD" as the indicator name to get these values - or I have to write code to calculate these values.

Which is the best way? or can it be done with iMACD also?

If code is required is the following code correct?

simply:

double signal=iMACD(_Symbol, PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, index);
double main=iMACD(_Symbol, PERIOD_CURRENT, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, index);
double histogram=signal-main;
Ernest Klokow  
Yashar Seyyedin #:

simply:

Thanks a lot Yashar!

Yashar Seyyedin  
Ernest Klokow #:

Thanks a lot Yashar!

You are welcome... Btw I coded MQ4 ... you should convert to MQ5 yourself.

VikThor1029  

And what if both signal and main line has a minus value?

I'd like to get only the histogram values but I think with that way we can have a mathematical error.
William Roeder  
VikThor1029 #:

And what if both signal and main line has a minus value?

I'd like to get only the histogram values but I think with that way we can have a mathematical error.

So what? If main and signal are both negative, but main is above signal, then the histogram is positive (-3 - (-5) = +2).

VikThor1029  
William Roeder #:

So what? If main and signal are both negative, but main is above signal, then the histogram is positive (-3 - (-5) = +2).

btw MODE_MAIN is the histogram value in iMACD
William Roeder  
VikThor1029 #: btw MODE_MAIN is the histogram value in iMACD

No, it is not. Main is the MACD value. Signal is a moving average of MACD. The histogram is the difference between them.

Reason: