Triggerlines_v1
Download scriptThe Trigger Line indicator is a technical analysis tool designed to help traders identify trends and potential momentum shifts by visualizing the relationship between two distinct types of moving averages on a price chart.
Core Logic and Functionality
The script operates by calculating two specific mathematical models based on historical price data:
- Linear Weighted Calculation: The primary logic revolves around a weighted calculation where more recent price data is given higher significance than older data. This allows the indicator to react more dynamically to current market movements while still maintaining a smooth curve.
- The Smoothing Component: To refine this data, the script applies a secondary smoothing layer (LSMA). This acts as a "governor" or a stabilized baseline, helping to filter out minor market noise that might otherwise trigger false signals.
Visual Representation and Signaling
On your chart, the indicator generates lines that change behavior based on their mathematical relationship to one another:
- Trend Identification: The script constantly compares the weighted value against its smoothed counterpart.
- Dynamic Visibility (The "Trigger"): This is the core feature of the script. Rather than showing both lines at all times, the indicator uses a conditional logic gate. It specifically highlights the data points only when the primary weighted value is positioned above its smoothed average.
- Empty Space Logic: When the conditions for a specific trend are not met (i.e., when the price momentum falls below the smoothed baseline), the script intentionally hides those specific line segments.
Purpose for the User
By filtering out data points that do not meet the specified criteria, the indicator aims to provide a cleaner visual experience. It highlights "active" momentum zones, allowing you to see at a glance where the market is showing strength without being distracted by periods of consolidation or opposing trends. This makes it easier to identify specific areas where the price action aligns with the desired technical direction.
//+------------------------------------------------------------------+
//| 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 Yellow
#property indicator_color3 HotPink
#property indicator_color4 Aqua
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
int width;
extern int Rperiod = 50;
extern int LSMA_Period = 50;
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,1);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,1);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1);
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 /= 3; //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];
ExtMapBuffer2[shift] = lsma_ma[shift];
ExtMapBuffer3[shift] = wt[shift];
ExtMapBuffer4[shift] = lsma_ma[shift];
if (wt[shift] < lsma_ma[shift])
{
ExtMapBuffer4[shift] = EMPTY_VALUE;
ExtMapBuffer3[shift] = EMPTY_VALUE;
}
}
}
//+------------------------------------------------------------------+
Comments