LSMA in Color31
Download scriptThis custom technical indicator is designed to provide traders with a visual representation of price momentum and trend direction using a smoothed moving average. By analyzing price history, the script identifies whether the market's general movement is currently trending upwards or downwards and highlights these shifts in real-time on the trading chart.
How the Logic Works
1. Data Calculation The core logic starts by looking at a specific number of previous price points (determined by the user-defined period). Instead of simply averaging these prices, the script applies a mathematical weighting system. This means that certain price points within the timeframe are given more significance than others, allowing the resulting line to react smoothly to market changes rather than "jittering" with every minor price fluctuation.
2. Trend Smoothing The indicator processes these weighted values to create a continuous smoothed line. This helps filter out "market noise"—the random, small price movements that can often mislead traders—to reveal the underlying direction of the price action.
3. Dynamic Color Coding The most distinct feature of this script is its ability to change colors based on momentum. The indicator compares the current value of the smoothed line with its previous value:
- Upward Momentum: When the current value is higher than the previous one, the indicator signals a bullish (upward) movement.
- Downward Momentum: When the current value is lower than the previous one, the indicator signals a bearish (downward) movement.
- Neutral State: If there is no change in value, the indicator remains neutral.
4. Visual Output On the chart, this logic manifests as a multi-colored line that shifts between Yellow, Green, and Red. These colors serve as an immediate visual cue:
- The color changes act as a map for the current trend.
- It allows the user to quickly identify whether the market is gaining strength or losing ground without having to manually calculate the price history.
In summary, this tool automates the heavy lifting of calculating weighted trends and translates that complex data into a simple, color-coded visual guide, helping traders stay aligned with the prevailing market direction.
//+------------------------------------------------------------------+
//| LSMA in Color3.mq4 |
//| Copyright © 2004, MetaQuotes Software Corp. |
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, FX Sniper "
#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
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
int width;
extern int Rperiod = 14;
extern int Draw4HowLongg = 1500;
int Draw4HowLong;
int shift;
int i;
int loopbegin;
double sum[];
int length;
double lengthvar;
double tmp ;
double wt[];
int c;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(5);
//---- drawing settings
SetIndexBuffer(2,ExtMapBuffer1);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexBuffer(0,ExtMapBuffer3);
SetIndexBuffer(3,sum);
SetIndexBuffer(4,wt);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
//---- initialization done
return(0);
}
int start()
{ Draw4HowLong = Bars-Rperiod - 5;
length = Rperiod;
loopbegin = Draw4HowLong - length - 1;
for(shift = loopbegin; shift >= 0; shift--)
{
sum[1] = 0;
for(i = length; i >= 1 ; i--)
{
lengthvar = length + 1;
lengthvar /= 3;
tmp = 0;
tmp = ( i - lengthvar)*Close[length-i+shift];
sum[1]+=tmp;
}
wt[shift] = sum[1]*6/(length*(length+1));
//========== COLOR CODING ===========================================
ExtMapBuffer3[shift] = wt[shift]; //red
ExtMapBuffer2[shift] = wt[shift]; //green
ExtMapBuffer1[shift] = wt[shift]; //yellow
// for(c=loopbegin;c==shift;c++)
// {
if (wt[shift+1] > wt[shift])
{
ExtMapBuffer2[shift] = EMPTY_VALUE;
// ObjectCreate("smiley_face", OBJ_ARROW, 0, Time[shift], Low[shift]-Point*20);
// Print("time= ",Time[shift]);
// ObjectSet("smiley_face", OBJPROP_ARROWCODE, 242);
// ObjectSet("smiley_face", OBJPROP_COLOR , Red);
// ObjectSet("smiley_face", OBJPROP_WIDTH , 1);
// ObjectsRedraw();
//ExtMapBuffer3[shift+1] = EMPTY_VALUE;
//ExtMapBuffer3[shift+1] = EMPTY_VALUE;
}
else if (wt[shift+1] < wt[shift])
{
ExtMapBuffer1[shift] = EMPTY_VALUE; //-1 red/greem tight
//ExtMapBuffer3[shift+1] = EMPTY_VALUE;
}
else
{
ExtMapBuffer1[shift]=EMPTY_VALUE;//EMPTY_VALUE;
ExtMapBuffer2[shift]=EMPTY_VALUE;//EMPTY_VALUE;
}
}
return(0);
}
//+------------------------------------------------------------------+
Comments