_2523Macd
Download scriptThis script is a custom technical analysis tool designed for the MetaTrader platform. It enhances the traditional Moving Average Convergence Divergence (MACD) indicator by providing a multi-layered visual summary of market momentum, trend direction, and potential entry/exit points.
Core Analytical Logic
The tool operates by calculating three primary visual components simultaneously:
- The MACD Line: This represents the difference between two distinct moving averages (a "fast" average and a "slow" average). It helps identify the immediate strength of price movement relative to its longer-term history.
- The Signal Line: This is a smoothed average of the MACD line itself. It acts as a secondary filter, helping traders distinguish between minor market noise and significant trend shifts.
- The Histogram: This serves as a visual representation of the "gap" between the MACD line and the Signal line. When the histogram grows, it indicates increasing momentum; when it shrinks or crosses the zero level, it suggests a potential change in trend direction.
Advanced Features and Visual Aids
Beyond the standard calculations, the script includes several specialized features to assist with trade interpretation:
- Historical Tracking: The tool displays a secondary MACD line that reflects the values from the previous bar, allowing for a quicker visual comparison of how momentum is evolving from one candle to the next.
- Zero Line Reference: A clear baseline is provided to help traders instantly see whether the current market sentiment is leaning toward bullish (above the line) or bearish (below the line) territory.
- Automated Signal Arrows: The script contains a specific logic engine that can automatically place visual markers (arrows) on the price chart based on momentum shifts:
- Entry Signals: It identifies moments when the histogram crosses from positive to negative (or vice versa) and places an arrow to highlight potential long or short opportunities.
- Trend Exhaustion: It tracks "active trades" internally. If the momentum begins to slow down or reverse against the current trend, it can place a secondary marker to signal that the current move may be losing steam.
Summary of User Experience
For the trader, this tool transforms raw price data into a structured visual environment. By combining multiple smoothed averages with a dynamic histogram and optional automated signals, it aims to filter out market volatility and highlight clear trends, making it easier to decide when to enter, hold, or exit a position.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
/////////////////////////////////////////////////////////////////////////////////////////////
//| mymacd v2 12/11/05
/////////////////////////////////////////////////////////////////////////////////////////////
#property link "jpygbp@yahoo.com"
#property indicator_buffers 5
#property indicator_separate_window
#property indicator_color1 HotPink //macd
#property indicator_color2 Lime //signal
#property indicator_color3 Gray //histogram
#property indicator_color4 Blue //macd[1]
#property indicator_color5 Black //zero line
//---- buffers
double Buffer1[]; //macd
double Buffer2[]; //signal
double Buffer3[]; //histogram
double Buffer4[]; //macd[1]
double Buffer5[]; //zero line
//
extern int FastEMA = 9;
extern int SlowEMA = 64;
extern int SignalSMA = 112;
//extern bool plotMACD = true;
//extern bool plotSignalLine = true;
//extern bool plotHistogram = true;
//extern bool plotMACDOneBarAgo = true;
//extern bool plotZeroLine = true;
extern bool plotArrows = false;
extern double HistThreshold = 0;
//
//
int limit = 0;
int fontsize=10;
int i = 0;
bool InLTrade = false;
bool InSTrade = false;
/////////////////////////////////////////////////////////////////////////////////////////////
int init()
{
ObjectsDeleteAll();
//---- indicators
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);//macd
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);//signal
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2);//hist
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);//macd[1]
SetIndexStyle(4,DRAW_LINE,STYLE_SOLID,1);//zero
//
SetIndexBuffer(0,Buffer1);
SetIndexBuffer(1,Buffer2);
SetIndexBuffer(2,Buffer3);
SetIndexBuffer(3,Buffer4);
SetIndexBuffer(4,Buffer5);
//
SetIndexDrawBegin(1,SignalSMA);
//
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
//
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
//
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
SetIndexLabel(2,"Histogram");
SetIndexLabel(3,"MACD[1]");
SetIndexLabel(4,"Zero");
//
return(0);
}
/////////////////////////////////////////////////////////////////////////////////////////////
string NewArrow(datetime T1, double P1, color collor)
{
string N=StringConcatenate("A",collor,"-",TimeToStr(T1));
int AC=SYMBOL_STOPSIGN;
if(collor==Blue)
AC=SYMBOL_ARROWUP;
if(collor==Red)
AC=SYMBOL_ARROWDOWN;
//
ObjectCreate(N, OBJ_ARROW, 0, T1, P1);
ObjectSet(N, OBJPROP_ARROWCODE, AC);
ObjectSet(N, OBJPROP_COLOR, collor);
ObjectSet(N, OBJPROP_WIDTH, 1);
ObjectsRedraw();
return(N);
}
/////////////////////////////////////////////////////////////////////////////////////////////
int deinit()
{
ObjectsRedraw();
return(0);
}
/////////////////////////////////////////////////////////////////////////////////////////////
int start()
{
int counted_bars=IndicatorCounted();
if(counted_bars<0) return(-1);//---- check for possible errors
if(counted_bars>0) counted_bars--;//---- last counted bar will be recounted
limit=Bars-counted_bars;
//
for(i=0; i<limit; i++)//---- macd counted in the 1-st buffer histogram
Buffer1[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//
for(i=0; i<limit; i++)//---- signal line counted in the 2-nd buffer line
Buffer2[i]=iMAOnArray(Buffer1,Bars,SignalSMA,0,MODE_SMA,i);
//
for(i=0; i<limit; i++)//---- histogram is the difference between macd and signal line
{
Buffer3[i]=Buffer1[i]-Buffer2[i];
Buffer5[i]=0;
}
//
for(i=1; i<limit; i++)//---- macd[1]
Buffer4[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i-1)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i-1);
//
if (plotArrows)
{
ObjectsDeleteAll();
InLTrade = false;
InSTrade = false;
for(int i=Bars;i>=0;i--)
{
if ((Buffer3[i-1] > 0) && (Buffer3[i] < 0) && Buffer3[i-1] > HistThreshold)//Long Begin
{
string upArrow1=NewArrow(Time[i-1], High[i-1]+0.0005, Blue);
InLTrade = true;
}
if ((Buffer3[i-1] < 0) && (Buffer3[i] > 0) && Buffer3[i-1] < -HistThreshold)//Short Begin
{
string dnArrow1=NewArrow(Time[i-1], Low[i-1]-0.0003, Red);
InSTrade = true;
InLTrade = false;
}
if ((InSTrade == true) && (Buffer3[i-1] > Buffer3[i]))//Short End
{
string upArrow2=NewArrow(Time[i-1], Low[i-1]-0.0003, Aqua);
InSTrade = false;
}
if ((InLTrade == true) && (Buffer3[i-1] < Buffer3[i]))//Long End
{
string dnArrow2=NewArrow(Time[i-1], High[i-1]+0.0005, Aqua);
InLTrade = false;
}
}
}
//
//
return(0);
}
/////////////////////////////////////////////////////////////////////////////////////////////
Comments