Ehlers Early Onset Trend

Thảo luận trong 'Bàn luận về Amibroker, Metastock, Metatrader 4' bắt đầu bởi matquykyo811, 25/6/22.

Lượt xem : 1,135

  1. matquykyo811

    matquykyo811 Well-Known Member

    Tham gia ngày:
    24/10/21
    Bài viết:
    52
    Đã được thích:
    26
    Giới tính:
    Nam
    chào các bác, hiện tại em đang muốn convert cái chỉ báo Ehlers Early Onset Trend qua ngôn ngữ afl,

    đây là code gốc của nó từ mt4:
    ---------------------------------------------------------------------------------------------------
    study(title="Ehlers Early Onset Trend",shorttitle="EOT")
    Period=input(20)
    Q1=input(0.8)
    Q2=input(0.4)

    Quotient(LPPeriod, K)=>
    PI = 3.1415926
    angle = 0.707 * 2 * PI / 100
    alpha1 = ( cos( angle ) + sin( angle ) - 1 ) / cos( angle )

    a1 = exp( -1.414 * PI / LPPeriod )
    b1 = 2 * a1 * cos( 1.414 * PI / LPPeriod )
    c2 = b1
    c3 = -a1 * a1
    c1 = 1 - c2 - c3

    HP= pow((1-alpha1/2),2)*(close - (2*close[1]) + close[2]) + 2*(1-alpha1)*nz(HP[1]) - pow((1-alpha1),2)* nz(HP[2])
    Filt= c1 * (HP + nz(HP[1]))/2 + c2*nz(Filt[1]) + c3*nz(Filt[2])
    Pk= iff(abs(Filt) > 0.991 *nz(Pk[1]), abs(Filt), 0.991 * nz(Pk[1]))
    X = nz(Filt / Pk)

    q=( X + K ) / ( K * X + 1 )

    plot(Quotient( Period, Q1 ),color=red)
    plot(Quotient( Period, Q2 ),color=aqua)
    hline(0)

    --------------------------------------------------------------------------------------------

    đây là code em chuyển qua afl:

    Period=20;
    Q1=0.8;
    Q2=0.4;

    HP = 0;
    Filt = 0;
    Pk = 0;

    function Quotient(LPPeriod, K)
    {
    PI = 3.1415926;
    angle = 0.707 * 2 * PI / 100;
    alpha1 = ( cos( angle ) + sin( angle ) - 1 ) / cos( angle );

    a1 = exp( -1.414 * PI / LPPeriod );
    b1 = 2 * a1 * cos( 1.414 * PI / LPPeriod );
    c2 = b1;
    c3 = -a1 * a1;
    c1 = 1 - c2 - c3;

    HP= (1-alpha1/2)*(1-alpha1/2) * (close - (2*Ref(Close,-1)) + Ref(Close, -2)) + 2*(1-alpha1)*nz(Ref(HP,-1)) - (1-alpha1)*(1-alpha1)* nz(Ref(HP,-2));
    Filt= c1 * (HP + nz(Ref(HP,-1)))/2 + c2*nz(Ref(Filt,-1)) + c3*nz(Ref(Filt,-2));
    Pk= iif(abs(Filt) > 0.991 *nz(Ref(Pk,-1)), abs(Filt), 0.991 * nz(Ref(Pk,-1)));
    X = nz(Filt / Pk);

    q=( X + K ) / ( K * X + 1 );
    }
    plot(Quotient( Period, Q1 ),"",colorRed, styleLine);
    plot(Quotient( Period, Q2 ),"",colorAqua, styleLine);

    --------------------------------------------------------------------

    kết quả là ko có gì xảy ra ngoài một đường màu đường zero màu đỏ, ko biết em sai chỗ nào, bác nào biết chỉnh em với ạ,
    lúc đầu em không gắn giá trị 0 cho HP, Filt, với Pk, mà lúc chạy trong function thì nó báo lỗi nên phải gắn = 0 zô

    oét ô oét ạ :((
     

Lượt bình luận : 0

Chia sẻ trang này