PureBytes Links
Trading Reference Links
|
Below is a copy of the Fourier analysis that Natasha poster under the (Does
Amibroker do Fourier transforms) thread.
This post is a warning that DT was not kidding when he stated that his code
is a memory hog.
It took many minutes before it finally appeared on the screen. I
just happened to be in the Yahoo database of the DJI starting in Oct 10,
1928.
There was not enough memory left for me to even delete this indicator. I
finally was able to go to TOOLS>Preferences>Charting, and I changed the
number of chart sheets to 6, because I had the DT Fourier code in chart pane
#7. I then tried to shut down Amibroker in order to restart it, and it
would not do a proper shutdown. I had to click on the END NOW button to
get amibroker to close.
I then did a restart of my computer, and Amibroker would not open. I
waited a few minutes, then did another computer restart, and found that I was
able to successfully get back to 6 chart sheets.
Now I am going to try to delete the DT Fourier custom indicator that I have
not yet saved to a separate folder outside of Amibroker.
I first tried Unsuccessfully to delete this DT Fourier indicator while
it was still displayed in chart sheet #7, but there was not enought memory
left.
Ron D
============================
// Elementary Fourier analysis, by D. Tsokakis, May 2004
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)
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)+"
%";
/*
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
|
|