Indicators Used
Miscellaneous
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 Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---