Triggerlines_v2
Download scriptThis custom indicator, known as the Trigger Line, is designed to assist traders in identifying momentum and potential trend shifts by analyzing price action through a specialized mathematical smoothing process. Rather than simply tracking raw prices, it calculates a dynamic weighted value that highlights the relationship between current market movements and historical averages.
How the Logic Works
The core of this script revolves around three distinct stages of data processing:
1. Weighted Data Calculation The indicator looks back at a specific number of previous price points (defined by the "Rperiod" setting). Instead of treating every past price as equally important, it applies a weighted calculation where more recent prices carry different significance than older ones. This creates a "weighted sum" that helps smooth out market noise while remaining responsive to current price trends.
2. The Linear Smoothing Component (LSMA) The script then takes that weighted data and passes it through a Linear Weighted Moving Average (LSMA). This acts as a secondary layer of refinement. By comparing the raw weighted values against this smoothed average, the indicator can more clearly distinguish between minor market fluctuations and actual directional shifts in price momentum.
3. Visual Signaling and Filtering The most important functional part of the script is its "Color Coding" and visibility logic:
- The Signal: The indicator tracks two main lines on your chart—the weighted value and the smoothed average.
- The Filter: The script includes a conditional trigger. It is designed to hide specific data points based on the relationship between these two lines. Specifically, if the weighted value falls below the smoothed average, the indicator suppresses certain visual elements (marking them as "empty").
Summary for Traders
In practical terms, this tool acts as a momentum filter. By suppressing certain visual outputs when conditions aren't met, it aims to highlight specific periods where price action is strong enough to break above the smoothing threshold. It provides a cleaner visual environment by only showing relevant "triggers," helping you ignore market noise and focus on moments where the trend shows significant strength.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| 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;
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)*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