Triggerlines2
Download scriptThis indicator, titled "Trigger Line," is designed to provide traders with a visual representation of price momentum and trend direction by calculating two distinct mathematical values on the chart. Its primary purpose is to filter market noise and identify specific zones where the price sentiment might be shifting.
Core Logic and Calculations
The script operates by analyzing historical price data over a specific period (defined by the user as the "Rperiod"). It performs the following steps:
1. Weighted Momentum Calculation Instead of looking at simple averages, the tool applies a weighted calculation to the price history. It treats more recent data points differently than older ones, creating a dynamic value that reflects current momentum. This results in a "weighted" line that tracks the movement of the market with greater sensitivity to recent price action.
2. Linear Smoothing (LSMA) The script also calculates a Linear Weighted Moving Average (LSMA). This serves as a smoother, more stable baseline. By blending the weights of historical prices, it provides a clear picture of the underlying trend, effectively "ironing out" minor fluctuations that often distract from the primary direction of the market.
Visual Representation and Signaling
The indicator renders these two calculations on your chart simultaneously. The core logic relies on the relationship between these two lines to provide visual cues:
- Trend Identification: By comparing the weighted momentum against the smoothed average, the tool helps users see whether the current momentum is accelerating faster than the general trend or slowing down.
- Dynamic Color Coding: One of the most important features of this script is its conditional visibility. The indicator identifies "active" signals based on the position of these lines relative to one another. When the momentum value falls below the smoothed average, the indicator hides specific data points (rendering them invisible).
Summary for the Trader
In essence, this tool acts as a trend-following filter. It helps you visualize where the market has significant "weight" and strength. By dynamically showing or hiding certain line segments based on their relationship to the moving average, it aims to highlight specific price movements while suppressing data that does not meet its internal momentum criteria.
//+------------------------------------------------------------------+
//| 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 = 24;
extern int LSMA_Period = 6;
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_LINE,STYLE_SOLID,2);
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2);
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,2);
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)*Open[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