MA in Color_v2_001
Download scriptThis tool is designed to provide a clear, visual representation of market trends by color-coding a Moving Average (MA) line on your trading chart. Instead of looking at a single static line, this script uses dynamic colors to highlight the direction of price momentum in real-time.
Core Functionality
The primary purpose of this script is to identify whether the market trend is currently moving upward or downward by comparing the current value of a Moving Average against its previous value.
By evaluating these two points of data, the script automatically switches colors:
- Green: Indicates an upward trend (the current average is higher than the previous one).
- Red: Indicates a downward trend (the current average is lower than the previous one).
- Yellow/Neutral: Acts as a transition or base state for the calculation.
Key Features and Customization
The logic allows for significant flexibility to suit different trading styles:
- Moving Average Variety: You can choose from several different mathematical smoothing methods, including Simple (SMA), Exponential (EMA), Smoothed (SMMA), Linear Weighted (LWMA), and Least Squares (LSMA). Each method processes price data differently to provide varying levels of sensitivity.
- Period Adjustment: The "MapPeriod" setting allows you to define the look-back window—essentially determining how much historical data the indicator considers when calculating the trend.
- Visual Shift: There is an option to shift the indicator forward or backward on the chart, allowing for a custom visual alignment with your price candles.
How it Works for the Trader
When you apply this to a chart, the Moving Average line will appear to "change clothes" as the market shifts. When the trend turns bullish, the line transitions to green; when it turns bearish, it switches to red. This removes the guesswork of interpreting slight price fluctuations, providing a straightforward visual cue that helps traders stay aligned with the prevailing market direction.
//+------------------------------------------------------------------+
//| MA_In_Color.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| Modified from LSMA_In_Color to use any MA by Robert Hill |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, FX Sniper and Robert Hill"
#property link "http://www.metaquotes.net/"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Green
#property indicator_color3 Red
extern int MAPeriod=14;
extern int MAType=1;
extern int Shift=0;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
//---- variables
int MAMode;
string strMAType;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
//---- drawing settings
SetIndexBuffer(2,ExtMapBuffer1);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexBuffer(0,ExtMapBuffer3);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
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 + ") ");
SetIndexShift(0,Shift);
SetIndexShift(1,Shift);
SetIndexShift(2,Shift);
//---- 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 + 1;
lengthvar /= 3;
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();
//---- check for possible errors
if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
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 ===========================================
ExtMapBuffer3[i] = MA_Cur; //red
ExtMapBuffer2[i] = MA_Cur; //green
ExtMapBuffer1[i] = MA_Cur; //yellow
if (MA_Prev > MA_Cur)
{
ExtMapBuffer2[i] = EMPTY_VALUE;
}
else if (MA_Prev < MA_Cur)
{
ExtMapBuffer1[i] = EMPTY_VALUE; //-1 red/greem tight
}
else
{
ExtMapBuffer1[i]=EMPTY_VALUE;//EMPTY_VALUE;
ExtMapBuffer2[i]=EMPTY_VALUE;//EMPTY_VALUE;
}
}
return(0);
}
//+------------------------------------------------------------------+
Comments