MA_in_color_ld

Download script
MA_in_color_ld

This script is designed to enhance your trading charts by providing a visual representation of Moving Averages (MA) that changes dynamically based on price momentum. Instead of simply showing a single static line, it uses color-coding and markers to help traders quickly identify the direction of the trend.

Core Functionality

The primary purpose of this tool is to monitor the movement of various Moving Average types—such as Simple (SMA), Exponential (EMA), Smoothed (SMMA), Linear Weighted (LWMA), or Least Squares (LSMA). It calculates these values based on a specific time period and price data that you define in the settings.

How the Logic Works

The script analyzes the relationship between the "current" value of the moving average and its "previous" value to determine what is happening in the market:

  • Trend Tracking: The tool constantly compares where the moving average sits right now versus where it was on the previous candle.
  • Dynamic Color Coding:
    • When the moving average is rising (the current value is higher than the previous one), the script signals an upward trend.
    • When the moving average is falling (the current value is lower than the previous one), the script signals a downward trend.
  • Visual Signals: Depending on your settings, the script can display this information using distinct colors and line styles. It also includes a feature to plot specific "dots" or arrows at key points, making it easier to spot exactly when the momentum shifts from bullish to bearish or vice versa.

Key User Benefits

  • Improved Trend Visibility: By changing colors based on whether the moving average is curving up or down, it removes the guesswork of interpreting "flat" lines.
  • Customizable Options: You can choose which specific type of Moving Average you prefer to use and adjust the sensitivity by changing the period length.
  • Clean Chart Interface: The logic is designed to keep your chart organized, only highlighting the relevant trend data so you can focus on making informed trading decisions.
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
8 Views
0 Downloads
0 Favorites
MA_in_color_ld
//+------------------------------------------------------------------+
//|                                                MA_In_Color.mq4   |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//| Modified from LSMA_In_Color to use any MA by Robert Hill         |     
//+------------------------------------------------------------------+
//mod
#property  copyright "Copyright © 2006, FX Sniper and Robert Hill"
#property  link      "http://www.metaquotes.net/"

//---- indicator settings

#property  indicator_chart_window
#property  indicator_buffers 5
#property indicator_color1 Yellow      
#property indicator_color2 Green
#property indicator_color3 Red
#property indicator_color4 DodgerBlue
#property indicator_color5 OrangeRed

extern int       MAPeriod=5;
extern int       MAType=1;
extern bool      dots =1;
extern string    MA_Method_Price = "SMA0 EMA1 SMMA2 LWMA3 LSMA4||0O,1C 2H3L,4Md 5Tp 6WghC: Md(HL/2)4,Tp(HLC/3)5,Wgh(HLCC/4)6";

//---- buffers

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];

//---- variables

int    MAMode;
string strMAType;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(5);
   
//---- drawing settings
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexBuffer(2,ExtMapBuffer3);
   
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);

   if (dots)
   {
   SetIndexStyle  (3,DRAW_ARROW);
   SetIndexStyle  (4,DRAW_ARROW);
   SetIndexArrow  (3,159);
   SetIndexArrow  (4,159);
   SetIndexEmptyValue(3,EMPTY_VALUE);
   SetIndexEmptyValue(4,EMPTY_VALUE);

   SetIndexBuffer (3,ExtMapBuffer4);
   SetIndexBuffer (4,ExtMapBuffer5);
   }

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 + 10;
     lengthvar /= 6;
     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();
   if (counted_bars<0) return(-1);
   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 ===========================================               

       ExtMapBuffer1[i] = MA_Cur; 
       ExtMapBuffer2[i] = EMPTY_VALUE;       ExtMapBuffer3[i] = EMPTY_VALUE; 
       ExtMapBuffer4[i] = EMPTY_VALUE;       ExtMapBuffer5[i] = EMPTY_VALUE; 

       
       if (ExtMapBuffer1[i] > ExtMapBuffer1[i+1])
                               {
                                  if ( ExtMapBuffer3[i+1]!= EMPTY_VALUE) 
                                       ExtMapBuffer4[i]   = MA_Cur;
                                       ExtMapBuffer2[i]   = MA_Cur;
                                    }
       else 

       if (ExtMapBuffer1[i] < ExtMapBuffer1[i+1])
                               {       
                                  if ( ExtMapBuffer2[i+1]!= EMPTY_VALUE) 
                                       ExtMapBuffer5[i]   = MA_Cur;
                                       ExtMapBuffer3[i]   = MA_Cur; 
                                    }
 
        
     }
    
      return(0);
  }
//+------------------------------------------------------------------+



Comments