Hello, Yes it uses last value. But if you are after finding cycles you have to assume anyway that given cycle will last at least a bit, without such assumption there are no cycles :-) So last value from say one year back should work forward.
Best regards, Tomasz Janeczko amibroker.com ----- Original Message ----- From: "vlanschot" <[EMAIL PROTECTED]> To: <[email protected]> Sent: Thursday, October 12, 2006 12:42 PM Subject: [amibroker] Re: FFT example (4.86 beta required) > Thanks TJ, > > Just wondering if I am correct that one has to be careful in > extending this in backtests, since detrending (LR) is based on the > last value of the regression? > > PS > > --- In [email protected], "Tomasz Janeczko" <[EMAIL PROTECTED]> > wrote: >> >> Hello, >> >> Here are few words about new FFT function. >> It requires AmiBroker 4.86 BETA to run. >> http://www.amibroker.com/devlog/2006/10/11/amibroker-4860-beta- > released/ >> =============== >> >> FFT( array, len = 0 ) >> >> performs FFT (Fast Fourier Transform) on last 'len' bars of the > array, if len is set to zero, then FFT is performed >> on entire array. len parameter must be even. >> >> Result: >> >> function returns array which holds FFT bins for first 'len' bars. > There are len/2 FFT complex bins returned, >> where bin is a pair of numbers (complex number): first is real part > of the complex number and second number >> is the imaginary part of the complex number. >> >> result = FFT( array, 256 ); >> >> where: >> 0th bin (result[0] and result[1]) represents DC component, >> 1st bin (result[1 ] and result[2]) represents real and imaginary > parts of lowest frequency range >> and so on upto result[ len - 2 ] and result[ len - 1 ] >> >> remaining elements of the array are set to zero. >> >> FFT bins are complex numbers and do not represent real amplitude > and phase. To obtain amplitude and >> phase from bins you need to convert inside the formula. The > following code snipplet does that: >> >> ffc = FFT(data,Len); >> for( i = 0; i < Len - 1; i = i + 2 ) >> { >> amp[ i ] = amp[ i + 1 ] = sqrt(ffc[ i ]^ 2 + ffc[ i + 1 ] > ^2); >> phase[ i ] = phase[ i + 1 ] = atan2( ffc[ i + 1], ffc[ i ] ); >> } >> >> IMPORTANT note: input array for FFT must NOT contain any Null > values. Use Nz() function to convert Nulls to zeros >> if you are not sure that input array is free from nulls. >> >> >> Below is example code showing how to use new FFT function in AFL. >> >> SetBarsRequired(100000,100000); >> >> Len = Param("FFT Length", 1024, 64, 10000, 10 ); >> >> Len = Min( Len, BarCount ); >> >> x = BarIndex(); >> x1 = x - BarCount + Len; >> >> >> input = C; >> a = LastValue( LinRegIntercept( input, Len - 1 ) ); >> b = LastValue( LinRegSlope( input, Len - 1 ) ); >> >> >> Lr = a + b * x1; >> >> data = input - Lr;// de-trending >> >> ffc = FFT(data,Len); >> >> for( i = 0; i < Len - 1; i = i + 2 ) >> { >> amp[ i ] = amp[ i + 1 ] = sqrt(ffc[ i ]^ 2 + ffc[ i + 1 ]^2); >> phase[ i ] = phase[ i + 1 ] = atan2( ffc[ i + 1], ffc[ i ] ); >> } >> >> auto = ParamToggle("Auto dominant cycle", "No|Yes", 1 ); >> sbar = Param( "Which FFT bin", 1, 0, 50 ); >> >> skipbin1 = ParamToggle("Skip 1st FFT bin", "No|Yes", 1 ); >> >> if( auto ) >> { >> sbar = int( LastValue(ValueWhen( amp == LastValue(Highest( IIf( > skipbin1 AND x < 4, 0 , amp ) )), x / 2 )) ); >> } >> >> fv = Status("firstvisiblebar"); >> >> thisbar = Ref( int(x/2) == sbar, -fv); >> Plot( Ref(amp,-fv),"amplitude (bin " + Ref( int(x/2), -fv ) +")", > IIf( thisbar, colorRed, colorBlack ),styleArea); >> >> Plot( IIf( BarCount - BarIndex() < Len, data, Null ) , "de-trended > input ("+Len+" bars)", colorOrange, styleLeftAxisScale ); >> Plot( cos( phase[ sbar * 2 ] + (sbar) * x1 * 2 * 3.1415926 / > Len ), "dominant cycle "+ Len/(sbar) + "(" + sbar + " bin) bars", > colorBlue, styleOwnScale ); >> >> GraphZOrder=1; >> GraphXSpace = 10; >> >> Best regards, >> Tomasz Janeczko >> amibroker.com >> > > > > > > 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 Links > > > > > > 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 Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/amibroker/ <*> Your email settings: Individual Email | Traditional <*> To change settings online go to: http://groups.yahoo.com/group/amibroker/join (Yahoo! ID required) <*> To change settings via email: mailto:[EMAIL PROTECTED] mailto:[EMAIL PROTECTED] <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/
