MA in Color
Download scriptThis script is a specialized technical analysis tool designed for the MetaTrader platform. Its primary purpose is to visualize Moving Averages (MA) in a way that makes it easier for traders to identify trend direction and momentum at a glance through the use of dynamic color coding.
Core Functionality
The tool calculates various types of Moving Averages—such as Simple, Exponential, Smoothed, Linear Weighted, and Least Squares averages. While most standard indicators simply provide a single line on a chart, this script tracks the movement of these lines to determine if the price trend is currently ascending or descending.
How the Logic Works
The script performs three main operations to create its visual output:
- Trend Analysis: The tool constantly compares the current value of the Moving Average with its previous value (the value from the preceding candle).
- Directional Detection:
- If the current Moving Average value is higher than the previous one, the script identifies this as an upward movement.
- If the current value is lower than the previous one, it identifies this as a downward movement.
- If the values are identical (no change), it treats the data as neutral.
- Visual Color Coding: Instead of just drawing a single static line, the script uses multiple internal "buffers" to switch colors based on the direction found in the step above:
- Green: Displays when the Moving Average is trending upwards.
- Red: Displays when the Moving Average is trending downwards.
- Yellow: Acts as a secondary visual layer for the moving average data.
Summary for Traders
By using this script, you move away from looking at a "flat" line and instead see a reactive visual aid. Because the colors change automatically based on whether the Moving Average is rising or falling, it allows you to quickly spot shifts in market momentum without having to manually analyze the slope of the trendline. It effectively highlights "bullish" (upward) and "bearish" (downward) movements in real-time on a separate window within your trading platform.
//+------------------------------------------------------------------+
//| MA_In_Color.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| Modified from LSMA_In_Color to use any MA by Robert Hill |
//| March 21/2008 - Created separate window. |
//| GoingForward - Forex-TSD |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, FX Sniper and Robert Hill"
#property link "http://www.metaquotes.net/"
//---- indicator settings
#property indicator_separate_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;
//---- 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,2);
SetIndexStyle(1,DRAW_LINE,2);
SetIndexStyle(0,DRAW_LINE,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 + ") ");
//---- 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