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

[amibroker] Re: FFT example (4.86 beta required)



PureBytes Links

Trading Reference Links

What TJ posted was simply an EXAMPLE of how to use the FFT that he 
built into the product ...

What you are asking for is easily doable in AFL by downshifting the 
data array by the difference between LastValue(BarIndex()) and 
either SelectedValue(BarIndex()) or EndValue(BarIndex()) and then 
basing the AFL calculations on SelectedValue or EndValue ( Range 
Marker ) respectively rather than LastValue ...

--- In amibroker@xxxxxxxxxxxxxxx, "Ton Sieverding" 
<ton.sieverding@xxx> wrote:
>
> I agree with PS, Thomasz. For BackTesting purposes it would have 
been nice to be able to select the last value in de FFT. Also for 
other analysis like checking the stability of the first harmonic, it 
would have been nice to have a last value selection in FFT not being 
the last value of the financial timeserie. Now I first must cut the 
timeserie in several parts in order to do that. Or am I missing 
something ?
> 
> Ton.
> 
>   ----- Original Message ----- 
>   From: Tomasz Janeczko 
>   To: amibroker@xxxxxxxxxxxxxxx 
>   Sent: Thursday, October 12, 2006 9:19 PM
>   Subject: Re: [amibroker] Re: FFT example (4.86 beta required)
> 
> 
>   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" <ecbu@xxx>
>   To: <amibroker@xxxxxxxxxxxxxxx>
>   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 amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@> 
>   > 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
>   > 
>   > 
>   > 
>   > 
>   > 
>   >
>





Content-Description: "AVG certification"
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.1.409 / Virus Database: 268.13.27/517 - Release Date: 11/3/2006