MA_In_Color

Download script
MA_In_Color

The MA_In_Color indicator is a visual trading tool designed to help users identify market trends by applying dynamic color changes to a Moving Average (MA) line. Rather than showing a static line, this script translates the momentum of price action into clear visual cues, making it easier to distinguish between bullish and bearish movements at a glance.

Core Functionality

The primary purpose of this tool is to monitor the direction of a chosen Moving Average. It calculates the value of the moving average based on your preferred settings and compares the current value against its previous position. By doing this, the script determines whether the trend is currently rising, falling, or remaining flat.

Key Features

  • Customizable Moving Averages: Users can choose from several standard technical analysis calculations, including Simple (SMA), Exponential (EMA), Smoothed (SMMA), Linear Weighted (LWMA), and Least Squares (LSMA) moving averages.
  • Trend Visualization: The indicator uses a three-color logic to paint the moving average line:
    • Green: Appears when the Moving Average is trending upward (the current value is higher than the previous one).
    • Red: Appears when the Moving Average is trending downward (the current value is lower than the previous one).
    • Yellow: Serves as a neutral state or a transition indicator depending on the price movement.
  • Real-Time Updates: The script automatically recalculates with every new price tick, ensuring that the line color reflects the most recent market behavior.

How it Works for the Trader

Instead of manually interpreting whether a moving average is sloping up or down, this tool automates that observation. When the line turns Green, it signals upward momentum; when it turns Red, it signals downward momentum. This allows traders to quickly identify trend shifts and potential entry or exit points without having to perform manual calculations or visual "eyeballing" of the chart data.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
15 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         |     
//+------------------------------------------------------------------+
#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;

//---- 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,0);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,0);
   SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,0);

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