Laguerre_v7

Download script
Author: Emerald King
Laguerre_v7

This tool is designed as a specialized technical indicator for the MetaTrader platform, engineered to provide traders with a smoothed view of market momentum and price relative strength. Rather than simply tracking raw price movements, it utilizes a sophisticated mathematical approach to filter out "market noise" and highlight significant trends.

Core Methodology

The script operates by calculating a series of interconnected values based on the current closing prices of an asset. It uses a weighted feedback system (governed by a specific sensitivity parameter) to create a multi-layered progression. Instead of looking at just one price point, the logic evaluates four distinct levels of data simultaneously. Each level feeds into the next, allowing the indicator to "remember" previous price actions while remaining responsive to new information.

The Momentum Calculation

Once these four levels are established, the script performs a comparative analysis:

  • Difference Tracking: It measures the gap between each consecutive level.
  • Cumulative Strength: It aggregates these differences to determine whether the upward pressure (buying strength) or downward pressure (selling strength) is dominant across all four layers.
  • Relative Positioning: By dividing the positive momentum by the total movement, the script produces a normalized value.

Visual Output and Interpretation

The final result is displayed as an oscillating line in a separate window below your main price chart. This allows you to observe market sentiment independently of the price action:

  • Smoothing: Because the logic uses weighted averages, the resulting line is less jagged than standard oscillators, making it easier to identify sustained trends.
  • Relative Strength: The indicator effectively tells you where the current price "sits" in relation to its recent momentum history.
  • Visual Thresholds: The script includes pre-defined horizontal levels (0.75, 0.45, and 0.15), which act as benchmarks to help traders identify overextended movements or significant shifts in momentum.

By synthesizing complex multi-level differences into a single readable line, this indicator helps traders distinguish between minor price fluctuations and genuine trend developments.

15 Views
0 Downloads
0 Favorites
Laguerre_v7
//+------------------------------------------------------------------+
//|                                                     Laguerre.mq4 |
//|                                                     Emerald King |
//|                                     mailto:info@emerald-king.com |
//+------------------------------------------------------------------+
#property copyright "Emerald King"
#property link      "mailto:info@emerald-king.com"

#property indicator_separate_window
#property indicator_color1 Magenta
#property indicator_level2 0.75
#property indicator_level3 0.45
#property indicator_level4 0.15
//---- input parameters
extern double gamma=0.66;
extern int CountBars=950;

double L0 = 0;
double L1 = 0;
double L2 = 0;
double L3 = 0;
double L0A = 0;
double L1A = 0;
double L2A = 0;
double L3A = 0;
double LRSI = 0;
double CU = 0;
double CD = 0;

double val1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
      
int init()
  {
//---- indicators
//----
   SetIndexBuffer(0,val1);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   if (CountBars>Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars);
   
   int i;
   int    counted_bars=IndicatorCounted();

   //if(CountBars<=Lookback) return(0);
   //---- initial zero
   //if(counted_bars<1)
   //{
   //   for(i=1;i<=Lookback;i++) val1[CountBars-i]=0.0;
   //}

   i=CountBars-1;
   while(i>=0)
   {
      L0A = L0;
      L1A = L1;
      L2A = L2;
      L3A = L3;
      L0 = (1 - gamma)*Close[i] + gamma*L0A;
      L1 = - gamma *L0 + L0A + gamma *L1A;
      L2 = - gamma *L1 + L1A + gamma *L2A;
      L3 = - gamma *L2 + L2A + gamma *L3A;

      CU = 0;
      CD = 0;
      
      if (L0 >= L1) CU = L0 - L1; else CD = L1 - L0;
      if (L1 >= L2) CU = CU + L1 - L2; else CD = CD + L2 - L1;
      if (L2 >= L3) CU = CU + L2 - L3; else CD = CD + L3 - L2;

      if (CU + CD != 0) LRSI = CU / (CU + CD);
      val1[i] = LRSI;
	  i--;
	}
   return(0);
 }
//+------------------------------------------------------------------+

Comments