Announcement

Collapse
No announcement yet.

MAMA FAMA Ehlers Code in EFS

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • MAMA FAMA Ehlers Code in EFS

    Hello Team,

    I could not find EFS for the above. Appreciate if some could help.


    Below is the TS code from Stocks & Commodities for the MAMA FAMA:

    TRADESTATION CODE FOR MAMA AND FAMA This code is nearly the same as the one that computes the Hilbert transform homodyne discriminator cycle measurement, with the additional code to compute phase rate of change, the nonlinear alpha, and the MAMA and FAMA lines. Your superheterodyne radios and TVs are tuned by multiplying the incoming radio frequency signal with a variable frequency local oscillator to produce a fixed-frequency intermediate frequency (IF). Homodyne means we multiply the signal by itself (delayed by one bar) to produce a zero-frequency beat note. The phase information is carried in the value of the beat note. The code here performs the complex multiplication and filtering to produce the measured phase angle.
    Inputs: Price((H+L)/2),
    FastLimit(.5),
    SlowLimit(.05);

    Vars: Smooth(0),
    Detrender(0),
    I1(0),
    Q1(0),
    jI(0),
    jQ(0),
    I2(0),
    Q2(0),
    Re(0),
    Im(0),
    Period(0),
    SmoothPeriod(0),
    Phase(0),
    DeltaPhase(0),
    alpha(0),
    MAMA(0),
    FAMA(0);

    If CurrentBar > 5 then begin
    Smooth = (4*Price + 3*Price[1] + 2*Price[2] + Price[3]) / 10;
    Detrender = (.0962*Smooth + .5769*Smooth[2] - .5769*Smooth[4]
    - .0962*Smooth[6])*(.075*Period[1] + .54);

    {Compute InPhase and Quadrature components}
    Q1 = (.0962*Detrender + .5769*Detrender[2] - .5769*Detrender[4]
    - .0962*Detrender[6])*(.075*Period[1] + .54);
    I1 = Detrender[3];

    {Advance the phase of I1 and Q1 by 90 degrees}
    jI = (.0962*I1 + .5769*I1[2] - .5769*I1[4]
    - .0962*I1[6])*(.075*Period[1] + .54);
    jQ = (.0962*Q1 + .5769*Q1[2] - .5769*Q1[4]
    - .0962*Q1[6])*(.075*Period[1] + .54);

    {Phasor addition for 3-bar averaging)}
    I2 = I1 - jQ;
    Q2 = Q1 + jI;

    {Smooth the I and Q components before applying the discriminator}
    I2 = .2*I2 + .8*I2[1];
    Q2 = .2*Q2 + .8*Q2[1];

    {Homodyne Discriminator}
    Re = I2*I2[1] + Q2*Q2[1];
    Im = I2*Q2[1] - Q2*I2[1];
    Re = .2*Re + .8*Re[1];
    Im = .2*Im + .8*Im[1];
    If Im <> 0 and Re <> 0 then Period = 360/ArcTangent(Im/Re);
    If Period > 1.5*Period[1] then Period = 1.5*Period[1];
    If Period < .67*Period[1] then Period = .67*Period[1];
    If Period < 6 then Period = 6;
    If Period > 50 then Period = 50;
    Period = .2*Period + .8*Period[1];
    SmoothPeriod = .33*Period + .67*SmoothPeriod[1];

    If I1 <> 0 then Phase = (ArcTangent(Q1 / I1));
    DeltaPhase = Phase[1] - Phase;
    If DeltaPhase < 1 then DeltaPhase = 1;
    alpha = FastLimit / DeltaPhase;
    If alpha < SlowLimit then alpha = SlowLimit;
    If alpha > FastLimit then alpha = FastLimit;
    MAMA = alpha*Price + (1 - alpha)*MAMA[1];
    FAMA = .5*alpha*MAMA + (1 - .5*alpha)*FAMA[1];

    Plot1(MAMA, "MAMA");
    Plot2(FAMA, "FAMA");

    End;
    -J.E.
    MAMA/FAMA. This code creates two plots. Be sure to assign the same scaling as the prices and plot them in subplot 1. Unfortunately, the Excel version was not completed by press time.

  • #2
    Bump.......it would be a great help is someone could do this.. eSignal support ???

    Comment

    Working...
    X