TriggerLines
Download scriptThe "Trigger Line" script is a technical analysis tool designed to help traders visualize price momentum and identify potential trend shifts. It functions by calculating two distinct mathematical models based on historical price data and plotting them on your trading chart.
Core Logic Overview
The primary goal of this script is to compare a weighted moving average against a smoothed linear trend. It processes historical "Close" prices to generate two specific lines:
- The Weighted Momentum Line (wt): This represents the primary price action data. Unlike a standard average that treats all days equally, this calculation applies a weight to the price history. It evaluates recent price movements more heavily to capture current sentiment.
- The LSMA (Linear Smoothed Moving Average): This is a secondary smoothing layer. It takes the weighted data and applies a linear regression-style formula to create a "base" line that helps filter out market noise.
Visual Behavior and Interpretation
The script uses a specific color-coding logic to communicate trend strength to the user:
- Active Monitoring: The indicator calculates both lines simultaneously across your chart. However, it is designed to only show specific data when certain conditions are met.
- Dynamic Visibility: The script performs a real-time comparison between the Weighted Momentum Line and the LSMA line.
- If the Weighted Momentum Line is higher than the LSMA line, the indicator highlights these values on your chart (appearing in blue).
- If the Weighted Momentum Line falls below the LSMA line, the script hides those specific data points (setting them to "Empty").
Summary for the Trader
Essentially, this tool acts as a filter. Instead of cluttering your screen with every price fluctuation, it selectively displays the trend only when the weighted momentum is moving in a positive direction relative to the smoothed average. It serves as a visual cue to help you identify periods where the "momentum" is pulling away from the "baseline," potentially signaling a stronger trend or a specific entry trigger.
//+------------------------------------------------------------------+
//| 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 = 20;
extern int LSMA_Period = 20;
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,4);
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,4);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,4);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,4);
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