Laguerre_mladen

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Laguerre_mladen
//+------------------------------------------------------------------+
//|                                       LaGuerre RSI v2.1m_mtf.mq4 |
//|LaGuerre_RSI_v2.1m_mtf                                     mladen |
//+------------------------------------------------------------------+
//mod
//ïîêîöàë èíäþê Màrtingeil, óáðàë âñå ëèøíåå ÷òî íàñîâàë àâòîð â íåãî,
//òàéìôðåéì ðåêîìåíäóåìûé àâòîðîì Ì30. 
//--------------------------------------------------------------------
#property indicator_separate_window
#property indicator_minimum 0.0
#property indicator_maximum 1.0
#property indicator_buffers 3
#property indicator_color1 Blue 
#property indicator_color2 Lime
#property indicator_color3 OrangeRed
//--------------------------------------------------------------------
extern double Gama        = 0.21;
//--------------------------------------------------------------------
int    Smooth = 0;
bool   SmoothPrice = FALSE;
bool   ShowLevelSig = TRUE, ShowCrossings = TRUE;
double Level1 = 0.75, Level2 = 0.5, Level3 = 0.25;
//--------------------------------------------------------------------
double buffer1[];
double buffer2[];
double buffer3[];
double buffer4[];
double buffer5[];
double buffer6[];
double buffer7[];
double buffer8[];
//--------------------------------------------------------------------
int init() {
   IndicatorBuffers(8);
   SetIndexBuffer(0, buffer1);// ñèãíàëüíàÿ ëèíèÿ
   SetIndexBuffer(1, buffer2);
   SetIndexBuffer(2, buffer3);
   SetIndexBuffer(3, buffer4);
   SetIndexBuffer(4, buffer5);
   SetIndexBuffer(5, buffer6);
   SetIndexBuffer(6, buffer7);
   SetIndexBuffer(7, buffer8);
   if (ShowCrossings || ShowLevelSig) {
   SetIndexStyle(1, DRAW_ARROW);
   SetIndexStyle(2, DRAW_ARROW);
   SetIndexArrow(1, 159);
   SetIndexArrow(2, 159);
   } else {
   SetIndexStyle(1, DRAW_NONE);
   SetIndexStyle(2, DRAW_NONE);
   }
   string stringname = "Laguerre_RSI_v2 ";
   IndicatorShortName(stringname);
   SetIndexLabel(0, "Laguerre_RSI_v2");
//----
return (0);}
//--------------------------------------------------------------------
int start() {
   int i;
   int counted_bars = IndicatorCounted();
   if (counted_bars < 0) return (-1);
   if (counted_bars > 0) counted_bars--;
   int limit = Bars - counted_bars;
   if(counted_bars==0) limit-=1+1;
   
   for (i = limit; i >= 0; i--) 
   buffer1[i] = LaGuerre(Gama, i);
   
   for (i = limit; i >= 0; i--) {
      buffer2[i] = EMPTY_VALUE;
      buffer3[i] = EMPTY_VALUE;
      
      if (ShowCrossings) {
         if (buffer1[i] > Level1 && buffer1[i + 1] < Level1) buffer2[i] = Level1;
         if (buffer1[i] < Level1 && buffer1[i + 1] > Level1) buffer3[i] = Level1;
         if (buffer1[i] > Level3 && buffer1[i + 1] < Level3) buffer2[i] = Level3;
         if (buffer1[i] < Level3 && buffer1[i + 1] > Level3) buffer3[i] = Level3;
      }
      if (ShowLevelSig) {
         if (buffer1[i] > Level1) buffer2[i] = Level1;
         if (buffer1[i] < Level3) buffer3[i] = Level3;
      }
   }
return (0);}
//--------------------------------------------------------------------
double LaGuerre(double gamma_lag, int shift) {
   double ma = iMA(NULL, 0, 1, 0, MODE_SMA, 0, shift);
   double rez = 0.0;
   double buf1 = 0.0;
   double buf2 = 0.0;
   if (SmoothPrice) {
      buffer8[shift] = ma;
      ma = smooth(buffer8, shift);
   }
   buffer4[shift] = (1.0 - gamma_lag) * ma + gamma_lag * (buffer4[shift + 1]);
   buffer5[shift] = (-gamma_lag) * buffer4[shift] + (buffer4[shift + 1]) + gamma_lag * (buffer5[shift + 1]);
   buffer6[shift] = (-gamma_lag) * buffer5[shift] + (buffer5[shift + 1]) + gamma_lag * (buffer6[shift + 1]);
   buffer7[shift] = (-gamma_lag) * buffer6[shift] + (buffer6[shift + 1]) + gamma_lag * (buffer7[shift + 1]);
   
   if (buffer4[shift] >= buffer5[shift]) buf1 = buffer4[shift] - buffer5[shift];
   else buf2 = buffer5[shift] - buffer4[shift];
   if (buffer5[shift] >= buffer6[shift]) buf1 = buf1 + buffer5[shift] - buffer6[shift];
   else buf2 = buf2 + buffer6[shift] - buffer5[shift];
   if (buffer6[shift] >= buffer7[shift]) buf1 = buf1 + buffer6[shift] - buffer7[shift];
   else buf2 = buf2 + buffer7[shift] - buffer6[shift];
   if (buf1 + buf2 != 0.0) rez = buf1 / (buf1 + buf2);
   
   if (!SmoothPrice) {
      buffer8[shift] = rez;
      rez = smooth(buffer8, shift);
   }
   return (rez);
}
//--------------------------------------------------------------------
double smooth(double buf[], int i) {
   double rez;
   if (Smooth <= 0) rez = buf[i];
   if (Smooth == 1) rez = (buf[i] + (buf[i + 1]) + (buf[i + 2])) / 3.0;
   if (Smooth == 2) rez = (buf[i] + 2.0 * (buf[i + 1]) + 2.0 * (buf[i + 2]) + (buf[i + 3])) / 6.0;
   if (Smooth >= 3) rez = (buf[i] + 2.0 * (buf[i + 1]) + 3.0 * (buf[i + 2]) + 3.0 * (buf[i + 3]) + 2.0 * (buf[i + 4]) + (buf[i + 5])) / 12.0;
   return (rez);
}
//--------------------------------------------------------------------







Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---