//=============//#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);//———————————————————————————– }//===============//