Slope_Direction_Line
Download scriptThis script is designed to help traders visualize market trends by identifying the direction of price movement through a smoothed mathematical calculation. Instead of simply following the raw price, it processes data to filter out "noise" and highlight the primary trend direction on your chart.
How the Logic Works
1. Data Smoothing (The Foundation) The script begins by taking the standard moving average—a common tool used to smooth out price fluctuations—and applies a specific mathematical formula to it. By comparing a shorter-term moving average against a longer-term one, the script calculates a "vector." This represents the velocity and momentum of the price movement.
2. Trend Identification Once this vector is calculated, the script performs a second layer of smoothing. It looks at these vectors to determine if the overall trajectory of the market is moving upward or downward. It isn't just looking for small ticks in price; it is looking for sustained shifts in momentum.
3. Visualizing the Trend The final output on your chart is divided into two distinct visual components:
- Uptrend: When the logic detects that the trend is moving upward, it draws a specific line (indicated in Light Blue).
- Downtrend: When the logic detects a downward shift, it draws a corresponding line (indicated in Tomato).
Key Features for the User
- Dynamic Switching: The script automatically switches between these two lines. When the market flips from an upward trend to a downward one, the blue line will disappear and the tomato line will appear, helping you quickly identify when the "mood" of the market has changed.
- Trend Slope Tracking: Because it is built for the "Trend Slope Trading" method, it focuses on the angle and direction of the trend rather than just the current price point.
- Customizable Sensitivity: You can adjust the
periodto make the indicator more responsive to quick price changes or smoother to ignore minor fluctuations, depending on your trading style.
In short, this tool acts as a visual filter that cleans up market data to show you exactly which way the current trend is leaning, making it easier to spot the "big picture" in real-time.
//+------------------------------------------------------------------+
//| HMA.mq4
//| Copyright © 2006 WizardSerg <wizardserg@mail.ru>, ?? ??????? ForexMagazine #104
//| wizardserg@mail.ru
//| Revised by IgorAD,igorad2003@yahoo.co.uk |
//| Personalized by iGoR AKA FXiGoR for the Trend Slope Trading method (T_S_T)
//| Link:
//| contact: thefuturemaster@hotmail.com
//+------------------------------------------------------------------+
#property copyright "MT4 release WizardSerg <wizardserg@mail.ru>, ?? ??????? ForexMagazine #104"
#property link "wizardserg@mail.ru"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 LightBlue
#property indicator_color2 Tomato
//---- input parameters
extern int period=20;
extern int method=3; // MODE_SMA
extern int price=0; // PRICE_CLOSE
//---- buffers
double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
SetIndexBuffer(0, Uptrend);
//ArraySetAsSeries(Uptrend, true);
SetIndexBuffer(1, Dntrend);
//ArraySetAsSeries(Dntrend, true);
SetIndexBuffer(2, ExtMapBuffer);
ArraySetAsSeries(ExtMapBuffer, true);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2);
IndicatorShortName("Slope Direction Line("+period+")");
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
// ???? ????? ?????? ??????
return(0);
}
//+------------------------------------------------------------------+
//| ?????????? ??????? |
//+------------------------------------------------------------------+
double WMA(int x, int p)
{
return(iMA(NULL, 0, p, 0, method, price, x));
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0)
return(-1);
int x = 0;
int p = MathSqrt(period);
int e = Bars - counted_bars + period + 1;
double vect[], trend[];
if(e > Bars)
e = Bars;
ArrayResize(vect, e);
ArraySetAsSeries(vect, true);
ArrayResize(trend, e);
ArraySetAsSeries(trend, true);
for(x = 0; x < e; x++)
{
vect[x] = 2*WMA(x, period/2) - WMA(x, period);
// Print("Bar date/time: ", TimeToStr(Time[x]), " close: ", Close[x], " vect[", x, "] = ", vect[x], " 2*WMA(p/2) = ", 2*WMA(x, period/2), " WMA(p) = ", WMA(x, period));
}
for(x = 0; x < e-period; x++)
ExtMapBuffer[x] = iMAOnArray(vect, 0, p, 0, method, x);
for(x = e-period; x >= 0; x--)
{
trend[x] = trend[x+1];
if (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1;
if (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
if (trend[x]>0)
{ Uptrend[x] = ExtMapBuffer[x];
if (trend[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
Dntrend[x] = EMPTY_VALUE;
}
else
if (trend[x]<0)
{
Dntrend[x] = ExtMapBuffer[x];
if (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
Uptrend[x] = EMPTY_VALUE;
}
//Print( " trend=",trend[x]);
}
return(0);
}
//+------------------------------------------------------------------+
Comments