//+------------------------------------------------------------------+
//|                                                     SmWPRExp.mq4 |
//|       30.08.2006  Translated on MT4 by Oleg Golozubov aka Maloma |
//+------------------------------------------------------------------+

#property copyright " Copyright � 2006, HomeSoft Corp."
#property link      " spiky@sinet.spb.ru"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Gold
#property indicator_color2 Red
#include <stdlib.mqh>

extern double t3_period = 8;
extern double b = 0.8;
extern double per = 14;
extern double psel = -25;
extern double pbuy = -75;
extern double mBar = 300;

double Buffer1[];
double Buffer2[];

int init()
{
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID);
   SetIndexBuffer(0, Buffer1);
   SetIndexEmptyValue(0,0.0);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID);
   SetIndexBuffer(1, Buffer2);
   SetIndexEmptyValue(1,0.0);   
   return(0);
}

int start()
{
double e1 = 0;
double e2 = 0;
double e3 = 0;
double e4 = 0;
double e5 = 0;
double e6 = 0;
double c1 = 0;
double c2 = 0;
double c3 = 0;
double c4 = 0;
double n = 0;
double w1 = 0;
double w2 = 0;
double b2 = 0;
double b3 = 0;
double dpo = 0;
double t3 = 0;
int    shift = 0;
double wpr = 0;
double trig = 0;
bool   ft = true;

if(ft)
 { 
  b2=b*b;
  b3=b2*b;
  c1=-b3;
  c2=(3*(b2+b3));
  c3=-3*(2*b2+b+b3);
  c4=(1+3*b+b3+3*b2);
  n=t3_period;

  if(n<1) n=1;
  n=1+0.5*(n-1);
  w1=2/(n+1);
  w2=1-w1;
  ft=false;
 } 
 
int loop=Bars-IndicatorCounted();
Comment (loop);
for(shift=loop;shift>=0;shift--)
 { 
  wpr=iWPR(NULL, 0, per,shift);
  dpo=wpr;

  e1=w1*dpo+w2*e1;
  e2=w1*e1+w2*e2;
  e3=w1*e2+w2*e3;
  e4=w1*e3+w2*e4;
  e5=w1*e4+w2*e5;
  e6=w1*e5+w2*e6;

  t3=c1*e6+c2*e5+c3*e4+c4*e3;

   
  if(t3>=-50) trig=psel; 
  if(t3<-50) trig=pbuy;
  Buffer2[shift]=trig; 
  Buffer1[shift]=t3;
 }   
return(0);
}