MA in Color_v2

Download script
MA in Color_v2

This script is a visual trading tool designed to simplify the interpretation of moving averages on a price chart by using dynamic color coding. Instead of displaying a single, static line, it highlights shifts in market momentum through distinct visual transitions.

Core Functionality

The primary purpose of this tool is to track various types of Moving Averages (MA)—such as Simple, Exponential, Smoothed, Linear Weighted, or Least Squares—and visually signal whether the trend is currently moving upward or downward. By analyzing the relationship between the current price average and its previous value, the script changes the color of the line on your chart to reflect these movements in real-time.

How the Logic Works

The tool operates by performing a continuous calculation of the chosen moving average across all historical data points on the chart. For every candle, it performs two specific checks:

  • Trend Detection: The script compares the value of the moving average at the current moment against its value from one period ago.
  • Dynamic Coloring: Based on this comparison, it assigns a specific color to the line:
    • If the average is increasing (the current value is higher than the previous), it highlights the trend in one direction.
    • If the average is decreasing (the current value is lower than the previous), it switches to a different color.
    • If the average remains unchanged, the indicator maintains a neutral state.

Key Features for the User

  • Versatility: It allows you to switch between different mathematical models of moving averages (e.g., EMA, SMMA, LWMA, or LSMA) without needing different tools.
  • Customizable Parameters: Users can define the "Period" (how much historical data is being averaged), the specific type of Moving Average to use, and the price source (such as Close, Open, High, Low, etc.).
  • Visual Clarity: By removing the need for a trader to manually interpret "slopes" or "angles," the script provides an immediate visual cue. The color changes act as a simplified signal for trend direction, making it easier to identify market shifts at a glance.
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
9 Views
0 Downloads
0 Favorites
MA in Color_v2
//+------------------------------------------------------------------+
//|                                                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;
extern int       Applied_price=0; //0=PRICE_CLOSE; 1=PRICE_OPEN; 2=PRICE_HIGH; 3=PRICE_LOW; 4=PRICE_MEDIAN; 5=PRICE_TYPICAL; 6=PRICE_WEIGHTED

//---- 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,Applied_price,i);
        MA_Prev = iMA(NULL,0,MAPeriod,0,MAMode,Applied_price,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