LK_FDI_V2_v1

Author: Copyright � 2009, Leif Kalrsson
Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
LK_FDI_V2_v1
//+------------------------------------------------------------------+
//|                                                    LK_FDI_v2.mq4 |
//|                                 Copyright © 2009, Leif Karlsson. |
//|                                        Leffemannen1973@telia.com |
//+------------------------------------------------------------------+
//| Please feel free to copy, modify and / or redistribute this      |
//| software / source code in any way you see fit.                   |
//+------------------------------------------------------------------+
//+ ********************* Shameless Ad. **************************** +
//+ * I do custom programing jobs in C, Java, X86 Assembler & MQL4 * +
//+ ***** Pleace do not hesitate to get in contact if you nead ***** +
//+ ***** something special: EA, indicator or somthing else. ******* +
//+ ****************** Leffemannen1973@telia.com ******************* +
//+ **************************************************************** +
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Leif Kalrsson"
#property link      "mailto://Leffemannen1973@telia.com"
//+------------------------------------------------------------------+
#property  indicator_separate_window
#property  indicator_buffers 3
#property  indicator_color1  Blue
#property  indicator_color2  Yellow
#property  indicator_color3  Green
#property  indicator_width1  1
//+------------------------------------------------------------------+
extern int WindowSize=60;
extern int SmoothPeriod=5;
extern bool LinearWeighted=true;
extern string AppliedPriceText1 = "Close: 0, Open: 1, High: 2, Low: 3";
extern string AppliedPriceText2 = "Median: 4, Typical: 5, Weighted: 6";
extern int AppliedPrice=0;
extern int PriceShift=0;
extern bool dFDI=true;
extern double RandomLevel=1.5;
extern int MaxBars=4000;
//+------------------------------------------------------------------+
double RangeBuffer[];
double TrendBuffer[];
double dFDIBuffer[];
double Price[];
double dPrice[];
double Alpha=0.0;
//+------------------------------------------------------------------+
int init() 
  {

   IndicatorDigits(Digits+1);

   IndicatorBuffers(5);

   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(0,RangeBuffer);
   SetIndexBuffer(1,TrendBuffer);
   SetIndexBuffer(2,dFDIBuffer);
   SetIndexBuffer(3,Price);
   SetIndexBuffer(4,dPrice);
   SetLevelValue(0,RandomLevel);

   IndicatorShortName("LK_FDI_V2, WindowSize: "+WindowSize+", SmoothPeriod: "+SmoothPeriod+" ");

   Alpha=2.0/(SmoothPeriod+1.0);

   return(0);
  }
//+------------------------------------------------------------------+
double FDI(double &Data[],int p,bool w,int Shift) 
  {
   double Df=0.0;
   double Temp=0.0;
   double Range=0.0;
   int i=0;

   Range=Data[ArrayMaximum(Data,p,Shift)]-Data[ArrayMinimum(Data,p,Shift)];

   i=p-2;
   while(i>=0) 
     {
      if(Range==0.0) Temp=1.0;
      else Temp=(Data[i+Shift]-Data[i+1+Shift])/Range;
      if(w) Df = Df+(p-1-i)*MathSqrt(Temp*Temp+1.0/(p*p));
      else Df=Df+MathSqrt(Temp*Temp+1.0/(p*p));
      i--;
     }
   if(w) Df=Df/(p/2.0);
   Df=1.0+MathLog(2.0*Df)/MathLog(2.0*p);

   return(Df);
  }
//+------------------------------------------------------------------+
int start() 
  {
   //int j = 0;
   //int i = IndicatorCounted();
   //if(i < 0) return(-1);
   //i=Bars-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+WindowSize;

   int j=0;
   int i=limit;      
   if(i>MaxBars) 
     {
      i=MaxBars;
      ArrayInitialize(TrendBuffer, 1.5);
      ArrayInitialize(RangeBuffer, 1.5);
      ArrayInitialize(dFDIBuffer,1.7);
      i--;
      j=i+WindowSize;
     }
   else j=i;

   while(j>=0) 
     {
      Price[j]=iMA(NULL,0,1,0,0,AppliedPrice,j+PriceShift);
      dPrice[j]=Price[j]-iMA(NULL,0,1,0,0,AppliedPrice,j+PriceShift+1);
      j--;
     }

   while(i>=0) 
     {
      double Df=FDI(Price,WindowSize,LinearWeighted,i);

      if(RangeBuffer[i+1]==EMPTY_VALUE) Df=(1.0-Alpha)*TrendBuffer[i+1]+Alpha*Df;
      else Df=(1.0-Alpha)*RangeBuffer[i+1]+Alpha*Df;

      if(dFDI) dFDIBuffer[i]=(1.0-Alpha)*dFDIBuffer[i+1]+Alpha*FDI(dPrice,WindowSize,LinearWeighted,i);
      else dFDIBuffer[i]=EMPTY_VALUE;

      if(Df>RandomLevel) 
        {
         RangeBuffer[i] = Df;
         TrendBuffer[i] = EMPTY_VALUE;
         if(RangeBuffer[i+1]==EMPTY_VALUE) RangeBuffer[i+1]=TrendBuffer[i+1];
           } else {
         TrendBuffer[i] = Df;
         RangeBuffer[i] = EMPTY_VALUE;
         if(TrendBuffer[i+1]==EMPTY_VALUE) TrendBuffer[i+1]=RangeBuffer[i+1];
        }
      i--;
     }

   return(0);
  }
//+------------------------------------------------------------------+

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