TriggerLine2
Download scriptThis technical tool, known as the Trigger Line, is designed to assist traders in identifying potential momentum shifts and price trends by analyzing historical price data. It functions by calculating a specific weighted movement and comparing it against a secondary, smoother trend line to provide visual cues on a trading chart.
Core Operational Logic
The script operates based on three primary mathematical phases:
1. Weighted Price Calculation Rather than looking at simple averages, the tool applies a "weighting" system to recent price history. It assigns different values to older prices versus newer prices within a set timeframe. This ensures that more recent market activity has a stronger influence on the calculation than older data, allowing the tool to react more dynamically to current market conditions.
2. Linear Smoothing (LSMA) The script then takes that weighted data and processes it through a Linear Weighted Moving Average (LSMA). This acts as a "smoothing" mechanism. It filters out minor market "noise" and fluctuations, helping to reveal the underlying direction of the trend without being overly distracted by every small price tick.
3. The Trigger Mechanism The visual output on your chart is generated by comparing these two distinct values: the Weighted value and the Smoothed Moving Average.
- Dynamic Interaction: The tool calculates a midpoint between the weighted movement and the smoothed average.
- Conditional Visibility: This is where the "Trigger" logic resides. The indicator is designed to be selective; it specifically monitors when the weighted value is positioned above or below the smoothed average.
- Visual Signaling: Based on these conditions, the script dynamically displays or hides lines on your chart. When specific price conditions are met (indicating a potential trend signal), the line becomes visible. If the conditions are not met, the line remains hidden (empty).
Summary for the User
In practical terms, this script acts as a filter. It processes historical prices to determine the strength of the current move and compares it against a smoothed trend. Instead of showing you a cluttered set of data constantly, it only highlights specific "Trigger" lines when the math suggests that the price movement has reached a significant enough point to warrant your attention.
//+------------------------------------------------------------------+
//| Trigger Line |
//| Copyright © 2005 dwt5 and adoleh2000 |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005 dwt5 and adoleh2000 "
#property link "http://www.metaquotes.net/"
//---- indicator settings
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Blue
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
int width;
extern int Rperiod = 15;
extern int LSMA_Period = 5;
extern int Div = 3;
int Draw4HowLong;
int shift;
int i;
int j;
int loopbegin;
int length;
int lsma_length;
double lengthvar;
double tmp ;
double tmp2 ;
double wt[];
double sum[];
double lsma_sum[];
double lsma_ma[];
double middle[];
int c;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 7 additional buffers are used for counting.
IndicatorBuffers(7);
//---- drawing settings
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(1,DRAW_NONE);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(3,DRAW_NONE);
SetIndexBuffer(4,sum);
SetIndexBuffer(5,wt);
SetIndexBuffer(6,lsma_ma);
//---- initialization done
return(0);
}
int start()
{ Draw4HowLong = Bars-Rperiod - 5; //Rperiod = 20
length = Rperiod; //length now = 20
lsma_length = LSMA_Period;
loopbegin = Draw4HowLong - length - 1;
for(shift = loopbegin; shift >= 0; shift--) // MAIN For Loop
{
sum[1] = 0;
for(i = length; i >= 1 ; i--) //LSMA loop
{
lengthvar = length + 1; //lengthvar = 21
lengthvar /= Div; //lengthvar = 7
tmp = 0;
tmp = ( i - lengthvar)*Close[length-i+shift]; //tmp = 20 - 7 * close[20-i+shift]
sum[1]+=tmp;
}
wt[shift] = sum[1]*6/(length*(length+1));
j = shift;
lsma_ma[shift] = wt[j+1] + (wt[j]-wt[j+1])* 2/(lsma_length+1);
//========== COLOR CODING ===========================================
ExtMapBuffer1[shift] = (wt[shift]+lsma_ma[shift])/2;
ExtMapBuffer2[shift] = lsma_ma[shift];
ExtMapBuffer3[shift] = (wt[shift]+lsma_ma[shift])/2;
ExtMapBuffer4[shift] = lsma_ma[shift];
if (wt[shift] < lsma_ma[shift])
{
ExtMapBuffer4[shift] = EMPTY_VALUE;
ExtMapBuffer3[shift] = EMPTY_VALUE;
}
}
}
//+------------------------------------------------------------------+
Comments