Search
Close this search box.

MACD Candle Indicator for Mt4 – indicator for MetaTrader 4

Displays Colored Candle Bars for MACD indicator above or below the zero (0) level. 

Thank you for reading this post, don't forget to subscribe!

Configurable parameters:

  • MACD Levels
  • Email Alert
  • Audible Alert
  • Push Notification
#property copyright   "MACD Above Below Zero Color Bars"                   
#property copyright   "ckart1.simplesite.com"  
                           
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <stdlib.mqh>
#include <stderror.mqh>

//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 8

#property indicator_type1 DRAW_HISTOGRAM
#property indicator_style1 STYLE_SOLID
#property indicator_width1 3
#property indicator_color1 0xFF2600
#property indicator_label1 "MACD Above Zero"

#property indicator_type2 DRAW_HISTOGRAM
#property indicator_style2 STYLE_SOLID
#property indicator_width2 3
#property indicator_color2 0xFF0303
#property indicator_label2 "MACD Above Zero"

#property indicator_type3 DRAW_HISTOGRAM
#property indicator_style3 STYLE_SOLID
#property indicator_width3 1
#property indicator_color3 0xFF0033
#property indicator_label3 "MACD Above Zero"

#property indicator_type4 DRAW_HISTOGRAM
#property indicator_style4 STYLE_SOLID
#property indicator_width4 1
#property indicator_color4 0xFF0059
#property indicator_label4 "MACD Above Zero"

#property indicator_type5 DRAW_HISTOGRAM
#property indicator_style5 STYLE_SOLID
#property indicator_width5 3
#property indicator_color5 0x0000FF
#property indicator_label5 "MACD Below Zero"

#property indicator_type6 DRAW_HISTOGRAM
#property indicator_style6 STYLE_SOLID
#property indicator_width6 3
#property indicator_color6 0x0000FF
#property indicator_label6 "MACD Below Zero"

#property indicator_type7 DRAW_HISTOGRAM
#property indicator_style7 STYLE_SOLID
#property indicator_width7 1
#property indicator_color7 0x0000FF
#property indicator_label7 "MACD Below Zero"

#property indicator_type8 DRAW_HISTOGRAM
#property indicator_style8 STYLE_SOLID
#property indicator_width8 1
#property indicator_color8 0x0000FF
#property indicator_label8 "MACD Below Zero"

//--- indicator buffers
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
double Buffer5[];
double Buffer6[];
double Buffer7[];
double Buffer8[];

extern int Fast_EMA = 12;
extern int Slow_EMA2 = 26;
extern int MACD_SMA3 = 9;
datetime time_alert; //used when sending alert
extern bool Send_Email = false;
extern bool Audible_Alerts = true;
extern bool Push_Notifications = false;
double myPoint; //initialized in OnInit

void myAlert(string type, string message)
  {
   if(type == "print")
      Print(message);
   else if(type == "error")
     {
      Print(type+" | MACD Above Below Zero @ "+Symbol()+","+Period()+" | "+message);
     }
   else if(type == "order")
     {
     }
   else if(type == "modify")
     {
     }
   else if(type == "indicator")
     {
      Print(type+" | MACD Above Below Zero @ "+Symbol()+","+Period()+" | "+message);
      if(Audible_Alerts) Alert(type+" | MACD Above Below Zero @ "+Symbol()+","+Period()+" | "+message);
      if(Send_Email) SendMail("MACD Above Below Bars", type+" | Gann Arrow @ "+Symbol()+","+Period()+" | "+message);
      if(Push_Notifications) SendNotification(type+" | MACD Above Below Zero @ "+Symbol()+","+Period()+" | "+message);
     }
  }

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {   
   IndicatorBuffers(8);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0, 0);
   SetIndexBuffer(1, Buffer2);
   SetIndexEmptyValue(1, 0);
   SetIndexBuffer(2, Buffer3);
   SetIndexEmptyValue(2, 0);
   SetIndexBuffer(3, Buffer4);
   SetIndexEmptyValue(3, 0);
   SetIndexBuffer(4, Buffer5);
   SetIndexEmptyValue(4, 0);
   SetIndexBuffer(5, Buffer6);
   SetIndexEmptyValue(5, 0);
   SetIndexBuffer(6, Buffer7);
   SetIndexEmptyValue(6, 0);
   SetIndexBuffer(7, Buffer8);
   SetIndexEmptyValue(7, 0);
   //initialize myPoint
   myPoint = Point();
   if(Digits() == 5 || Digits() == 3)
     {
      myPoint *= 10;
     }
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| 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 limit = rates_total - prev_calculated;
   //--- counting from 0 to rates_total
   ArraySetAsSeries(Buffer1, true);
   ArraySetAsSeries(Buffer2, true);
   ArraySetAsSeries(Buffer3, true);
   ArraySetAsSeries(Buffer4, true);
   ArraySetAsSeries(Buffer5, true);
   ArraySetAsSeries(Buffer6, true);
   ArraySetAsSeries(Buffer7, true);
   ArraySetAsSeries(Buffer8, true);
   //--- initial zero
   if(prev_calculated < 1)
     {
      ArrayInitialize(Buffer1, 0);
      ArrayInitialize(Buffer2, 0);
      ArrayInitialize(Buffer3, 0);
      ArrayInitialize(Buffer4, 0);
      ArrayInitialize(Buffer5, 0);
      ArrayInitialize(Buffer6, 0);
      ArrayInitialize(Buffer7, 0);
      ArrayInitialize(Buffer8, 0);
     }
   else
      limit++;
   
   //--- main loop
   for(int i = limit-1; i >= 0; i--)
     {
      if (i >= MathMin(1000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation   
      //Indicator Buffer 1
      if(iMACD(NULL, PERIOD_CURRENT, Fast_EMA, Slow_EMA2, MACD_SMA3, PRICE_CLOSE, MODE_MAIN, i) > 0 //MACD > fixed value
      )
        {
         Buffer1[i] = Open[i]; //Set indicator value at Candlestick Open
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "MACD Above Above Zero"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer1[i] = 0;
        }
      //Indicator Buffer 2
      if(iMACD(NULL, PERIOD_CURRENT, Fast_EMA, Slow_EMA2, MACD_SMA3, PRICE_CLOSE, MODE_MAIN, i) > 0 //MACD > fixed value
      )
        {
         Buffer2[i] = Close[i]; //Set indicator value at Candlestick Close
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "MACD Above Above Zero"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer2[i] = 0;
        }
      //Indicator Buffer 3
      if(iMACD(NULL, PERIOD_CURRENT, Fast_EMA, Slow_EMA2, MACD_SMA3, PRICE_CLOSE, MODE_MAIN, i) > 0 //MACD > fixed value
      )
        {
         Buffer3[i] = High[i]; //Set indicator value at Candlestick High
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "MACD Above Above Zero"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer3[i] = 0;
        }
      //Indicator Buffer 4
      if(iMACD(NULL, PERIOD_CURRENT, Fast_EMA, Slow_EMA2, MACD_SMA3, PRICE_CLOSE, MODE_MAIN, i) > 0 //MACD > fixed value
      )
        {
         Buffer4[i] = Low[i]; //Set indicator value at Candlestick Low
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "MACD Above Above Zero"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer4[i] = 0;
        }
      //Indicator Buffer 5
      if(iMACD(NULL, PERIOD_CURRENT, Fast_EMA, Slow_EMA2, MACD_SMA3, PRICE_CLOSE, MODE_MAIN, i) < 0 //MACD < fixed value
      )
        {
         Buffer5[i] = Open[i]; //Set indicator value at Candlestick Open
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "MACD Above Below Zero"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer5[i] = 0;
        }
      //Indicator Buffer 6
      if(iMACD(NULL, PERIOD_CURRENT, Fast_EMA, Slow_EMA2, MACD_SMA3, PRICE_CLOSE, MODE_MAIN, i) < 0 //MACD < fixed value
      )
        {
         Buffer6[i] = Close[i]; //Set indicator value at Candlestick Close
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "MACD Above Below Zero"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer6[i] = 0;
        }
      //Indicator Buffer 7
      if(iMACD(NULL, PERIOD_CURRENT, Fast_EMA, Slow_EMA2, MACD_SMA3, PRICE_CLOSE, MODE_MAIN, i) < 0 //MACD < fixed value
      )
        {
         Buffer7[i] = High[i]; //Set indicator value at Candlestick High
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "MACD Above Below Zero"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer7[i] = 0;
        }
      //Indicator Buffer 8
      if(iMACD(NULL, PERIOD_CURRENT, Fast_EMA, Slow_EMA2, MACD_SMA3, PRICE_CLOSE, MODE_MAIN, i) < 0 //MACD < fixed value
      )
        {
         Buffer8[i] = Low[i]; //Set indicator value at Candlestick Low
         if(i == 0 && Time[0] != time_alert) { myAlert("indicator", "MACD Above Below Zero"); time_alert = Time[0]; } //Instant alert, only once per bar
        }
      else
        {
         Buffer8[i] = 0;
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

MT4 Indicators – Download Instructions

MACD Candle Indicator for Mt4 is a Metatrader 4 (MT4) indicator and the essence of the forex indicator is to transform the accumulated history data.Subway provides for an opportunity to detect various peculiarities and patterns in price dynamics which are invisible to the naked eye.

Based on this information, traders can assume further price movement and adjust their strategy accordingly.

How to install the software?

  • Download the mq4 file from the zip file.
  • Copy the mq4 file to your Metatrader Directory / experts / indicators /
  • Start or restart your Metatrader Client
  • Select Chart and Timeframe where you want to test your indicator
  • Search “Custom Indicators” in your Navigator mostly left in your Metatrader Client
  • Right click on the mq4 file.
  • Attach to a chart
  • Modify settings or press ok
  • Indicator should be available on your Chart

How to remove tim.mq4 from your Metatrader 4 Chart?

  • Select the Chart where is the Indicator running in your Metatrader Client
  • Right click into the Chart
  • “Indicators list”
  • Select the Indicator and delete

MT4 Indicators Download below:

 

MT4 Indicators – Download Instructions

[post-title] is a Metatrader 4 (MT4) indicator and the essence of the forex indicator is to transform the accumulated history data.

[post-title] provides for an opportunity to detect various peculiarities and patterns in price dynamics which are invisible to the naked eye.

Based on this information, traders can assume further price movement and adjust their strategy accordingly.

How to install [post-title].mq4?

  • Download [post-title].mq4
  • Copy [post-title].mq4 to your Metatrader Directory / experts / indicators /
  • Start or restart your Metatrader Client
  • Select Chart and Timeframe where you want to test your indicator
  • Search “Custom Indicators” in your Navigator mostly left in your Metatrader Client
  • Right click on [post-title].mq4
  • Attach to a chart
  • Modify settings or press ok
  • Indicator [post-title].mq4 is available on your Chart
  •  

How to remove [post-title].mq4 from your Metatrader 4 Chart?

  • Select the Chart where is the Indicator running in your Metatrader Client
  • Right click into the Chart
  • “Indicators list”
  • Select the Indicator and delete
 

xm-no-deposit-bonus

Download ALL Metatrader 4/5 Indicators For FREE!

Top MT4 Indicators

Top MT5 Indicators

FREE Forex Trendsetter

Enter your name and email below to get this free strategy.