Triggerlines_v3

Download script
Triggerlines_v3

This script functions as a specialized technical analysis tool designed to identify specific momentum shifts and price trends by comparing two distinct types of moving averages. Its primary purpose is to provide a visual "trigger" on your trading chart, helping to filter out market noise and highlight significant movements.

Core Methodology

The logic operates by calculating two different mathematical models simultaneously:

  • Linear Weighted Momentum: The script calculates a weighted value based on recent price history. Unlike a standard average where every day is treated equally, this method gives more significance to the most recent price action. This allows the tool to react more fluidly to current market sentiment.
  • LSMA (Least Squares Moving Average) Smoothing: The script also generates a smoothed trend line using a "least squares" approach. This is a statistical calculation that attempts to find a straight line of best fit through the data, creating a much smoother and more stable curve than standard indicators.

How the Logic Works

The indicator performs a constant comparison between these two values:

  1. Data Processing: For every new candle on your chart, the script calculates both the Weighted Momentum value and the Smoothed LSMA value.
  2. Trend Identification: It looks for the relationship between these two lines. When the Weighted Momentum moves above the Smoothed LSMA, it suggests a strengthening of upward momentum. Conversely, when it falls below, it indicates downward pressure.
  3. Dynamic Filtering: The script is programmed with a specific filtering logic to keep your chart clean. It evaluates whether the Weighted Momentum is currently higher than the smoothed average.

Visual Behavior

On your trading platform, this logic translates into a dynamic visual signal:

  • When certain price conditions are met (specifically when momentum aligns with the trend), the lines are rendered on the chart to show you the current trajectory.
  • When those conditions are not met, the script "hides" the specific indicators (setting them to an empty value). This ensures that the user only sees active signals during periods of confirmed momentum, effectively acting as a visual filter to ignore periods of stagnation or conflicting price data.
Miscellaneous
Implements a curve of type %1
8 Views
0 Downloads
0 Favorites
Triggerlines_v3
/*-----------------------------+
|			       |
| 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 = 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,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