(T_S_R)-Execute Line 2
Download scriptThis script is a technical analysis tool designed to identify and visualize market trends on a trading chart. It focuses on smoothing out price fluctuations to provide a clearer picture of the prevailing momentum, helping traders distinguish between significant movements and minor "noise."
How the Logic Works
The script operates through a multi-layered mathematical process to determine the direction of the market:
1. Signal Smoothing (The Foundation) Instead of looking at raw, erratic price data, the script uses a weighted moving average. It calculates a specific relationship between two different averages—one based on a standard period and another on a halved period. By combining these, it creates a "vector" that emphasizes recent price changes while filtering out insignificant ripples.
2. Secondary Refinement To further refine this data, the script applies a second layer of smoothing to the results of the first step. This acts as a secondary filter, ensuring that the final line shown on the chart is fluid and less prone to reacting to one-off price spikes.
3. Trend Detection and Directional Logic The core intelligence of the script lies in how it interprets this smoothed data:
- Upward Momentum: If the current smoothed value is higher than the previous one, the script identifies an upward trend.
- Downward Momentum: If the current smoothed value is lower than the previous one, it identifies a downward trend.
4. Visual Representation and Alerts The tool translates these mathematical findings into visual cues on your chart:
- Dynamic Lines: It displays two distinct lines. One represents the "Uptrend" and the other represents the "Downtrend." The script intelligently switches which line is visible based on the current market direction, effectively showing you the "active" trend.
- Trend Reversal Alerts: The script constantly monitors for changes in direction. If the market flips from an upward trend to a downward trend (or vice versa), the system triggers a specific alert notification.
Summary for the User
Essentially, this tool acts as a sophisticated "filter" for your charts. It takes complex price movements, smooths them out twice to find the true underlying direction, and then draws clear lines showing you whether the market is currently trending up or down, notifying you immediately whenever that trend shifts.
//+------------------------------------------------------------------+
//| 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 Yellow
#property indicator_color2 Magenta
//---- input parameters
extern int period=5;
extern int method=3; // MODE_SMA
extern int price=0; // PRICE_CLOSE
//---- buffers
double Uptrend[];
double Dntrend[];
double ExtMapBuffer[];
double prevtrend;
//+------------------------------------------------------------------+
//| 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("Execute 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]);
//Comment(Dntrend[1]+" "+Dntrend[2]+" "+Uptrend[1]+" "+Uptrend[2]);
if (x==0){
if ((trend[1]*prevtrend)<0){Alert("TSR change");}
prevtrend=trend[1];
}
}
return(0);
}
//+------------------------------------------------------------------+
Comments