Code Forex MT4 Indicators

MACD trend- indicator for MetaTrader 4

                               

//=============//
#property copyright “Copyright 2019, Nikolaos Pantzos”
#property link      “https://www.mql5.com/en/users/pannik”
#property version   “1.0”
#property strict
//=============//
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrDodgerBlue
#property indicator_color2 clrRed
//=============//
extern int FastPeriod=12;
extern int SlowPeriod=26;
extern int SignalPeriod=9;
extern ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE;
extern int BarsForAveragePrice=140;
extern double PercentageLevelUp=25;
extern double PercentageLevelDn=25;
//===============//
double UpBuffer[];
double DnBuffer[];
//==============//
int OnInit(void)
  {
//——————————————————————————–
   string iName=”iMACD_Histo(“+IntegerToString(FastPeriod)+”,”+IntegerToString(SlowPeriod)+”,”+IntegerToString(SignalPeriod)+”)”;
//——————————————————————————–
   IndicatorShortName(iName);
   IndicatorDigits((int)MarketInfo(Symbol(),MODE_DIGITS));
//——————————————————————————–
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,3);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,3);
   SetIndexBuffer(0,UpBuffer);
   SetIndexBuffer(1,DnBuffer);
//——————————————————————————–
   SetIndexLabel(0,”UpTrend”);
   SetIndexLabel(1,”DownTrend”);
//——————————————————————————–
   SetIndexDrawBegin(0,SlowPeriod);
   SetIndexDrawBegin(1,SlowPeriod);
//——————————————————————————–
   return(INIT_SUCCEEDED);
//——————————————————————————–
  }
//==============//
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 IndicatorShift=0;
   int IndicatorTrend=0;
   double IndicatorValue=0;
   double AvrgValue=0;
//——————————————————————————–
   for(IndicatorShift=Bars-SlowPeriod-1; IndicatorShift>=0; IndicatorShift–)
     {
      AvrgValue=iMACD(NULL,0,FastPeriod,BarsForAveragePrice,SignalPeriod,AppliedPrice,MODE_MAIN,IndicatorShift);
      IndicatorValue=iMACD(NULL,0,FastPeriod,SlowPeriod,SignalPeriod,AppliedPrice,MODE_MAIN,IndicatorShift);
      //—
      if(IndicatorValue>AvrgValue+((AvrgValue*PercentageLevelDn)/100))
         IndicatorTrend=-1;
      if(IndicatorValue<AvrgValue-((AvrgValue*PercentageLevelUp)/100))
         IndicatorTrend=1;
      //—
      if(IndicatorTrend>0)
        {
         if(IndicatorValue>AvrgValue-((AvrgValue*PercentageLevelUp)/100)/2)
            UpBuffer[IndicatorShift]=1.0;
         else
            UpBuffer[IndicatorShift]=1.0;
         DnBuffer[IndicatorShift]=0;
        }
      //—
      if(IndicatorTrend<0)
        {
         if(IndicatorValue<AvrgValue+((AvrgValue*PercentageLevelDn)/100)/2)
            DnBuffer[IndicatorShift]=1.0;
         else
            DnBuffer[IndicatorShift]=1.0;
         UpBuffer[IndicatorShift]=0;
        }
     }
//———————————————————————————–
   return(rates_total);
//———————————————————————————–
  }
//===============//