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

Re: [amibroker] MAMA & FAMA indicators...



PureBytes Links

Trading Reference Links

/* MESA Adaptive Moving Averages:
** MAMA and FAMA
**
** From Stocks & Commodities 7/2001
**
** AFL implementation by Tomasz Janeczko, October 2001
**
** For faster operation please check DLL version
**/

EnableScript("VBScript");

FastLimit=0.5;
SlowLimit=0.05;

Price = (H+L)/2;

Smooth = ( 4 * Price + 3 * Ref( Price,-1) + 2 * Ref(Price,-2) +
Ref(Price,-3))/10;

<%

Price = AFL("Price")
Smooth = AFL("Smooth")
nSize = UBound( Smooth )

' every Other Variable is an array Of the same size as smooth
' so just make A copy (quick init)

Detrender = Smooth
II2 = Smooth
Q2 = Smooth
Re = Smooth
Im = Smooth
I1 = Smooth
Q1 = Smooth
jl = Smooth
jQ = Smooth
Phase = Smooth
DeltaPhase = Smooth
Period = Smooth

PI = 3.1415926

For i = 0 To nSize
If i < 6 then
' init previous values to avoid problems
' with exp. averaging of uninitialized values
' later
DeltaPhase( i ) = 0
II2( i ) = 1.0
Q2( i ) = 1.0
Re( i ) = 0
Im( i ) = 0

Period( i ) = 6
Else
factor = 0.075 * Period( i - 1 ) + 0.54

Detrender( i ) = ( ( 0.0962 *Smooth( i ) + 0.5769 * Smooth( i - 2 ) _

- 0.5769 * Smooth( i - 4) - 0.0962 * Smooth( i - 6
) ) * factor )


Q1( i ) = ( ( 0.0962 *Detrender( i ) + 0.5769 * Detrender( i - 2 ) _
- 0.5769 * Detrender( i - 4) - 0.0962 * Detrender( i - 6 )
) * factor )


I1( i ) = Detrender( i - 3 )

jl( i ) = ( ( 0.0962 *I1( i ) + 0.5769 * I1( i - 2 ) _
- 0.5769 * I1( i - 4) - 0.0962 * I1( i - 6 ) ) * factor )

jQ( i ) = ( ( 0.0962 *Q1( i ) + 0.5769 * Q1( i - 2 ) _
- 0.5769 * Q1( i - 4) - 0.0962 * Q1( i - 6 ) ) * factor )

II2( i ) = I1( i ) - jQ( i )
Q2( i ) = Q1( i ) + jl( i )

II2( i ) = 0.2 * II2( i ) + 0.8 * II2( i - 1 )

Q2( i ) = 0.2 * Q2( i ) + 0.8 * Q2( i - 1 )

Re( i ) = II2( i ) * II2( i - 1 ) + Q2( i ) * Q2( i - 1 )
Im( i ) = II2( i ) * Q2( i - 1 ) - Q2( i ) * II2( i - 1 )

Re( i ) = 0.2 * Re( i ) + 0.8 * Re( i - 1 )
Im( i ) = 0.2 * Im( i ) + 0.8 * Im( i - 1 )

Period( i ) = Period( i - 1)

if ( Im( i ) <> 0 ) AND ( Re( i ) <> 0 ) Then
Period( i ) = (2 * PI) / atn( Im( i ) / Re( i ) )
End If

if( Period( i ) > 1.5 * Period( i - 1 ) ) Then Period( i ) = 1.5 *
Period( i - 1 )
if( Period( i ) < 0.67 * Period( i - 1 ) ) Then Period( i ) = 0.67 *
Period( i - 1 )

if( Period( i ) < 6 ) Then Period( i ) = 6
if( Period( i ) > 50 ) Then Period( i ) = 50

Period( i ) = 0.2 * Period( i ) + 0.8 * Period( i - 1 )


if( I1( i ) <> 0 ) Then Phase( i ) = (180/PI) * atn( Q1( i )/ I1( i )
)

DeltaPhase( i ) = Phase( i - 1 ) - Phase( i )

if( DeltaPhase( i ) < 1 ) Then DeltaPhase( i ) = 1
End If
Next

AFL("DeltaPhase") = DeltaPhase

%>

DeltaPhase = DeltaPhase;
alpha = FastLimit/DeltaPhase;
alpha = Min( alpha, FastLimit ); // not more than fast limit
alpha = Max( alpha, SlowLimit ); // not less than slow limit

MAMA = AMA( Price, alpha );
FAMA = AMA( MAMA, 0.5 * alpha );

Graph0 = MAMA;
Graph1 = FAMA;
Graph2 = Close;
Graph2Style = 64;

nurudinkaba wrote:

> Has anyone written AFL for above...and would be willing to share?
>
> Thanks
>
>
> Yahoo! Groups Sponsor
[Image]
Click here to find your contact lenses!
>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.