Need to calculate MACD Signal Line (EMA)

 

Hi

I’m new to this platform and trading. So bear the newish question.

I noticed in MT5 the MACD signal line is based on SMA.

How do I go about calculating the MACD Signal line value based on EMA. I just am after the current value.

I’ve read other posts about this but I am still confused. Some people use limits of say 10. I don’t understand. 

Any help would be great thanks .

I can calculate the macd using the values returned by ima but I don’t know how to use this macd and apply the 9 period Ema.

 

There is a function "ExponentialMAOnBuffer()" in "MovingAverages.mqh".

But the difference between SMA and EMA is subtle.
 
  double myMACD[],mySignal[];

  ArraySetAsSeries(myMACD,true);
  ArraySetAsSeries(mySignal,true);
  
  int MACD = iMACD(_Symbol,_Period,12,26,9,PRICE_CLOSE);
  
  CopyBuffer(MACD,0,0,1,myMACD); // for Histogram
  CopyBuffer(MACD,1,0,1,mySignal); // for Signal
 
lolopodek :

No, you have shown an invalid code. Read the Help: in MQL5, the indicator handle is CREATED ONCE! DO IT IN OnInit () !!!

 



Pass the MACD handle to the MA indicator.

//--- input parameters
input int      FastEMA=12;
input int      SlowEMA=26;
input int      SignalMA=9;
input ENUM_MA_METHOD SignalMethod=MODE_EMA;
input int      SignalShift=0;
input ENUM_APPLIED_PRICE Price=PRICE_CLOSE;
//--- indicator buffers
double         MACDBuffer[];
double         SignBuffer[];
//---
int handleMACD=INVALID_HANDLE,handleSign=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if((handleMACD=iMACD(_Symbol,_Period,FastEMA,SlowEMA,SignalMA,Price))==INVALID_HANDLE ||
      (handleSign=iMA(_Symbol,_Period,SignalMA,SignalShift,SignalMethod,handleMACD))==INVALID_HANDLE)
      return(INIT_PARAMETERS_INCORRECT);
//---
   ArraySetAsSeries(MACDBuffer,true);
   ArraySetAsSeries(SignBuffer,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CopyBuffer(handleMACD,0,0,2,MACDBuffer)!=2 ||
      CopyBuffer(handleSign,0,0,2,SignBuffer)!=2)
      return;
//---
   double curMACD=MACDBuffer[0];   
   double preMACD=MACDBuffer[1];   
   double curSign=SignBuffer[0];   
   double preSign=SignBuffer[1];
//---
   if(curMACD>curSign && preMACD<preSign)
     {
      //---
     }
//---
  }
//+------------------------------------------------------------------+
Files:
MACD.mq5  3 kb
MACD.mq5  4 kb
 

returns is showing error.

and could you say us how to handle buy/sell signal. What's the conditional.

Thanks and take care.

Reason: