//+--------------------------------------------------------------------------------------+ //| Fourier Extrapolation of Indicator.mq4 | //| Copyright © 2008, gpwr | //| vlad1004@yahoo.com | //+--------------------------------------------------------------------------------------+ #property copyright "Copyright © 2009, gpwr" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Black #property indicator_color2 Blue #property indicator_color3 Red #property indicator_width1 1 #property indicator_width2 2 #property indicator_width3 2 //Global constants #define pi 3.141592653589793238462643383279502884197169399375105820974944592 //Input parameters extern int LastBar =200; //Last bar in the past data extern int PastBars =500; //Number of past bars extern int FutBars =200; //Number of bars to predict extern int HarmNo =10; //Number of frequencies; HarmNo=0 computes PastBars harmonics extern double FreqTOL =0.0001;//Tolerance of frequency calculation //FreqTOL > 0.001 may not converge //Indicator buffers double in[]; double pv[]; double fv[]; //Global variables int np,nf,lb; int init() { lb=LastBar; np=PastBars; nf=FutBars; if(HarmNo==0 || HarmNo>np) HarmNo=np; IndicatorBuffers(3); SetIndexBuffer(0,in); SetIndexBuffer(1,pv); SetIndexBuffer(2,fv); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,2); SetIndexStyle(2,DRAW_LINE,STYLE_SOLID,2); SetIndexShift(1,-lb);//past data vector 0..np-1; 0 corresponds to bar=lb SetIndexShift(2,nf-lb);//future data vector i=0..nf; nf corresponds to bar=lb IndicatorShortName("FEoI"); return(0); } int deinit(){return(0);} int start() { ArrayInitialize(in,EMPTY_VALUE); ArrayInitialize(pv,EMPTY_VALUE); ArrayInitialize(fv,EMPTY_VALUE); //Choose indicator and find the average of its np past values double x[]; //stores indicator values ArrayResize(x,np); double av=0.0; for(int i=-lb;i=0) { x[i]=in[i+lb]; av+=x[i]; } } av/=np; //Prepare modeled data for(i=0;iFreqTOL) { a=b; z[1]=x[1]-pv[1]+a*z[0]; num=z[0]*z[1]; den=z[0]*z[0]; for(int i=2;i