//+------------------------------------------------------------------+
//|                                                      MAArrow.mq4 |
//|                                                         BlueRain |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

extern int period_MA1 = 5;
extern int period_MA2 = 13;
extern ENUM_MA_METHOD MA_Method = MODE_EMA;
extern ENUM_APPLIED_PRICE MA_Price = PRICE_TYPICAL;
extern int SignalCandleShift = 1;


int OnInit()
  {
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }

int deinit()
{

ObjectDelete(0,"MA_Signal");

return (0);

}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   int BuySellSignal = GetSignal();
   
   double atr = iATR(Symbol(),PERIOD_CURRENT,14,SignalCandleShift);
   if ( ObjectFind(0,"MA_Signal") >= 0 ) ObjectDelete(0,"MA_Signal");
   
   if ( BuySellSignal == 1)
   {
       ObjectCreate("MA_Signal",OBJ_ARROW_UP,0,Time[SignalCandleShift],High[SignalCandleShift] + atr);
   }
   else   if ( BuySellSignal == -1)
   {
   
       ObjectCreate("MA_Signal",OBJ_ARROW_DOWN,0,Time[SignalCandleShift],Low[SignalCandleShift] + atr);
    }
    
    
   

   
   return(rates_total);
  }
//+------------------------------------------------------------------+
int GetSignal()
 { 
  double FastEMA=iMA(NULL,0,period_MA1,0,MA_Method,MA_Price,SignalCandleShift);
  double SlowEMA=iMA(NULL,0,period_MA2,0,MA_Method,MA_Price,SignalCandleShift);
  
  double PrevFastEMA=iMA(NULL,0,period_MA1,0,MA_Method,MA_Price,SignalCandleShift+1);
  double PrevSlowEMA=iMA(NULL,0,period_MA2,0,MA_Method,MA_Price,SignalCandleShift+1);  
 
  int vSig=0;
  //buy
  if(PrevFastEMA<=PrevSlowEMA && FastEMA>SlowEMA  )vSig = 1;
  else
  if(PrevFastEMA>=PrevSlowEMA && FastEMA<SlowEMA )vSig =-1;
  return(vSig); 
 }