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
| |
|
Yahoo! Groups Links
|