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

Re: [amibroker] Caution>DT Fourier Code



PureBytes Links

Trading Reference Links

Hello,
     The original code for fourier series indicator is posted in the files section of our usergroup.The code i posted i modified for my usage during my trial and error and experiment.I did give you warning that it consumes lot of memory but it shouldnt do all you said it did.You need at least 256 Mb of memory and it works fine for me.For a look back period of 10 years its fine  and for looking at long term  trends and basis you can use it in the weekly mode.Execution for short term trends you can curtail the look back period in code.
     Basically it goes on filtering and attenuating with each hormonic  and any inclusion of an additional  furthur few hormonics would require a cray -Redstorm for execution.I did mention the possibility and process  of using Exel as below in my mail if you are not comfortable in Abroker.
     Also note: You can experiment with the Rsi or replace with some other var like "close"in value of A :I did all that and also the exel.Its okay for general trend.No good for intermediate tops and bottoms .Need furthur hormonics to identify those i think.
    See wavelet analysis
Much superior in my opinion.Also end point fast fourier transform.  
I haven't been able to code those .Tried and gave up.
 

 BTW :The code  posted is "Elementary Fourier ".
        
         Sorry if the code caused any trouble but i did warn you about the memory usage.
 
  -----N !!
 
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
rdavis9 <mrdavis9@xxxxxxxxxx> wrote:

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






Warm regards,
Natasha !
 
 
 


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