MA_in_color_d
Download scriptThis tool is designed for traders who use Moving Averages (MA) to identify trends in financial markets. Rather than showing a single, static line that can sometimes be difficult to interpret during fast-moving price action, this script provides a dynamic visual experience by changing colors and markers based on the direction of the trend.
Core Functionality
The primary purpose of this script is to provide a "Color Coded" Moving Average. It calculates the average price over a specific period (which you can customize) and then compares the current value against the previous value to determine the momentum of the market.
How the Logic Works:
-
Customizable Calculation Types: The script is versatile because it allows you to choose between several different types of Moving Averages, including Simple (SMA), Exponential (EMA), Smoothed (SMMA), Linear Weighted (LWMA), and Least Squares (LSMA). Each of these reacts differently to price data, allowing you to choose the "smoothness" that best fits your trading style.
-
Trend Detection: The script constantly looks at two points in time: the current average value and the immediate previous average value.
- If the current average is higher than the previous one, the script identifies an upward trend.
- If the current average is lower than the previous one, the script identifies a downward trend.
-
Visual Feedback: Instead of just showing you a line that goes up and down, the script uses these detections to change the visual output on your chart:
- Upward Momentum: When the average is rising, the script highlights the trend in one color (Green) and can optionally place specific markers (dots/arrows) to signal strength.
- Downward Momentum: When the average is falling, the script switches the highlight to a different color (Red) and provides corresponding markers.
Key Benefits for the User:
- Instant Visual Cues: You no longer have to squint at the line to see if it's tilting up or down; the color change provides an immediate visual signal of the current market direction.
- Reduced Complexity: By automating the comparison between the "current" and "previous" values, the script removes the manual work of interpreting momentum, allowing you to focus on your entry and exit points.
- Flexible Customization: You can easily adjust the "Period" to make the indicator more sensitive (reacting quickly to small changes) or more stable (filtering out minor market noise).
//+------------------------------------------------------------------+
//| MA_In_Color.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| Modified from LSMA_In_Color to use any MA by Robert Hill |
//+------------------------------------------------------------------+
//mod
#property copyright "Copyright © 2006, FX Sniper and Robert Hill"
#property link "http://www.metaquotes.net/"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
#property indicator_color4 DodgerBlue
#property indicator_color5 OrangeRed
extern int MAPeriod=5;
extern int MAType=1;
extern bool dots =1;
extern string MA_Method_Price = "SMA0 EMA1 SMMA2 LWMA3 LSMA4||0O,1C 2H3L,4Md 5Tp 6WghC: Md(HL/2)4,Tp(HLC/3)5,Wgh(HLCC/4)6";
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
//---- variables
int MAMode;
string strMAType;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(5);
//---- drawing settings
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE);
if (dots)
{
SetIndexStyle (3,DRAW_ARROW);
SetIndexStyle (4,DRAW_ARROW);
SetIndexArrow (3,159);
SetIndexArrow (4,159);
SetIndexEmptyValue(3,EMPTY_VALUE);
SetIndexEmptyValue(4,EMPTY_VALUE);
SetIndexBuffer (3,ExtMapBuffer4);
SetIndexBuffer (4,ExtMapBuffer5);
}
switch (MAType)
{
case 1: strMAType="EMA"; MAMode=MODE_EMA; break;
case 2: strMAType="SMMA"; MAMode=MODE_SMMA; break;
case 3: strMAType="LWMA"; MAMode=MODE_LWMA; break;
case 4: strMAType="LSMA"; break;
default: strMAType="SMA"; MAMode=MODE_SMA; break;
}
IndicatorShortName( strMAType+ " (" +MAPeriod + ") ");
//---- initialization done
return(0);
}
double LSMA(int Rperiod, int shift)
{
int i;
double sum;
int length;
double lengthvar;
double tmp;
double wt;
length = Rperiod;
sum = 0;
for(i = length; i >= 1 ; i--)
{
lengthvar = length + 10;
lengthvar /= 6;
tmp = 0;
tmp = ( i - lengthvar)*Close[length-i+shift];
sum+=tmp;
}
wt = sum*6/(length*(length+1));
return(wt);
}
int start()
{
double MA_Cur, MA_Prev;
int limit;
int counted_bars = IndicatorCounted();
if (counted_bars<0) return(-1);
if (counted_bars>0) counted_bars--;
limit = Bars - counted_bars;
for(int i=limit; i>=0; i--)
{
if (MAType == 4)
{
MA_Cur = LSMA(MAPeriod,i);
MA_Prev = LSMA(MAPeriod,i+1);
}
else
{
MA_Cur = iMA(NULL,0,MAPeriod,0,MAMode,PRICE_CLOSE,i);
MA_Prev = iMA(NULL,0,MAPeriod,0,MAMode,PRICE_CLOSE,i+1);
}
//========== COLOR CODING ===========================================
ExtMapBuffer1[i] = MA_Cur;
ExtMapBuffer2[i] = EMPTY_VALUE; ExtMapBuffer3[i] = EMPTY_VALUE;
ExtMapBuffer4[i] = EMPTY_VALUE; ExtMapBuffer5[i] = EMPTY_VALUE;
if (MA_Cur > MA_Prev ) { ExtMapBuffer2[i] = MA_Cur; ExtMapBuffer4[i]= MA_Cur;
}
else
if (MA_Cur < MA_Prev ) { ExtMapBuffer3[i] = MA_Cur; ExtMapBuffer5[i]= MA_Cur;
}
}
return(0);
}
//+------------------------------------------------------------------+
Comments