LaguerreFilterCloud

Author: Coded by Witold Wozniak
0 Views
0 Downloads
0 Favorites
LaguerreFilterCloud

//+------------------------------------------------------------------+
//|                                          LaguerreFilterCloud.mq5 |
//| Laguerre Filter                                                  |
//|                                                                  |
//| Algorithm taken from book                                        |
//|     "Cybernetics Analysis for Stock and Futures"                 |
//| by John F. Ehlers                                                |
//|                                                                  |
//|                                              contact@mqlsoft.com |
//|                                          http://www.mqlsoft.com/ |
//|   modify to MQL4 by Mikhail Kozhemyako > LaguerreFilterCloud.mq4 |
//+------------------------------------------------------------------+
#property copyright "Coded by Witold Wozniak"
#property link      "www.mqlsoft.com"
#property version   "1.00"
#property strict
#property indicator_separate_window 
#property indicator_buffers 1
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  clrGreen
#property indicator_width1 3
#property indicator_label1  "Laguerre Filter"
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà                 |
//+----------------------------------------------+
input double Gamma=0.68;// êîýôôèöèåíò èíäèêàòîðà 
int oldbar;
double L0,L1,L2,L3,L0A,L1A,L2A,L3A;
int min_rates_total;
double LaguerreBuffer,FirBuffer,DifBuffer[];
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+  
void OnInit()
  {
//---- Èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
   min_rates_total=4;
   oldbar=Bars-1;
//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0,DifBuffer);
   SetIndexShift(0,min_rates_total+1);
//---- èíèöèàëèçàöèè ïåðåìåííîé äëÿ êîðîòêîãî èìåíè èíäèêàòîðà
   string shortname=StringConcatenate("Laguerre Filter(",DoubleToString(Gamma,3),")");
   IndicatorShortName(shortname);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(
                const int rates_total,    // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
                const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
                const datetime &time[],
                const double &open[],
                const double& high[],     // öåíîâîé ìàññèâ ìàêñèìóìîâ öåíû äëÿ ðàñ÷¸òà èíäèêàòîðà
                const double& low[],      // öåíîâîé ìàññèâ ìèíèìóìîâ öåíû  äëÿ ðàñ÷¸òà èíäèêàòîðà
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]
                )
  {
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà
   if(rates_total<min_rates_total) return(0);
   int first,bar;
//---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà first äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0) // ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
     {
      first=rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
      bar=first;
     }
   else first=rates_total-prev_calculated+1+min_rates_total; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà íîâûõ áàðîâ
//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
   for(bar=first;bar>=0 && !IsStopped(); bar--)
     {
      if(oldbar<Bars || prev_calculated==0)
         {
          oldbar=Bars;
          L0A = L0;
          L1A = L1;
          L2A = L2;
          L3A = L3;
         }
      L0 = (1 - Gamma) * (high[bar]+low[bar])/2 + Gamma * L0A;
      L1 = - Gamma * L0 + L0A + Gamma * L1A;
      L2 = - Gamma * L1 + L1A + Gamma * L2A;
      L3 = - Gamma * L2 + L2A + Gamma * L3A;
      if(bar>min_rates_total)
        {
         LaguerreBuffer=(L0+2.0*L1+2.0*L2+L3)/6.0;
         FirBuffer=(1.0*(high[bar]+low[bar])/2+2.0*(high[bar-1]+low[bar-1])/2+2.0*(high[bar-2]+low[bar-2])/2+1.0*(high[bar-3]+low[bar-3])/2)/6.0;
         DifBuffer[bar]=FirBuffer-LaguerreBuffer;
        }
      else
        {
         DifBuffer[bar]=0;
        }
     }
//----     
   return(rates_total);
  }

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 ---