[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Does AmiBroker do Fourier transforms?



PureBytes Links

Trading Reference Links

Hi,
         

// Elementary Fourier analysis, by D. Tsokakis, May 2004

t=Cum(1)-1;

A=Param("Rsi",50,1,100,1);

B=Param("smooth",100,1,120,1);

C1=MA(RSI(A),B);

start=Cum(IsTrue(C1))==1;

t1=ValueWhen(start,t);

PlotShapes(shapeDownTriangle*start,colorYellow);

C10=ValueWhen(start,C1);Plot(C1,"C1",colorBlack,8);

GraphXSpace=2;

x = Cum(1);

lastx = LastValue( x );

Daysback = LastValue(Cum(IsTrue(C1)));

aa = LastValue( LinRegIntercept( C1, Daysback) );

bb = LastValue( LinRegSlope( C1, Daysback ) );

yy = Aa + bb * ( x - (Lastx - DaysBack) );

yy=IIf( x >= (lastx - Daysback), yy, -1e10 );

Plot( yy, "yy", colorRed );

detrend=C1-yy;

new1=detrend;Hor=LastValue(Cum(new1)/Cum(IsTrue(C1)));

pi=4*atan(1);n=12;

// Fundamental period, crude approximation

error00=10000;per01=0;g01=0;phi01=0;stg0=0.5;stp0=100;

for(phi=0;phi<2*pi;phi=phi+pi/n)

{

for(g=0.5;g<=8;g=g+stg0)

{

for(per=300;per<=1000;per=per+stp0)

{f=1/per;

y=Hor+g*sin(2*pi*f*(t-t1)+phi);

error=LastValue(Cum(abs(y-new1)));

if(error<error00)

{error00=error;per01=per;g01=g;phi01=phi;}

}}}

f01=1/per01;y01=Hor+g01*sin(2*pi*f01*(t-t1)+phi01);

Plot(y01+yy,"y01",colorSkyblue,4);

Title=Name()+" [ Sample="+WriteVal(Daysback,1.0)+" bars ]"+"\nyS0="+WriteVal(Hor,1.2)+

"\nyS01="+

WriteVal(g01,1.1)+"*sin(2*pi*(1/"+

WriteVal(per01,1.0)+")*(t-t1)+"+

WriteVal(12*phi01/pi,1.0)+"*pi/"+WriteVal(n,1.0)+"), Error1 ="+

WriteVal(LastValue(Cum(abs(y01-new1))),1.0)+", Error1/bar ="+

WriteVal(2*LastValue(Cum(abs(y01-new1)))/Daysback,1.2)+" %";;

// Fundamental period, detailed approximation

error0=10000;per1=0;g1=0;phi1=0;stg=0.5;stp=10;

for(phi=0;phi<2*pi;phi=phi+pi/n)

{

for(g=0.5;g<=8;g=g+stg)

{

for(per=per01-stp0;per<=per01+stp0;per=per+stp)

{f=1/per;

y=Hor+g*sin(2*pi*f*(t-t1)+phi);

error=LastValue(Cum(abs(y-new1)));

if(error<error0)

{error0=error;per1=per;g1=g;phi1=phi;}

}}}

f1=1/per1;y1=Hor+g1*sin(2*pi*f1*(t-t1)+phi1);

Plot(y1+yy,"y1",colorBlue,4);

Title=Title+

"\nyS1="+

WriteVal(g1,1.1)+"*sin(2*pi*(1/"+

WriteVal(per1,1.0)+")*(t-t1)+"+

WriteVal(12*phi1/pi,1.0)+"*pi/"+WriteVal(n,1.0)+"), Error1 ="+

WriteVal(LastValue(Cum(abs(y1-new1))),1.0)+", Error1/bar ="+

WriteVal(2*LastValue(Cum(abs(y1-new1)))/Daysback,1.2)+" %";;

// 2nd Harmonic

error0=10000;

for(phi=0;phi<2*pi;phi=phi+pi/n)

{

for(g=0;g<=8;g=g+0.1)

{

per2=per1/2;f=1/per2;

y2=y1+g*sin(2*pi*f*(t-t1)+phi);

error2=LastValue(Cum(abs(y2-new1)));

if(error2<error0)

{error0=error2;g2=g;phi2=phi;}

}}

f2=1/per2;y2=y1+g2*sin(2*pi*f2*(t-t1)+phi2);

Plot(y2+yy,"y1",colorYellow,8);

Title=Title+

"\nyS2="+

WriteVal(g2,1.1)+"*sin(2*pi*(1/"+

WriteVal(per2,1.0)+")*(t-t1)+"+

WriteVal(12*phi2/pi,1.0)+"*pi/"+WriteVal(n,1.0)+"), Error2 ="+

WriteVal(LastValue(Cum(abs(y2-new1))),1.0)+", Error2/bar ="+

WriteVal(2*LastValue(Cum(abs(y2-new1)))/Daysback,1.2)+" %";;

// 3rd Harmonic

error0=10000;

for(phi=0;phi<2*pi;phi=phi+pi/n)

{

for(g=0;g<=8;g=g+0.1)

{

per3=per2/2;f=1/per3;

y3=y2+g*sin(2*pi*f*(t-t1)+phi);

error3=LastValue(Cum(abs(y3-new1)));

if(error3<error0)

{error0=error3;g3=g;phi3=phi;}

}}

f3=1/per3;y3=y2+g3*sin(2*pi*f3*(t-t1)+phi3);

Plot(y3+yy,"y1",colorWhite,8);

Title=Title+

"\nyS3="+

WriteVal(g3,1.1)+"*sin(2*pi*(1/"+

WriteVal(per3,1.0)+")*(t-t1)+"+

WriteVal(12*phi3/pi,1.0)+"*pi/"+WriteVal(n,1.0)+"), Error3 ="+

WriteVal(LastValue(Cum(abs(y3-new1))),1.0)+", Error3/bar ="+

WriteVal(2*LastValue(Cum(abs(y3-new1)))/Daysback,1.2)+" %";

/*

 
       This code takes a little time to execute and also u need memory. If you want a faster execution you can get a graph in exel also.Its much faster.
        Exel--> Tools -- > AddIns ---> Install if not installed
                    Tools -- > Data Analysis -- > Fourier Series
  
      Fourier series sinusoids of time and frequency : Transforms to wavelet domain and eliminates the time factor. Not very reliable in my opinion.Teriffic lag.   Also see wavelet analysis (better)
      
 
--- N !!
 
    
      
++++++++++++++++++++++++++++++++++++++++++++++++++++++

bilbo0211 <bilbod@xxxxxxxxxx> wrote:


I searched the AmiBroker website but could find nothing w.r.t. Fourier
transforms. Does AmiBroker have Fourier transform capability?

If not, it would be a very useful tool to add. It can be used to study
underlying price cycles as well as easily plot may types of curves.

Bill
+++++++++++++++++++++++++++++++++++++++++++++++++++++++


Do you Yahoo!?
Yahoo! Small Business - Try our new resources site!

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com

For other support material please check also:
http://www.amibroker.com/support.html




Yahoo! Groups Sponsor
ADVERTISEMENT
click here


Yahoo! Groups Links