//+--------------------------------------------------------------------------------------+ //| HP Extrapolator.mq4 | //| Copyright © 2008, gpwr | //| vlad1004@yahoo.com | //+--------------------------------------------------------------------------------------+ #property copyright "Copyright © 2008, gpwr" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red #property indicator_width1 2 //Global constants #define pi 3.141592653589793238462643383279502884197169399375105820974944592 //Input parameters extern int Method =1; //Prediction method //Method 1: use only existing past values and different length filters //Method 2: use both existing and prediced values with the filter length of 2*FastBars+1 extern int LastBar =150; //Last bar in the past data extern int PastBars =2000;//Number of past bars to fit HP filter extern int FutBars =100; //Number of bars to predict //Indicator buffers double fv[]; int init() { IndicatorBuffers(1); SetIndexBuffer(0,fv); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2); SetIndexShift(0,FutBars-LastBar); IndicatorShortName("HP Extrapolator"); return(0); } //+---------------------------------------------------------------------------------------+ int start() { if (ArraySize(fv)=0;i--) { y[i]=a[i]-b[i]*H1-c[i]*H2; H2=H1; H1=y[i]; } } // Lambda for Hodrick-Prescott Filter------------------------------------------------+ double Lambda(int n) { double w; // w=pi*frequency if(n<=37) switch(n) { case 2: w=pi/3.0; case 3: w=MathArctan(MathSqrt(0.6)); case 4: w=2.153460564/n; case 5: w=1.923796031/n; case 6: w=1.915022415/n; case 7: w=1.909786299/n; case 8: w=1.906409362/n; case 9: w=1.904103844/n; case 10: w=1.902459533/n; case 11: w=1.901245508/n; case 12: w=1.900323600/n; case 13: w=1.899607018/n; case 14: w=1.899038987/n; case 15: w=1.898581041/n; case 16: w=1.898206498/n; case 17: w=1.897896254/n; case 18: w=1.897636390/n; case 19: w=1.897416484/n; case 20: w=1.897228842/n; case 21: w=1.897067382/n; case 22: w=1.896927473/n; case 23: w=1.896805427/n; case 24: w=1.896698359/n; case 25: w=1.896603866/n; case 26: w=1.896520032/n; case 27: w=1.896445477/n; case 28: w=1.896378692/n; case 29: w=1.896318725/n; case 30: w=1.896264646/n; case 31: w=1.896215693/n; case 32: w=1.896171301/n; case 33: w=1.896130841/n; case 34: w=1.896094060/n; case 35: w=1.896060192/n; case 36: w=1.896029169/n; case 37: w=1.896000584/n; } else w=1.896/n; return(0.0625/MathPow(MathSin(w),4)); }