Laguerre RSI_v2





//+------------------------------------------------------------------+
//|                                                 Laguerre RSI.mq4 |
//|                                Copyright © 2005, David W. Thomas |
//|                                           mailto:davidwt@usa.net |
//+------------------------------------------------------------------+
// based on http://www.mesasoftware.com/TimeWarp.doc.
#property copyright "Copyright © 2005, David W. Thomas"
#property link      "mailto:davidwt@usa.net"
//----
#property indicator_separate_window
#property indicator_level2 0.75
#property indicator_level3 0.45
#property indicator_level4 0.15
#property indicator_minimum 0
#property indicator_maximum 1
#property indicator_buffers 1
#property indicator_color1 MediumPurple
//---- input parameters
extern double    gamma=0.7;
//---- buffers
double RSI[];
double L0[];
double L1[];
double L2[];
double L3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   IndicatorBuffers(5);
//---- indicators
   SetIndexStyle(0, DRAW_LINE);
   SetIndexDrawBegin(0, 1);
   SetIndexLabel(0, "Laguerre RSI");
   SetIndexEmptyValue(0, -0.01);
   SetIndexBuffer(0, RSI);
   SetIndexBuffer(1, L0);
   SetIndexBuffer(2, L1);
   SetIndexBuffer(3, L2);
   SetIndexBuffer(4, L3);
//----
   string short_name="LaguerreRSI(" + DoubleToStr(gamma, 2) + ")";
   IndicatorShortName(short_name);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    limit;
   int    counted_bars=IndicatorCounted();
   double CU, CD;
//---- last counted bar will be recounted
   if (counted_bars>0)
      counted_bars--;
   else
      counted_bars=1;
   limit=Bars - counted_bars;
//---- computations for RSI
   for(int i=limit; i>=0; i--)
     {
      L0[i]=(1.0 - gamma)*Close[i] + gamma*L0[i+1];
      L1[i]=-gamma*L0[i] + L0[i+1] + gamma*L1[i+1];
      L2[i]=-gamma*L1[i] + L1[i+1] + gamma*L2[i+1];
      L3[i]=-gamma*L2[i] + L2[i+1] + gamma*L3[i+1];
      //Print(i," Close[i]=",Close[i],", (1.0 - gamma)*Close[i]=",(1.0 - gamma)*Close[i],", gamma*L0[i+1]=",gamma*L0[i+1]);
      //Print(i," L0=",L0[i],",L1=",L1[i],",L2=",L2[i],",L3=",L3[i]);
      CU=0;
      CD=0;
      if (L0[i]>=L1[i])
         CU=L0[i] - L1[i];
      else
         CD=L1[i] - L0[i];
      if (L1[i]>=L2[i])
         CU=CU + L1[i] - L2[i];
      else
         CD=CD + L2[i] - L1[i];
      if (L2[i]>=L3[i])
         CU=CU + L2[i] - L3[i];
      else
         CD=CD + L3[i] - L2[i];
      if (CU + CD!=0)
         RSI[i]=CU/(CU + CD);
     }
   return(0);
  }
//+------------------------------------------------------------------+



Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: