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/
 

Reply via email to