MA in Color

Download script
MA in Color

This 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:

  1. Trend Analysis: The tool constantly compares the current value of the Moving Average with its previous value (the value from the preceding candle).
  2. 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.
  3. 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.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
14 Views
0 Downloads
0 Favorites
MA in Color
//+------------------------------------------------------------------+
//|                                                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