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

[amibroker] Re: Cycles and Mesa



PureBytes Links

Trading Reference Links

I'm sure someone has posted the code here or in the library for the 
Hilbert Transform which has the capability to calculate the dominant 
cycle which may be good for some things ...

However, even if you remove the noise and news driven events price, 
is still at best a function of many cycle lengths/frequencies and 
their corresponding amplitudes and phase shifts.  In addition 
these "features" like the signle feature of the so called single 
dominant cycle will change over time or at best get morphed by longer 
cycles with larger amplitudes.

--- In amibroker@xxxxxxxxxxxxxxx, "Rakesh Sahgal" <rakeshsahgal@xxx> 
wrote:
>
> Ton
> 
> Back in the old MetaStock days I had fiddled around with using the 
packaged
> FFT in MS. I had used it to extract the current dominant cycle 
length in a
> market and then used it to compute studies. The results were quite
> satisfactory. Then I changed platforms to AB and the whole idea got 
shelved.
> Subsequently I have tried to find a way of extracting current 
dominant cycle
> length in an issue/market in AB but have not seen any way of using 
it which
> my non-engineering/mathmetician brain could comprehend. It was in 
this
> context I tried DT's code. Unfortunately (a) it was computing power
> intensive and (b) the results were beyond my comprehension so I 
gave up on
> it. I still would like to find a way of ascertaining what the 
current cycle
> length is in an issue but have not been able to make much progress. 
Perhaps
> someone on the list could throw up some ideas which are 
implementable on the
> AB platform.
> 
> 
> R
> 
> On 9/6/06, Ton Sieverding <ton.sieverding@xxx> wrote:
> >
> >  Thanks Rakesh. I've tried underneath mentioned AFL code for 
Fourier
> > analysis. It does something but I have some questions :
> >
> > 1. I have the feeling that the code uses a lot of computer power. 
When
> > modifying the parameters it takes several seconds ( about 5 sec ) 
before I
> > have a result on the graph. I am using a Ghz 2.6 CPU with 1GB 
internal and
> > have never seen my computer so slow. Do you have the same 
experience ?
> > 2. What I would like to see is a couple of sine waves being the 
harmonics
> > of the original time series. So more or less the same picture as 
Fred's
> > Cycles. But that's not what I get. Also the calculations for the 
Fourier
> > analysis does not look familiar to me. Where can I find the 
logical
> > background behind these formulas ?
> >
> > Ton.
> >
> >
> >
> > ----- Original Message -----
> > *From:* Rakesh Sahgal <rakeshsahgal@xxx>
> > *To:* amibroker@xxxxxxxxxxxxxxx
> > *Sent:* Tuesday, September 05, 2006 2:12 PM
> > *Subject:* Re: [amibroker] Re: Cycles and Mesa
> >
> >  If you are interested in Fourier Analysis in AB environment you 
should
> > refer to the work of Dmitris Tsokasis who shared his work on 
Fourier
> > Analysis with the group. Am pasting below his code. I have never 
used it and
> > would not know how to apply it in a meaningful manner. Hope you 
find it
> > useful.
> >
> >
> > R
> >
> >
> > ===============================
> > // 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)+" %";
> >
> > /*
> >
> > ===============================
> >
> > On 9/5/06, Ton Sieverding <ton.sieverding@xxx> wrote:
> > >
> > >  I certainly like what I see Fred. But do you have the AFL code 
for this
> > > picture also ?
> > > Is this based on Fourier stuff ? I have tried to find the FTT
> > > instructions in AFL but cannot find them. Do they exist in AFL 
or did you
> > > use some special DLL ?
> > >
> > > Kind regards,
> > >  Ton Sieverding.
> > >
> > >
> > >  ----- Original Message -----
> > > *From:* Fred Tonetti <ftonetti@xxx>
> > > *To:* amibroker@xxxxxxxxxxxxxxx
> > >  *Sent:* Tuesday, September 05, 2006 6:18 AM
> > > *Subject:* [amibroker] Re: Cycles and Mesa
> > >
> > >  For example ?
> > >
> > > <<...>>
> > >
> > > ------------------------------
> > > I am using the free version of SPAMfighter for private users.
> > > It has removed 8436 spam emails to date.
> > > Paying users do not have this message in their emails.
> > > Try SPAMfighter <http://www.spamfighter.com/go.asp?t=249> for 
free now!
> > >
> > >
> >  
> >
>