COCO研究院

 找回密碼
 註冊
搜索
查看: 7719|回復: 13

Harmonic Patterns AFL Code for Amibroker

[複製鏈接]
發表於 10-5-21 00:22 | 顯示全部樓層 |閱讀模式
本帖最後由 good88 於 10-5-21 12:29 AM 編輯

_SECTION_BEGIN("Price");
SetChartOptions(0,chartShowArrows|chartShowDates);
_N(Title = StrFormat("{{NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, Close %g (%.1f%%) {{VALUES}}", O, H, L, C, SelectedValue( ROC( C, 1 ) ) ));
Plot( C, "Close", ParamColor("Color", colorWhite ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
_SECTION_END();

_SECTION_BEGIN("Gartley");

GBmin = Param("Swing B Min.",0.55,0.3,1,0.01);
GBmax = Param("Swing B Max.",0.72,0.4,1,0.01);
GCmin = Param("Swing C Min.",0.38,0.3,1.27,0.01);
GCmax = Param("Swing C Max.",1.0,0.4,1.27,0.01);
GDmin = Param("Swing D Min.(XA)",0.55,0.3,1,0.01);
GDmax = Param("Swing D Max.(XA)",1.0,0.4,1.0,0.01);

_SECTION_END();

_SECTION_BEGIN("Bat");

BatBmin = Param("Swing B Min.",0.38,0.3,1,0.01);
BatBmax = Param("Swing B Max.",0.55,0.4,1,0.01);
BatCmin = Param("Swing C Min.",0.38,0.3,1.62,0.01);
BatCmax = Param("Swing C Max.",1.27,0.4,1.62,0.01);
BatDmin = Param("Swing D Min.(XA)",0.5,0.3,1,0.01);
BatDmax = Param("Swing D Max.(XA)",1.0,0.4,1.0,0.01);

_SECTION_END();

_SECTION_BEGIN("Butterfly");

BtBmin = Param("Swing B Min.",0.55,0.3,1,0.01);
BtBmax = Param("Swing B Max.",0.9,0.4,1,0.01);
BtCmin = Param("Swing C Min.",0.38,0.3,1.62,0.01);
BtCmax = Param("Swing C Max.",1.27,0.4,1.62,0.01);
BtDmin = Param("Swing D Min.(XA)",1,1,1.8,0.01);
BtDmax = Param("Swing D Max.(XA)",1.8,1,1.8,0.01);                                                // Max XA of Butterfly = (1.0 - 1.618)

_SECTION_END();

_SECTION_BEGIN("Crab");

CBmin = Param("Swing B Min.",0.38,0.3,1,0.01);
CBmax = Param("Swing B Max.",0.65,0.4,1,0.01);
CCmin = Param("Swing C Min.",0.38,0.3,1.62,0.01);
CCmax = Param("Swing C Max.",1.270,0.4,1.62,0.01);
CDmin = Param("Swing D Min.(XA)",1.25,1,1.8,0.01);
CDmax = Param("Swing D Max.(XA)",1.8,1,2,0.01);

_SECTION_END();

_SECTION_BEGIN("AB=CD");

abcd_Cmin = Param("Swing C Min.",0.3,                0.3        ,        1,                0.01);
abcd_Cmax = Param("Swing C Max.",0.8,                0.8        ,        1,                0.01);
abcd_Dmin = Param("Swing D Min.",1.2,                1,                2.7,        0.01);
abcd_Dmax = Param("Swing D Max.",3.7,                1,                4,                0.01);

_SECTION_END();

_SECTION_BEGIN("Patterns");
       
//strength = Param("Strength",5,2,15,1);                                                                        // Best use: 3, 4, 5
strength = Param("BARS of each LINE",5,2,15,1);                                                        // So luong bar cho moi duong XA, AB, BC,
bu = ParamToggle("Bullish Pattern","Off|On",1);                                                        // So bar/lines se quyet dinh. mo^ hinh` duoc ve the' nao`
be = ParamToggle("Bearish Pattern","Off|On",1);

bi = Cum(1)-1;

function GetTop(bars)                                                                                                                 // Lay' gia' tri cao nhat' = di?nh
        {
                Top = H == HHV(H,2*bars) AND Ref(HHV(H,bars),bars) < H;
                Top = Top AND LastValue(bi)-ValueWhen(Top,bi) > bars;
                return Top;
        }

function GetValley(bars)                                                                                                        // La'y gia tri thap' nhat' = day'
        {
                Valley = L == LLV(L,2*bars) AND Ref(LLV(L,bars),bars) > L;
                Valley = Valley AND LastValue(bi)-ValueWhen(Valley,bi) > bars;
                return Valley;
        }


// Build fractals array

P1 = GetTop(strength);                                                                                // so' bar cho 1 duong` XA, AB, BC, CD
V1 = GetValley(Strength);

P1 = IIf(P1,IIf(ValueWhen(P1,bi,2) < ValueWhen(V1,bi),P1,IIf(ValueWhen(P1,H,2) > H,False,P1)),P1);
P1 = IIf(P1 AND ValueWhen(P1,bi,0) > bi,IIf(ValueWhen(P1,bi,0) < ValueWhen(V1,bi,0),IIf(ValueWhen(P1,H,0) >= H,False,P1),P1),P1);
V1 = IIf(V1,IIf(ValueWhen(V1,bi,2) < ValueWhen(P1,bi),V1,IIf(ValueWhen(V1,L,2)<L,False,V1)),V1);
V1 = IIf(V1 AND ValueWhen(V1,bi,0) > bi ,IIf(ValueWhen(V1,bi,0) < ValueWhen(P1,bi,0),IIf(ValueWhen(V1,L,0) <= L, False,V1),V1),V1);


P1H1 = ValueWhen(P1,H);
P1Bar1 = ValueWhen(P1,bi);
P1H2 = ValueWhen(P1,H,2);
P1Bar2 = ValueWhen(P1,bi,2);
V1L1 = ValueWhen(V1,L);
V1Bar1 = ValueWhen(V1,bi);
V1L2 = ValueWhen(V1,L,2);
V1Bar2 = ValueWhen(V1,bi,2);


//============================================
//                                BULLISH PATTERNS
//============================================
/*
        Mo hinh Bullish:
        A        =        P1H2
        B        =        V1L1
        C        =        P1H1
        X        =        V1L2

*/

PTvalid = (P1Bar1 > V1Bar1 AND V1Bar1 > P1Bar2 AND P1bar2 > V1Bar2) AND P1; // Peaks and troughs are in order

myAX                        =        P1H2-V1L2;
myAB                        =        P1H2-V1L1;
myBC                        =        P1H1-V1L1;

myAB_AX                =        myAB/ myAX;
myBC_AB                =        myBC/ myAB;       

BullGartley4                 = PTvalid         AND         (        myAB_AX > GBmin        )                 AND (        myAB_AX < GBmax        )
                                                                AND          (        myBC_AB > GCMin         )                 AND (        myBC_AB < GCMax        );

BullBat4                         = PTvalid         AND         (        myAB_AX > BatBmin )                 AND (        myAB_AX < BatBmax        )
                                                                AND         (        myBC_AB > BatCMin )                 AND (        myBC_AB < BatCMax        );

BullButterfly4         = PTvalid         AND         (        myAB_AX > BtBmin )                 AND (        myAB_AX < BtBMax        )
                                                                AND          (        myBC_AB > BtCmin )                 AND (        myBC_AB < BtCmin         );

BullCrab4                         = PTvalid         AND         (        myAB_AX > CBmin )                          AND (        myAB_AX < CBmax         )
                                                                AND          (        myBC_AB > CCmin )                 AND (        myBC_AB < CCmax        );

BullABCD4                        = PTvalid AND         (        myBC_AB > abcd_Cmin)         AND (        myBC_AB < abcd_Cmax        );

strPattern = "";

//==================================================
//                                 BULLISH ABCD
//         Bullish pattern found. D retracement level is not evaluated
//==================================================
        dHigh                =                HighestSince(BullABCD4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BullABCD4,L);
       
        myC                        =                ValueWhen(BullABCD4,P1H1);
        myB                        =                ValueWhen(BullABCD4,V1L1);
        myA                        =                ValueWhen(BullABCD4,P1H2);
        myX                        =                ValueWhen(BullABCD4,V1L2);
        myCB                =                myC - myB;

        my_d_min        =                myCB        *        abcd_DMin ;                                        // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myCB        *        abcd_DMax ;
        my_Cd_min        =                myC - my_d_min;                                           // Khoang dich chuyen cua duong Ad con.
        my_Cd_max        =                myC - my_d_max;

BullABCD                 =                 IIf(                ( dLow  <        my_Cd_min        )        AND                ( dLow        > my_Cd_max )       
                                                                AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
                                                                True, False
                                                        );

BullABCD                =                BullABCD        AND (dLow                <        myB);


//==================================================
//                                 BULLISH GARTLEY
//==================================================
        dHigh                =                HighestSince(BullGartley4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BullGartley4,L);

        myC                        =                ValueWhen(BullGartley4,P1H1);
        myB                        =                ValueWhen(BullGartley4,V1L1);
        myA                        =                ValueWhen(BullGartley4,P1H2);
        myX                        =                ValueWhen(BullGartley4,V1L2);
        myAX                =                myA - myX;

        my_d_min        =                myAX        *        GDmin;                                                        // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myAX        *        GDMax;
        my_Ad_min        =                myA - my_d_min;                                                        // Khoang dich chuyen cua duong Ad con.
        my_Ad_max        =                myA - my_d_max;

BullGartley         =                 IIf(                ( dLow  <        my_Ad_min        )        AND                ( dLow        > my_Ad_max )       
                                                                AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
                                                                True, False
                                                        );
BullGartley         =                BullGartley         AND (dLow                <        myB);                                                // diem D thap' hon B
strPattern         =                WriteIf(BullGartley,"BULLISH GARTLEY",strPattern);



//==================================================
//                                 BULLISH BAT
//==================================================
        dHigh                =                HighestSince(BullBat4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BullBat4,L);       

        myC                        =                ValueWhen(BullBat4,P1H1);
        myB                        =                ValueWhen(BullBat4,V1L1);
        myA                        =                ValueWhen(BullBat4,P1H2);
        myX                        =                ValueWhen(BullBat4,V1L2);
        myAX                =                myA - myX;

        my_d_min        =                myAX        *        BatDmin;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myAX        *        BatDmax ;
        my_Ad_min        =                myA - my_d_min;                                                        // Khoang dich chuyen cua duong Ad con.
        my_Ad_max        =                myA - my_d_max;

BullBat                 =                 IIf(                ( dLow  <        my_Ad_min        )        AND                ( dLow        > my_Ad_max )       
                                                                AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
                                                                True, False
                                                        );
BullBat                 =                BullBat         AND (dLow                <        myB);                        // diem d thap hon diem B
strPattern         =                WriteIf(BullBat,"BULLISH BAT",strPattern);


//==================================================
//                                 BULLISH CRAB - CUA
//==================================================
        dHigh                =                HighestSince(BullCrab4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BullCrab4,L);

        myC                        =                ValueWhen(BullCrab4,P1H1);
        myB                        =                ValueWhen(BullCrab4,V1L1);
        myA                        =                ValueWhen(BullCrab4,P1H2);
        myX                        =                ValueWhen(BullCrab4,V1L2);
        myAX                =                myA - myX;

        my_d_min        =                myAX        *        CDmin ;                                        // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myAX        *        CDmax ;
        my_Ad_min        =                myA - my_d_min;                                                // Khoang dich chuyen cua duong Ad con.
        my_Ad_max        =                myA - my_d_max;

BullCrab                 =                 IIf(                ( dLow  <        my_Ad_min        )        AND                ( dLow        > my_Ad_max )       
                                                                AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
                                                                True, False
                                                        );
BullCrab                 =                BullCrab         AND (dLow                <        myX);                                        // diem D thap' hon X
strPattern         =                WriteIf(BullCrab ,"BULLISH CRAB",strPattern);


//==================================================
//                                 BULLISH  BUTTTERFLY
//==================================================
        dHigh                =                HighestSince(BullButterfly4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BullButterfly4,L);

        myC                        =                ValueWhen(BullButterfly4,P1H1);
        myB                        =                ValueWhen(BullButterfly4,V1L1);
        myA                        =                ValueWhen(BullButterfly4,P1H2);
        myX                        =                ValueWhen(BullButterfly4,V1L2);
        myAX                =                myA - myX;

        my_d_min        =                myAX        *        BtDmin ;                                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myAX        *        BtDmax ;
        my_Ad_min        =                myA - my_d_min;                                                                        // Khoang dich chuyen cua duong Ad con.
        my_Ad_max        =                myA - my_d_max;

BullButterfly         =                 IIf(                ( dLow  <        my_Ad_min        )        AND                ( dLow        > my_Ad_max )       
                                                                        AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
                                                                True, False
                                                                );
BullButterfly         =                BullButterfly         AND (dLow                <        myX);                                        // diem D thap' hon X
strPattern                 =                WriteIf(BullButterfly ,"BULLISH BUTTERFLY",strPattern);



//==========================================================
//   VE DUONG CHO MO HINH BULLISH ABCB
//==========================================================
BullHar4         =  BullABCD4;
BullHar         =  BullABCD;

Point4 = IIf(BullHar,ValueWhen(BullHar4,bi),Null);
BullHar = IIf(BullHar, IIf(Point4 == ValueWhen(BullHar,point4,0) AND ValueWhen(BullHar,bi,0) > bi ,False,BullHar),BullHar);

A = ValueWhen(BullHar4,P1H2);
Abar = ValueWhen(BullHar4,P1bar2);
B = ValueWhen(BullHar4,V1L1);
Bbar = ValueWhen(BullHar4,V1bar1);
C1 = ValueWhen(BullHar4,P1H1);
C1bar = ValueWhen(BullHar4,P1bar1);
D = ValueWhen(BullHar,L);
Dbar = ValueWhen(BullHar,bi);

BCdAB = (C1-B)/(A-B);
BCdCD = (C1-D)/(C1-B);

PlotPattern = Dbar > C1bar;

if(LastValue(PlotPattern) AND bu)
{
                ColorX = colorGreen;
        // Ve cac duong AB, BC, CD
                Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(Bbar),LastValue(B)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(C1bar),LastValue(C1),LastValue(Dbar),LastValue(D)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleDashed);
                Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(Dbar),LastValue(D)),"",ColorX ,styleDashed);

        // Ve cac gia tri Fibo
                PlotText(NumToStr(LastValue(BCdAB),1.2),(LastValue(C1bar)+LastValue(Abar))/2,(LastValue(C1)+LastValue(A))/2,ColorX );
                PlotText(NumToStr(LastValue(BCdCD),1.2),(LastValue(Bbar)+LastValue(Dbar))/2,(LastValue(B)+LastValue(D))/2,ColorX );

        //---------- Viet cac diem X, A, B, C, D: by binhnd---------------------
                xlech                =        0;
                ylech                 =         2;
                PlotText("A",LastValue(Abar)        +         xlech,        LastValue(A)        +        ylech,        ColorX );
                PlotText("B",LastValue(Bbar)        +         xlech,        LastValue(B)        -        ylech,        ColorX );
                PlotText("C",LastValue(C1bar)        +         xlech,        LastValue(C1)        +        ylech,        ColorX );
                PlotText("D",LastValue(Dbar)        +         xlech,        LastValue(D)        -        ylech,        ColorX );

        //--------- Viet thuyet minh mo hinh: by binhnd--------------
                if (strPattern!="")  
                {
                        myStr                        =        "Pattern: BULLISH AB=CD";
                        toadoX                        =        LastValue(Abar);
                        toadoY                        =        LastValue(D);

                        PlotText(myStr,toadoX,toadoY,ColorX );
                }

}                        //        end of Ve duong` bullish abcd



//==========================================================
//   VE DUONG CHO MO HINH BULLISH BAT, GARTLEY, BUTTERFLY, CRAB
//==========================================================


BullHar4 = BullGartley4 OR BullButterfly4 OR BullBat4 OR BullCrab4 ;
BullHar = BullGartley OR BullButterfly OR BullBat OR BullCrab;

Point4 = IIf(BullHar,ValueWhen(BullHar4,bi),Null);
BullHar = IIf(BullHar, IIf(Point4 == ValueWhen(BullHar,point4,0) AND ValueWhen(BullHar,bi,0) > bi ,False,BullHar),BullHar);

X = ValueWhen(BullHar4,V1L2);
Xbar = ValueWhen(BullHar4,V1Bar2);
A = ValueWhen(BullHar4,P1H2);
Abar = ValueWhen(BullHar4,P1bar2);
B = ValueWhen(BullHar4,V1L1);
Bbar = ValueWhen(BullHar4,V1bar1);
C1 = ValueWhen(BullHar4,P1H1);
C1bar = ValueWhen(BullHar4,P1bar1);
D = ValueWhen(BullHar,L);
Dbar = ValueWhen(BullHar,bi);

ABdXA = (A-B)/(A-X);
BCdAB = (C1-B)/(A-B);
ADdXA = (A-D)/(A-X);
BCdCD = (C1-D)/(C1-B);

PlotPattern = Dbar > C1bar;

if(LastValue(PlotPattern) AND bu)
{
                        ColorX        = colorBlue;
                // Ve cac duong XA, AB, BC, CD
                        Plot( LineArray(LastValue(Xbar),LastValue(X),LastValue(Abar),LastValue(A)),"",ColorX,styleThick);
                        Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(Bbar),LastValue(B)),"",ColorX,styleThick);
                        Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(C1bar),LastValue(C1)),"",ColorX,styleThick);
                        Plot(LineArray(LastValue(C1bar),LastValue(C1),LastValue(Dbar),LastValue(D)),"",ColorX,styleThick);
                        Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Bbar),LastValue(B)),"",ColorX,styleDashed);
                        Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Abar),LastValue(A)),"",ColorX,styleThick);
                        Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(C1bar),LastValue(C1)),"",ColorX,styleDashed);
                        Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(Dbar),LastValue(D)),"",ColorX,styleDashed);
                        Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Dbar),LastValue(D)),"",ColorX,styleDashed);

                // Ve cac gia tri Fibo
                        PlotText(NumToStr(LastValue(ABdXA),1.2),(LastValue(Bbar)+LastValue(Xbar))/2,(LastValue(B)+LastValue(X))/2,ColorX);
                        PlotText(NumToStr(LastValue(BCdAB),1.2),(LastValue(C1bar)+LastValue(Abar))/2,(LastValue(C1)+LastValue(A))/2,ColorX);
                        PlotText(NumToStr(LastValue(ADdXA),1.2) ,(LastValue(Dbar)+LastValue(Xbar))/2,(LastValue(D)+LastValue(X))/2,ColorX);
                        PlotText(NumToStr(LastValue(BCdCD),1.2),(LastValue(Bbar)+LastValue(Dbar))/2,(LastValue(B)+LastValue(D))/2,ColorX);

                //---------- Viet cac diem X, A, B, C, D: by binhnd---------------------
                        xlech                =        0;
                        ylech                 =         2;
                        PlotText("X",LastValue(Xbar)        +         xlech,        LastValue(X)        -        ylech,        ColorX);
                        PlotText("A",LastValue(Abar)        +         xlech,        LastValue(A)        +        ylech,        ColorX);
                        PlotText("B",LastValue(Bbar)        +         xlech,        LastValue(B)        -        ylech,        ColorX);
                        PlotText("C",LastValue(C1bar)        +         xlech,        LastValue(C1)        +        ylech,        ColorX);
                        PlotText("D",LastValue(Dbar)        +         xlech,        LastValue(D)        -        ylech,        ColorX);

                //--------- Viet thuyet minh mo hinh: by binhnd--------------
                        if (strPattern!="")  
                        {
                                strPattern         =         "Pattern: " + strPattern;
                                toadoX                        =        (LastValue(Dbar)+LastValue(Xbar))/2;
                                toadoY                        =        (LastValue(D)+LastValue(X))/2;

                                PlotText(strPattern,toadoX,toadoY-2,ColorX);
                        }

}                        // end of Ve duong cho cac mo hinh Crab, Butterfly, Bat


//=============================================================
//                                BEARISH PATTERNS
//=============================================================

PTvalid = (V1Bar1 > P1Bar1 AND P1Bar1 > V1Bar2 AND V1Bar2 > P1Bar2) AND V1;

/*=====================
                X         =         P1H2                                         Trong mo hinh` bear: Die^m X cao hon diem A. MyAX = X-> A
                A        =        V1L2
                B        =        P1H1
                C        =        V1L1

=======================*/
myAX                        =        P1H2-V1L2;                               
myAB                        =        P1H1-V1L2;
myBC                        =        P1H1-V1L1;

myAB_AX                =        myAB/ myAX;
myBC_AB                =        myBC/ myAB;       

BearGartley4                 = PTvalid         AND         (        myAB_AX > GBmin        )                 AND (        myAB_AX < GBmax        )
                                                                AND          (        myBC_AB > GCMin         )                 AND (        myBC_AB < GCMax        );

BearBat4                         = PTvalid         AND         (        myAB_AX > BatBmin )                 AND (        myAB_AX < BatBmax        )
                                                                AND         (        myBC_AB > BatCMin )                 AND (        myBC_AB < BatCMax        );

BearButterfly4         = PTvalid         AND         (        myAB_AX > BtBmin )                 AND (        myAB_AX < BtBMax        )
                                                                AND          (        myBC_AB > BtCmin )                 AND (        myBC_AB < BtCmin         );

BearCrab4                         = PTvalid         AND         (        myAB_AX > CBmin )                          AND (        myAB_AX < CBmax         )
                                                                AND          (        myBC_AB > CCmin )                 AND (        myBC_AB < CCmax        );

BearABCD4                        = PTvalid AND         (        myBC_AB > abcd_Cmin)         AND (        myBC_AB < abcd_Cmax        );

strPattern = "";



//==========================================================
//                                 BEARISH ABCD
//         Bearish pattern found. D retracement level is not evaluated
//==========================================================
        dHigh                =                HighestSince(BearABCD4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BearABCD4,L);
       
        myA                        =                ValueWhen(BearABCD4,V1L2);
        myB                        =                ValueWhen(BearABCD4,P1H1);
        myC                        =                ValueWhen(BearABCD4,V1L1);
        myCB                =                myB - myC;

        my_d_min        =                myCB        *        abcd_DMin ;                                        // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myCB        *        abcd_DMax ;
        my_Cd_min        =                myC + my_d_min;                                           // Khoang dich chuyen cua duong Ad con.
        my_Cd_max        =                myC + my_d_max;

BearABCD                 =                 IIf(                ( dHigh          >        my_Cd_min        )        AND                ( dHigh        < my_Cd_max )       
                                                                AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
                                                                True, False
                                                        );

BearABCD                =                BearABCD        AND (dHigh                >        myB);

//=============================================================
//                                BEARISH GARTLEY
//=============================================================
        dHigh                =                HighestSince(BearGartley4,H);                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BearGartley4,L);

        myX                        =                ValueWhen(BearGartley4,P1H2);
        myA                        =                ValueWhen(BearGartley4,V1L2);
        myAX                =                myX - myA;

        myB                        =                ValueWhen(BearGartley4,P1H1);
        myC                        =                ValueWhen(BearGartley4,V1L1);


        my_d_min        =                myAX        *        GDmin;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myAX        *        GDMax;
        my_Ad_min        =                myA         +         my_d_min;                                        // Khoang dich chuyen cua duong Ad con.
        my_Ad_max        =                myA         +         my_d_max;

BearGartley         =                 IIf(                ( dHigh        >        my_Ad_min        )        AND                ( dHigh        < my_Ad_max )       
                                                                AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
                                                                True, False
                                                        );
BearGartley         =                BearGartley         AND (dHigh                >        myB);                                                // diem D cao hon B
strPattern         =                WriteIf(BearGartley ,"BEARISH GARTLEY",strPattern);

//=============================================================
//                                BEARISH BAT
//=============================================================
        dHigh                =                HighestSince(BearBat4,H);                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BearBat4,L);

        myX                        =                ValueWhen(BearBat4,P1H2);
        myA                        =                ValueWhen(BearBat4,V1L2);
        myAX                =                myX - myA;

        myB                        =                ValueWhen(BearBat4,P1H1);
        myC                        =                ValueWhen(BearBat4,V1L1);


        my_d_min        =                myAX        *        BatDmin ;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myAX        *        BatDMax ;
        my_Ad_min        =                myA         +         my_d_min;                                        // Khoang dich chuyen cua duong Ad con.
        my_Ad_max        =                myA         +         my_d_max;

BearBat                 =                 IIf(                ( dHigh        >        my_Ad_min        )        AND                ( dHigh        < my_Ad_max )       
                                                                AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
                                                                True, False
                                                        );
BearBat                 =                BearBat         AND (dHigh                >        myB);                                                // diem D cao hon B
strPattern         =                WriteIf(BearBat ,"BEARISH BAT",strPattern);


//=============================================================
//                                BEARISH BUTTERFLY
//=============================================================
        dHigh                =                HighestSince(BearButterfly4,H);                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BearButterfly4,L);

        myX                        =                ValueWhen(BearButterfly4,P1H2);
        myA                        =                ValueWhen(BearButterfly4,V1L2);
        myAX                =                myX - myA;

        myB                        =                ValueWhen(BearButterfly4,P1H1);
        myC                        =                ValueWhen(BearButterfly4,V1L1);


        my_d_min        =                myAX        *        BtDmin ;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myAX        *        BtDmax ;
        my_Ad_min        =                myA         +         my_d_min;                                                // Khoang dich chuyen cua duong Ad con.
        my_Ad_max        =                myA         +         my_d_max;

BearButterfly =                 IIf(                ( dHigh        >        my_Ad_min        )        AND                ( dHigh        < my_Ad_max )       
                                                                AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
                                                                True, False
                                                        );
BearButterfly        =                BearButterfly         AND (dHigh                >        myX);                                                // diem D cao hon X
strPattern                =                WriteIf(BearButterfly ,"BEARISH BUTTERFLY",strPattern);



//=============================================================
//                                BEARISH CRAB
//=============================================================
        dHigh                =                HighestSince(BearCrab4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
        dLow                 =                 LowestSince(BearCrab4,L);

        myX                        =                ValueWhen(BearCrab4,P1H2);
        myA                        =                ValueWhen(BearCrab4,V1L2);
        myAX                =                myX - myA;

        myB                        =                ValueWhen(BearCrab4,P1H1);
        myC                        =                ValueWhen(BearCrab4,V1L1);


        my_d_min        =                myAX        *        CDmin ;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
        my_d_max        =                myAX        *        CDmax ;
        my_Ad_min        =                myA         +         my_d_min;                                                // Khoang dich chuyen cua duong Ad con.
        my_Ad_max        =                myA         +         my_d_max;

BearCrab                 =                 IIf(                ( dHigh        >        my_Ad_min        )        AND                ( dHigh        < my_Ad_max )       
                                                                AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
                                                                True, False
                                                        );
BearCrab                 =                BearCrab         AND (dHigh                >        myX);                                                // diem D cao hon X
strPattern         =                WriteIf(BearCrab ,"BEARISH CRAB",strPattern);



//==========================================================
//   VE DUONG CHO MO HINH BEARISH ABCD
//==========================================================


BearHar4 = BearABCD4;
BearHar = BearABCD;

Point4 = IIf(BearHar,ValueWhen(BearHar4,bi),Null);
BearHar = IIf(BearHar, IIf(Point4 == ValueWhen(BearHar,point4,0) AND ValueWhen(BearHar,bi,0) > bi ,False,BearHar),BearHar);

A = ValueWhen(BearHar4,V1L2);
Abar = ValueWhen( BearHar4,V1bar2);
B = ValueWhen(BearHar4,P1H1);
Bbar = ValueWhen(BearHar4,P1bar1);
C1 = ValueWhen(BearHar4,V1L1);
C1bar = ValueWhen(BearHar4,V1bar1);
D = ValueWhen(BearHar,H);
Dbar = ValueWhen(BearHar,bi);

BCdAB = (B-C1)/(B-A);
BCdCD = (D-C1)/(B-C1);

PlotPattern = Dbar > C1bar;

//--------- Ve duong ------------------
if(LastValue(Plotpattern) AND be)
{
                ColorX = colorYellow;
        // Ve duong AB, BC
                Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(Bbar),LastValue(B)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(C1bar),LastValue(C1),LastValue(Dbar),LastValue(D)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleDashed);
                Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(Dbar),LastValue(D)),"",ColorX ,styleDashed);

        // Viet cac gia tri Fibo tren duong AB, BC
                PlotText(NumToStr(LastValue(BCdAB),1.2),(LastValue(C1bar)+LastValue(Abar))/2,(LastValue(C1)+LastValue(A))/2,ColorX );
                PlotText(NumToStr(LastValue(BCdCD),1.2) ,(LastValue(Dbar)+LastValue(Bbar))/2,(LastValue(D)+LastValue(B))/2,ColorX );

        //---------- Viet cac diem A, B, C, D: by binhnd---------------------
                xlech                =        -1;
                ylech                 =         1;
                PlotText("A",LastValue(Abar)        +         xlech,        LastValue(A)        -        ylech,        ColorX );
                PlotText("B",LastValue(Bbar)        +         xlech,        LastValue(B)        +        ylech,        ColorX );
                PlotText("C",LastValue(C1bar)        +         xlech,        LastValue(C1)        -        ylech,        ColorX );
                PlotText("D",LastValue(Dbar)        +         xlech,        LastValue(D)        +        ylech,        ColorX );

        //--------- Viet thuyet minh mo hinh: by binhnd--------------
                if (strPattern!="")
                        {
                                myStr                        =        "Pattern: BEARISH AB=CD";
                                toadoaX                =        LastValue(Abar);
                                toadoY                        =        LastValue(D);

                                PlotText(myStr,toadoaX,toadoY+1,ColorX );
                        }
       
}                        // end of VE DUONG CHO MO HINH BEARISH ABCD


//==========================================================
//   VE DUONG CHO MO HINH BEARISH BAT, GARTLEY, BUTTERFLY, CRAB
//==========================================================

BearHar4 = BearGartley4 OR BearButterfly4 OR BearBat4 OR BearCrab4 ;
BearHar = BearGartley OR BearButterfly OR BearBat OR BearCrab ;

Point4 = IIf(BearHar,ValueWhen(BearHar4,bi),Null);
BearHar = IIf(BearHar, IIf(Point4 == ValueWhen(BearHar,point4,0) AND ValueWhen(BearHar,bi,0) > bi ,False,BearHar),BearHar);

X = ValueWhen(BearHar4,P1H2);
Xbar = ValueWhen(BearHar4,P1Bar2);
A = ValueWhen(BearHar4,V1L2);
Abar = ValueWhen( BearHar4,V1bar2);
B = ValueWhen(BearHar4,P1H1);
Bbar = ValueWhen(BearHar4,P1bar1);
C1 = ValueWhen(BearHar4,V1L1);
C1bar = ValueWhen(BearHar4,V1bar1);
D = ValueWhen(BearHar,H);
Dbar = ValueWhen(BearHar,bi);

ABdXA = (B-A)/(X-A);
BCdAB = (B-C1)/(B-A);
ADdXA = (D-A)/(X-A);
BCdCD = (D-C1)/(B-C1);

PlotPattern = Dbar > C1bar;

//--------- Ve duong ------------------
if(LastValue(Plotpattern) AND be)
{
                ColorX = colorRed;
        // Ve duong XA, AB, BC
                Plot( LineArray(LastValue(Xbar),LastValue(X),LastValue(Abar),LastValue(A)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(Bbar),LastValue(B)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(C1bar),LastValue(C1),LastValue(Dbar),LastValue(D)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Bbar),LastValue(B)),"",ColorX ,styleDashed);
                Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Abar),LastValue(A)),"",ColorX ,styleThick);
                Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleDashed);
                Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(Dbar),LastValue(D)),"",ColorX ,styleDashed);
                Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Dbar),LastValue(D)),"",ColorX ,styleDashed);

        // Viet cac gia tri Fibo tren duong XA, AB, BC
                PlotText(NumToStr(LastValue(ABdXA),1.2),(LastValue(Bbar)+LastValue(Xbar))/2,(LastValue(B)+LastValue(X))/2,ColorX );
                PlotText(NumToStr(LastValue(BCdAB),1.2),(LastValue(C1bar)+LastValue(Abar))/2,(LastValue(C1)+LastValue(A))/2,ColorX );
                PlotText(NumToStr(LastValue(BCdCD),1.2) ,(LastValue(Dbar)+LastValue(Bbar))/2,(LastValue(D)+LastValue(B))/2,ColorX );
                PlotText(NumToStr(LastValue(ADdXA),1.2) ,(LastValue(Dbar)+LastValue(Xbar))/2,(LastValue(D)+LastValue(X))/2,ColorX );

        //---------- Viet cac diem X, A, B, C, D: by binhnd---------------------
                xlech                =        -1;
                ylech                 =         1;
                PlotText("X",LastValue(Xbar)        +         xlech,        LastValue(X)        +        ylech,        ColorX );
                PlotText("A",LastValue(Abar)        +         xlech,        LastValue(A)        -        ylech,        ColorX );
                PlotText("B",LastValue(Bbar)        +         xlech,        LastValue(B)        +        ylech,        ColorX );
                PlotText("C",LastValue(C1bar)        +         xlech,        LastValue(C1)        -        ylech,        ColorX );
                PlotText("D",LastValue(Dbar)        +         xlech,        LastValue(D)        +        ylech,        ColorX );

        //--------- Viet thuyet minh mo hinh: by binhnd--------------
                if (strPattern!="")
                        {
                                strPattern         =         "Pattern: " + strPattern;
                                toadoaX                =        (LastValue(Dbar)+LastValue(Xbar))/2;
                                toadoY                        =        (LastValue(D)+LastValue(X))/2;

                                PlotText(strPattern,toadoaX,toadoY+1,ColorX );
                        }
       
}                        // end of VE DUONG CHO MO HINH BEARISH BAT, GARTLEY, BUTTERFLY, CRAB




//=================================
// Show diem ho^~ tro. va` khang' cu. ko?
//=================================

plotFractals = ParamToggle("Plot Fractals","Off|On",1);                               
if(PlotFractals)
{
        PlotShapes(shapeSmallCircle*P1,colorRed,0,H,10);
        PlotShapes(shapeSmallCircle*V1,colorBlue,0,L,-10);
}



//==============================================
// DAT DIEU KIEN cho TIM KIEM BULL
//==============================================
dkBull = False;
ListBull                 =         ParamList("Type of Bullish", "None|AB=CD|Gartley|Butterfly|Bat|Crab|All Patterns", 6);
        if         (        ListBull == "None"                )                dkBull =         True;
        if (        ListBull =="AB=CD"                )                 dkBull        =        BullABCD ;
        if (        ListBull =="Gartley"                )                 dkBull        =        BullGartley ;
        if (        ListBull =="Butterfly"        )                 dkBull        =        BullButterfly ;
        if (        ListBull =="Bat"                        )                 dkBull        =        BullBat ;
        if (        ListBull =="Crab"                        )                 dkBull        =        BullCrab ;
        if (        ListBull =="All Patterns")                 dkBull        =        (BullABCD) OR (BullGartley) OR (BullButterfly ) OR (BullBat ) OR (BullCrab);

//==============================================
// DAT DIEU KIEN cho TIM KIEM BEAR
//==============================================
dkBear = False;
ListBear                 =         ParamList("Type of Bearish", "None|AB=CD|Gartley|Butterfly|Bat|Crab|All Patterns", 0);
        if         (        ListBear == "None"                )                dkBear =         True;
        if (        ListBear =="AB=CD"                )                 dkBear        =        BearABCD ;
        if (        ListBear =="Gartley"                )                 dkBear        =        BearGartley ;
        if (        ListBear =="Butterfly"        )                 dkBear        =        BearButterfly ;
        if (        ListBear =="Bat"                        )                 dkBear        =        BearBat ;
        if (        ListBear =="Crab"                        )                 dkBear =        BearCrab ;
        if (        ListBear =="All Patterns")                 dkBear =        (BearABCD ) OR (BearGartley ) OR (BearButterfly ) OR (BearBat ) OR (BearCrab );
//===============================

AddColumn(V,"Volume",1.0);
Filter = (dkBull) AND (dkBear);
chart-797119.png
 樓主| 發表於 10-5-21 00:28 | 顯示全部樓層
這程式碼有啥用途呢???
發表於 10-5-21 06:55 | 顯示全部樓層
試了以後會劃線
我愛紅茶 該用戶已被刪除
發表於 10-5-21 09:12 | 顯示全部樓層
謝謝分享好東西

晚上再來把這些機馬都打包一下
我愛紅茶 該用戶已被刪除
發表於 10-5-21 09:29 | 顯示全部樓層
_SECTION_BEGIN("Harmonic Patterns");

雞馬

_SECTION_END();

打包一下~阿不然要刪會很麻煩
我愛紅茶 該用戶已被刪除
發表於 10-5-21 09:42 | 顯示全部樓層
偶想請問GOOD大~這兩組機馬差異點在哪裡?
因為我RUN來的結果都一樣~所以在想說那是有版本之分嗎?(我的有些上版本號碼)


  1. _SECTION_BEGIN("Harmonic_binhnd_v1.4");

  2. /*                     HARMONIC PATTERN DETECTION                        


  3. Automatic Detection of Harmonic Patterns - Gartley, Bat, Butterfly and Crab.

  4. Zig Zag is not used in this AFL. It is based on fractals

  5. Contact - joy.edakad@gmail.com

  6. */



  7. _SECTION_BEGIN("Gartley");

  8. GBmin = Param("Swing B Min.",0.55,0.3,1,0.01);
  9. GBmax = Param("Swing B Max.",0.72,0.4,1,0.01);
  10. GCmin = Param("Swing C Min.",0.38,0.3,1.27,0.01);
  11. GCmax = Param("Swing C Max.",1.0,0.4,1.27,0.01);
  12. GDmin = Param("Swing D Min.(XA)",0.55,0.3,1,0.01);
  13. GDmax = Param("Swing D Max.(XA)",1.0,0.4,1.0,0.01);

  14. _SECTION_END();

  15. _SECTION_BEGIN("Bat");

  16. BatBmin = Param("Swing B Min.",0.38,0.3,1,0.01);
  17. BatBmax = Param("Swing B Max.",0.55,0.4,1,0.01);
  18. BatCmin = Param("Swing C Min.",0.38,0.3,1.62,0.01);
  19. BatCmax = Param("Swing C Max.",1.27,0.4,1.62,0.01);
  20. BatDmin = Param("Swing D Min.(XA)",0.5,0.3,1,0.01);
  21. BatDmax = Param("Swing D Max.(XA)",1.0,0.4,1.0,0.01);

  22. _SECTION_END();

  23. _SECTION_BEGIN("Butterfly");

  24. BtBmin = Param("Swing B Min.",0.55,0.3,1,0.01);
  25. BtBmax = Param("Swing B Max.",0.9,0.4,1,0.01);
  26. BtCmin = Param("Swing C Min.",0.38,0.3,1.62,0.01);
  27. BtCmax = Param("Swing C Max.",1.27,0.4,1.62,0.01);
  28. BtDmin = Param("Swing D Min.(XA)",1,1,1.8,0.01);
  29. BtDmax = Param("Swing D Max.(XA)",1.8,1,1.8,0.01);                                                // Max XA of Butterfly = (1.0 - 1.618)

  30. _SECTION_END();

  31. _SECTION_BEGIN("Crab");

  32. CBmin = Param("Swing B Min.",0.38,0.3,1,0.01);
  33. CBmax = Param("Swing B Max.",0.65,0.4,1,0.01);
  34. CCmin = Param("Swing C Min.",0.38,0.3,1.62,0.01);
  35. CCmax = Param("Swing C Max.",1.270,0.4,1.62,0.01);
  36. CDmin = Param("Swing D Min.(XA)",1.25,1,1.8,0.01);
  37. CDmax = Param("Swing D Max.(XA)",1.8,1,2,0.01);

  38. _SECTION_END();

  39. _SECTION_BEGIN("AB=CD");

  40. abcd_Cmin = Param("Swing C Min.",0.3,                0.3        ,        1,                0.01);
  41. abcd_Cmax = Param("Swing C Max.",0.8,                0.8        ,        1,                0.01);
  42. abcd_Dmin = Param("Swing D Min.",1.2,                1,                2.7,        0.01);
  43. abcd_Dmax = Param("Swing D Max.",3.7,                1,                4,                0.01);

  44. _SECTION_END();

  45. _SECTION_BEGIN("Patterns");
  46.        
  47. //strength = Param("Strength",5,2,15,1);                                                                        // Best use: 3, 4, 5
  48. strength = Param("BARS of each LINE",5,2,15,1);                                                        // So luong bar cho moi duong XA, AB, BC,
  49. bu = ParamToggle("Bullish Pattern","Off|On",1);                                                        // So bar/lines se quyet dinh. mo^ hinh` duoc ve the' nao`
  50. be = ParamToggle("Bearish Pattern","Off|On",1);

  51. bi = Cum(1)-1;

  52. function GetTop(bars)                                                                                                                 // Lay' gia' tri cao nhat' = di?nh
  53.         {
  54.                 Top = H == HHV(H,2*bars) AND Ref(HHV(H,bars),bars) < H;
  55.                 Top = Top AND LastValue(bi)-ValueWhen(Top,bi) > bars;
  56.                 return Top;
  57.         }

  58. function GetValley(bars)                                                                                                        // La'y gia tri thap' nhat' = day'
  59.         {
  60.                 Valley = L == LLV(L,2*bars) AND Ref(LLV(L,bars),bars) > L;
  61.                 Valley = Valley AND LastValue(bi)-ValueWhen(Valley,bi) > bars;
  62.                 return Valley;
  63.         }


  64. // Build fractals array

  65. P1 = GetTop(strength);                                                                                // so' bar cho 1 duong` XA, AB, BC, CD
  66. V1 = GetValley(Strength);

  67. P1 = IIf(P1,IIf(ValueWhen(P1,bi,2) < ValueWhen(V1,bi),P1,IIf(ValueWhen(P1,H,2) > H,False,P1)),P1);
  68. P1 = IIf(P1 AND ValueWhen(P1,bi,0) > bi,IIf(ValueWhen(P1,bi,0) < ValueWhen(V1,bi,0),IIf(ValueWhen(P1,H,0) >= H,False,P1),P1),P1);
  69. V1 = IIf(V1,IIf(ValueWhen(V1,bi,2) < ValueWhen(P1,bi),V1,IIf(ValueWhen(V1,L,2)<L,False,V1)),V1);
  70. V1 = IIf(V1 AND ValueWhen(V1,bi,0) > bi ,IIf(ValueWhen(V1,bi,0) < ValueWhen(P1,bi,0),IIf(ValueWhen(V1,L,0) <= L, False,V1),V1),V1);


  71. P1H1 = ValueWhen(P1,H);
  72. P1Bar1 = ValueWhen(P1,bi);
  73. P1H2 = ValueWhen(P1,H,2);
  74. P1Bar2 = ValueWhen(P1,bi,2);
  75. V1L1 = ValueWhen(V1,L);
  76. V1Bar1 = ValueWhen(V1,bi);
  77. V1L2 = ValueWhen(V1,L,2);
  78. V1Bar2 = ValueWhen(V1,bi,2);


  79. //============================================
  80. //                                BULLISH PATTERNS
  81. //============================================
  82. /*
  83.         Mo hinh Bullish:
  84.         A        =        P1H2
  85.         B        =        V1L1
  86.         C        =        P1H1
  87.         X        =        V1L2

  88. */

  89. PTvalid = (P1Bar1 > V1Bar1 AND V1Bar1 > P1Bar2 AND P1bar2 > V1Bar2) AND P1; // Peaks and troughs are in order

  90. myAX                        =        P1H2-V1L2;
  91. myAB                        =        P1H2-V1L1;
  92. myBC                        =        P1H1-V1L1;

  93. myAB_AX                =        myAB/ myAX;
  94. myBC_AB                =        myBC/ myAB;       

  95. BullGartley4                 = PTvalid         AND         (        myAB_AX > GBmin        )                 AND (        myAB_AX < GBmax        )
  96.                                                                 AND          (        myBC_AB > GCMin         )                 AND (        myBC_AB < GCMax        );

  97. BullBat4                         = PTvalid         AND         (        myAB_AX > BatBmin )                 AND (        myAB_AX < BatBmax        )
  98.                                                                 AND         (        myBC_AB > BatCMin )                 AND (        myBC_AB < BatCMax        );

  99. BullButterfly4         = PTvalid         AND         (        myAB_AX > BtBmin )                 AND (        myAB_AX < BtBMax        )
  100.                                                                 AND          (        myBC_AB > BtCmin )                 AND (        myBC_AB < BtCmin         );

  101. BullCrab4                         = PTvalid         AND         (        myAB_AX > CBmin )                          AND (        myAB_AX < CBmax         )
  102.                                                                 AND          (        myBC_AB > CCmin )                 AND (        myBC_AB < CCmax        );

  103. BullABCD4                        = PTvalid AND         (        myBC_AB > abcd_Cmin)         AND (        myBC_AB < abcd_Cmax        );

  104. strPattern = "";

  105. //==================================================
  106. //                                 BULLISH ABCD
  107. //         Bullish pattern found. D retracement level is not evaluated
  108. //==================================================
  109.         dHigh                =                HighestSince(BullABCD4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  110.         dLow                 =                 LowestSince(BullABCD4,L);
  111.        
  112.         myC                        =                ValueWhen(BullABCD4,P1H1);
  113.         myB                        =                ValueWhen(BullABCD4,V1L1);
  114.         myA                        =                ValueWhen(BullABCD4,P1H2);
  115.         myX                        =                ValueWhen(BullABCD4,V1L2);
  116.         myCB                =                myC - myB;

  117.         my_d_min        =                myCB        *        abcd_DMin ;                                        // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  118.         my_d_max        =                myCB        *        abcd_DMax ;
  119.         my_Cd_min        =                myC - my_d_min;                                           // Khoang dich chuyen cua duong Ad con.
  120.         my_Cd_max        =                myC - my_d_max;

  121. BullABCD                 =                 IIf(                ( dLow  <        my_Cd_min        )        AND                ( dLow        > my_Cd_max )       
  122.                                                                 AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
  123.                                                                 True, False
  124.                                                         );

  125. BullABCD                =                BullABCD        AND (dLow                <        myB);


  126. //==================================================
  127. //                                 BULLISH GARTLEY
  128. //==================================================
  129.         dHigh                =                HighestSince(BullGartley4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  130.         dLow                 =                 LowestSince(BullGartley4,L);

  131.         myC                        =                ValueWhen(BullGartley4,P1H1);
  132.         myB                        =                ValueWhen(BullGartley4,V1L1);
  133.         myA                        =                ValueWhen(BullGartley4,P1H2);
  134.         myX                        =                ValueWhen(BullGartley4,V1L2);
  135.         myAX                =                myA - myX;

  136.         my_d_min        =                myAX        *        GDmin;                                                        // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  137.         my_d_max        =                myAX        *        GDMax;
  138.         my_Ad_min        =                myA - my_d_min;                                                        // Khoang dich chuyen cua duong Ad con.
  139.         my_Ad_max        =                myA - my_d_max;

  140. BullGartley         =                 IIf(                ( dLow  <        my_Ad_min        )        AND                ( dLow        > my_Ad_max )       
  141.                                                                 AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
  142.                                                                 True, False
  143.                                                         );
  144. BullGartley         =                BullGartley         AND (dLow                <        myB);                                                // diem D thap' hon B
  145. strPattern         =                WriteIf(BullGartley,"BULLISH GARTLEY",strPattern);



  146. //==================================================
  147. //                                 BULLISH BAT
  148. //==================================================
  149.         dHigh                =                HighestSince(BullBat4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  150.         dLow                 =                 LowestSince(BullBat4,L);       

  151.         myC                        =                ValueWhen(BullBat4,P1H1);
  152.         myB                        =                ValueWhen(BullBat4,V1L1);
  153.         myA                        =                ValueWhen(BullBat4,P1H2);
  154.         myX                        =                ValueWhen(BullBat4,V1L2);
  155.         myAX                =                myA - myX;

  156.         my_d_min        =                myAX        *        BatDmin;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  157.         my_d_max        =                myAX        *        BatDmax ;
  158.         my_Ad_min        =                myA - my_d_min;                                                        // Khoang dich chuyen cua duong Ad con.
  159.         my_Ad_max        =                myA - my_d_max;

  160. BullBat                 =                 IIf(                ( dLow  <        my_Ad_min        )        AND                ( dLow        > my_Ad_max )       
  161.                                                                 AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
  162.                                                                 True, False
  163.                                                         );
  164. BullBat                 =                BullBat         AND (dLow                <        myB);                        // diem d thap hon diem B
  165. strPattern         =                WriteIf(BullBat,"BULLISH BAT",strPattern);


  166. //==================================================
  167. //                                 BULLISH CRAB - CUA
  168. //==================================================
  169.         dHigh                =                HighestSince(BullCrab4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  170.         dLow                 =                 LowestSince(BullCrab4,L);

  171.         myC                        =                ValueWhen(BullCrab4,P1H1);
  172.         myB                        =                ValueWhen(BullCrab4,V1L1);
  173.         myA                        =                ValueWhen(BullCrab4,P1H2);
  174.         myX                        =                ValueWhen(BullCrab4,V1L2);
  175.         myAX                =                myA - myX;

  176.         my_d_min        =                myAX        *        CDmin ;                                        // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  177.         my_d_max        =                myAX        *        CDmax ;
  178.         my_Ad_min        =                myA - my_d_min;                                                // Khoang dich chuyen cua duong Ad con.
  179.         my_Ad_max        =                myA - my_d_max;

  180. BullCrab                 =                 IIf(                ( dLow  <        my_Ad_min        )        AND                ( dLow        > my_Ad_max )       
  181.                                                                 AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
  182.                                                                 True, False
  183.                                                         );
  184. BullCrab                 =                BullCrab         AND (dLow                <        myX);                                        // diem D thap' hon X
  185. strPattern         =                WriteIf(BullCrab ,"BULLISH CRAB",strPattern);


  186. //==================================================
  187. //                                 BULLISH  BUTTTERFLY
  188. //==================================================
  189.         dHigh                =                HighestSince(BullButterfly4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  190.         dLow                 =                 LowestSince(BullButterfly4,L);

  191.         myC                        =                ValueWhen(BullButterfly4,P1H1);
  192.         myB                        =                ValueWhen(BullButterfly4,V1L1);
  193.         myA                        =                ValueWhen(BullButterfly4,P1H2);
  194.         myX                        =                ValueWhen(BullButterfly4,V1L2);
  195.         myAX                =                myA - myX;

  196.         my_d_min        =                myAX        *        BtDmin ;                                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  197.         my_d_max        =                myAX        *        BtDmax ;
  198.         my_Ad_min        =                myA - my_d_min;                                                                        // Khoang dich chuyen cua duong Ad con.
  199.         my_Ad_max        =                myA - my_d_max;

  200. BullButterfly         =                 IIf(                ( dLow  <        my_Ad_min        )        AND                ( dLow        > my_Ad_max )       
  201.                                                                         AND        ( dHigh        <=        myC                )        AND                ( dLow        ==        L),
  202.                                                                 True, False
  203.                                                                 );
  204. BullButterfly         =                BullButterfly         AND (dLow                <        myX);                                        // diem D thap' hon X
  205. strPattern                 =                WriteIf(BullButterfly ,"BULLISH BUTTERFLY",strPattern);



  206. //==========================================================
  207. //   VE DUONG CHO MO HINH BULLISH ABCB
  208. //==========================================================
  209. BullHar4         =  BullABCD4;
  210. BullHar         =  BullABCD;

  211. Point4 = IIf(BullHar,ValueWhen(BullHar4,bi),Null);
  212. BullHar = IIf(BullHar, IIf(Point4 == ValueWhen(BullHar,point4,0) AND ValueWhen(BullHar,bi,0) > bi ,False,BullHar),BullHar);

  213. A = ValueWhen(BullHar4,P1H2);
  214. Abar = ValueWhen(BullHar4,P1bar2);
  215. B = ValueWhen(BullHar4,V1L1);
  216. Bbar = ValueWhen(BullHar4,V1bar1);
  217. C1 = ValueWhen(BullHar4,P1H1);
  218. C1bar = ValueWhen(BullHar4,P1bar1);
  219. D = ValueWhen(BullHar,L);
  220. Dbar = ValueWhen(BullHar,bi);

  221. BCdAB = (C1-B)/(A-B);
  222. BCdCD = (C1-D)/(C1-B);

  223. PlotPattern = Dbar > C1bar;

  224. if(LastValue(PlotPattern) AND bu)
  225. {
  226.                 ColorX = colorGreen;
  227.         // Ve cac duong AB, BC, CD
  228.                 Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(Bbar),LastValue(B)),"",ColorX ,styleThick);
  229.                 Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleThick);
  230.                 Plot(LineArray(LastValue(C1bar),LastValue(C1),LastValue(Dbar),LastValue(D)),"",ColorX ,styleThick);
  231.                 Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleDashed);
  232.                 Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(Dbar),LastValue(D)),"",ColorX ,styleDashed);

  233.         // Ve cac gia tri Fibo
  234.                 PlotText(NumToStr(LastValue(BCdAB),1.2),(LastValue(C1bar)+LastValue(Abar))/2,(LastValue(C1)+LastValue(A))/2,ColorX );
  235.                 PlotText(NumToStr(LastValue(BCdCD),1.2),(LastValue(Bbar)+LastValue(Dbar))/2,(LastValue(B)+LastValue(D))/2,ColorX );

  236.         //---------- Viet cac diem X, A, B, C, D: by binhnd---------------------
  237.                 xlech                =        0;
  238.                 ylech                 =         2;
  239.                 PlotText("A",LastValue(Abar)        +         xlech,        LastValue(A)        +        ylech,        ColorX );
  240.                 PlotText("B",LastValue(Bbar)        +         xlech,        LastValue(B)        -        ylech,        ColorX );
  241.                 PlotText("C",LastValue(C1bar)        +         xlech,        LastValue(C1)        +        ylech,        ColorX );
  242.                 PlotText("D",LastValue(Dbar)        +         xlech,        LastValue(D)        -        ylech,        ColorX );

  243.         //--------- Viet thuyet minh mo hinh: by binhnd--------------
  244.                 if (strPattern!="")  
  245.                 {
  246.                         myStr                        =        "Pattern: BULLISH AB=CD";
  247.                         toadoX                        =        LastValue(Abar);
  248.                         toadoY                        =        LastValue(D);

  249.                         PlotText(myStr,toadoX,toadoY,ColorX );
  250.                 }

  251. }                        //        end of Ve duong` bullish abcd



  252. //==========================================================
  253. //   VE DUONG CHO MO HINH BULLISH BAT, GARTLEY, BUTTERFLY, CRAB
  254. //==========================================================


  255. BullHar4 = BullGartley4 OR BullButterfly4 OR BullBat4 OR BullCrab4 ;
  256. BullHar = BullGartley OR BullButterfly OR BullBat OR BullCrab;

  257. Point4 = IIf(BullHar,ValueWhen(BullHar4,bi),Null);
  258. BullHar = IIf(BullHar, IIf(Point4 == ValueWhen(BullHar,point4,0) AND ValueWhen(BullHar,bi,0) > bi ,False,BullHar),BullHar);

  259. X = ValueWhen(BullHar4,V1L2);
  260. Xbar = ValueWhen(BullHar4,V1Bar2);
  261. A = ValueWhen(BullHar4,P1H2);
  262. Abar = ValueWhen(BullHar4,P1bar2);
  263. B = ValueWhen(BullHar4,V1L1);
  264. Bbar = ValueWhen(BullHar4,V1bar1);
  265. C1 = ValueWhen(BullHar4,P1H1);
  266. C1bar = ValueWhen(BullHar4,P1bar1);
  267. D = ValueWhen(BullHar,L);
  268. Dbar = ValueWhen(BullHar,bi);

  269. ABdXA = (A-B)/(A-X);
  270. BCdAB = (C1-B)/(A-B);
  271. ADdXA = (A-D)/(A-X);
  272. BCdCD = (C1-D)/(C1-B);

  273. PlotPattern = Dbar > C1bar;

  274. if(LastValue(PlotPattern) AND bu)
  275. {
  276.                         ColorX        = colorBlue;
  277.                 // Ve cac duong XA, AB, BC, CD
  278.                         Plot( LineArray(LastValue(Xbar),LastValue(X),LastValue(Abar),LastValue(A)),"",ColorX,styleThick);
  279.                         Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(Bbar),LastValue(B)),"",ColorX,styleThick);
  280.                         Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(C1bar),LastValue(C1)),"",ColorX,styleThick);
  281.                         Plot(LineArray(LastValue(C1bar),LastValue(C1),LastValue(Dbar),LastValue(D)),"",ColorX,styleThick);
  282.                         Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Bbar),LastValue(B)),"",ColorX,styleDashed);
  283.                         Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Abar),LastValue(A)),"",ColorX,styleThick);
  284.                         Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(C1bar),LastValue(C1)),"",ColorX,styleDashed);
  285.                         Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(Dbar),LastValue(D)),"",ColorX,styleDashed);
  286.                         Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Dbar),LastValue(D)),"",ColorX,styleDashed);

  287.                 // Ve cac gia tri Fibo
  288.                         PlotText(NumToStr(LastValue(ABdXA),1.2),(LastValue(Bbar)+LastValue(Xbar))/2,(LastValue(B)+LastValue(X))/2,ColorX);
  289.                         PlotText(NumToStr(LastValue(BCdAB),1.2),(LastValue(C1bar)+LastValue(Abar))/2,(LastValue(C1)+LastValue(A))/2,ColorX);
  290.                         PlotText(NumToStr(LastValue(ADdXA),1.2) ,(LastValue(Dbar)+LastValue(Xbar))/2,(LastValue(D)+LastValue(X))/2,ColorX);
  291.                         PlotText(NumToStr(LastValue(BCdCD),1.2),(LastValue(Bbar)+LastValue(Dbar))/2,(LastValue(B)+LastValue(D))/2,ColorX);

  292.                 //---------- Viet cac diem X, A, B, C, D: by binhnd---------------------
  293.                         xlech                =        0;
  294.                         ylech                 =         2;
  295.                         PlotText("X",LastValue(Xbar)        +         xlech,        LastValue(X)        -        ylech,        ColorX);
  296.                         PlotText("A",LastValue(Abar)        +         xlech,        LastValue(A)        +        ylech,        ColorX);
  297.                         PlotText("B",LastValue(Bbar)        +         xlech,        LastValue(B)        -        ylech,        ColorX);
  298.                         PlotText("C",LastValue(C1bar)        +         xlech,        LastValue(C1)        +        ylech,        ColorX);
  299.                         PlotText("D",LastValue(Dbar)        +         xlech,        LastValue(D)        -        ylech,        ColorX);

  300.                 //--------- Viet thuyet minh mo hinh: by binhnd--------------
  301.                         if (strPattern!="")  
  302.                         {
  303.                                 strPattern         =         "Pattern: " + strPattern;
  304.                                 toadoX                        =        (LastValue(Dbar)+LastValue(Xbar))/2;
  305.                                 toadoY                        =        (LastValue(D)+LastValue(X))/2;

  306.                                 PlotText(strPattern,toadoX,toadoY-2,ColorX);
  307.                         }

  308. }                        // end of Ve duong cho cac mo hinh Crab, Butterfly, Bat


  309. //=============================================================
  310. //                                BEARISH PATTERNS
  311. //=============================================================

  312. PTvalid = (V1Bar1 > P1Bar1 AND P1Bar1 > V1Bar2 AND V1Bar2 > P1Bar2) AND V1;

  313. /*=====================
  314.                 X         =         P1H2                                         Trong mo hinh` bear: Die^m X cao hon diem A. MyAX = X-> A
  315.                 A        =        V1L2
  316.                 B        =        P1H1
  317.                 C        =        V1L1

  318. =======================*/
  319. myAX                        =        P1H2-V1L2;                               
  320. myAB                        =        P1H1-V1L2;
  321. myBC                        =        P1H1-V1L1;

  322. myAB_AX                =        myAB/ myAX;
  323. myBC_AB                =        myBC/ myAB;       

  324. BearGartley4                 = PTvalid         AND         (        myAB_AX > GBmin        )                 AND (        myAB_AX < GBmax        )
  325.                                                                 AND          (        myBC_AB > GCMin         )                 AND (        myBC_AB < GCMax        );

  326. BearBat4                         = PTvalid         AND         (        myAB_AX > BatBmin )                 AND (        myAB_AX < BatBmax        )
  327.                                                                 AND         (        myBC_AB > BatCMin )                 AND (        myBC_AB < BatCMax        );

  328. BearButterfly4         = PTvalid         AND         (        myAB_AX > BtBmin )                 AND (        myAB_AX < BtBMax        )
  329.                                                                 AND          (        myBC_AB > BtCmin )                 AND (        myBC_AB < BtCmin         );

  330. BearCrab4                         = PTvalid         AND         (        myAB_AX > CBmin )                          AND (        myAB_AX < CBmax         )
  331.                                                                 AND          (        myBC_AB > CCmin )                 AND (        myBC_AB < CCmax        );

  332. BearABCD4                        = PTvalid AND         (        myBC_AB > abcd_Cmin)         AND (        myBC_AB < abcd_Cmax        );

  333. strPattern = "";



  334. //==========================================================
  335. //                                 BEARISH ABCD
  336. //         Bearish pattern found. D retracement level is not evaluated
  337. //==========================================================
  338.         dHigh                =                HighestSince(BearABCD4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  339.         dLow                 =                 LowestSince(BearABCD4,L);
  340.        
  341.         myA                        =                ValueWhen(BearABCD4,V1L2);
  342.         myB                        =                ValueWhen(BearABCD4,P1H1);
  343.         myC                        =                ValueWhen(BearABCD4,V1L1);
  344.         myCB                =                myB - myC;

  345.         my_d_min        =                myCB        *        abcd_DMin ;                                        // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  346.         my_d_max        =                myCB        *        abcd_DMax ;
  347.         my_Cd_min        =                myC + my_d_min;                                           // Khoang dich chuyen cua duong Ad con.
  348.         my_Cd_max        =                myC + my_d_max;

  349. BearABCD                 =                 IIf(                ( dHigh          >        my_Cd_min        )        AND                ( dHigh        < my_Cd_max )       
  350.                                                                 AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
  351.                                                                 True, False
  352.                                                         );

  353. BearABCD                =                BearABCD        AND (dHigh                >        myB);

  354. //=============================================================
  355. //                                BEARISH GARTLEY
  356. //=============================================================
  357.         dHigh                =                HighestSince(BearGartley4,H);                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  358.         dLow                 =                 LowestSince(BearGartley4,L);

  359.         myX                        =                ValueWhen(BearGartley4,P1H2);
  360.         myA                        =                ValueWhen(BearGartley4,V1L2);
  361.         myAX                =                myX - myA;

  362.         myB                        =                ValueWhen(BearGartley4,P1H1);
  363.         myC                        =                ValueWhen(BearGartley4,V1L1);


  364.         my_d_min        =                myAX        *        GDmin;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  365.         my_d_max        =                myAX        *        GDMax;
  366.         my_Ad_min        =                myA         +         my_d_min;                                        // Khoang dich chuyen cua duong Ad con.
  367.         my_Ad_max        =                myA         +         my_d_max;

  368. BearGartley         =                 IIf(                ( dHigh        >        my_Ad_min        )        AND                ( dHigh        < my_Ad_max )       
  369.                                                                 AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
  370.                                                                 True, False
  371.                                                         );
  372. BearGartley         =                BearGartley         AND (dHigh                >        myB);                                                // diem D cao hon B
  373. strPattern         =                WriteIf(BearGartley ,"BEARISH GARTLEY",strPattern);

  374. //=============================================================
  375. //                                BEARISH BAT
  376. //=============================================================
  377.         dHigh                =                HighestSince(BearBat4,H);                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  378.         dLow                 =                 LowestSince(BearBat4,L);

  379.         myX                        =                ValueWhen(BearBat4,P1H2);
  380.         myA                        =                ValueWhen(BearBat4,V1L2);
  381.         myAX                =                myX - myA;

  382.         myB                        =                ValueWhen(BearBat4,P1H1);
  383.         myC                        =                ValueWhen(BearBat4,V1L1);


  384.         my_d_min        =                myAX        *        BatDmin ;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  385.         my_d_max        =                myAX        *        BatDMax ;
  386.         my_Ad_min        =                myA         +         my_d_min;                                        // Khoang dich chuyen cua duong Ad con.
  387.         my_Ad_max        =                myA         +         my_d_max;

  388. BearBat                 =                 IIf(                ( dHigh        >        my_Ad_min        )        AND                ( dHigh        < my_Ad_max )       
  389.                                                                 AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
  390.                                                                 True, False
  391.                                                         );
  392. BearBat                 =                BearBat         AND (dHigh                >        myB);                                                // diem D cao hon B
  393. strPattern         =                WriteIf(BearBat ,"BEARISH BAT",strPattern);


  394. //=============================================================
  395. //                                BEARISH BUTTERFLY
  396. //=============================================================
  397.         dHigh                =                HighestSince(BearButterfly4,H);                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  398.         dLow                 =                 LowestSince(BearButterfly4,L);

  399.         myX                        =                ValueWhen(BearButterfly4,P1H2);
  400.         myA                        =                ValueWhen(BearButterfly4,V1L2);
  401.         myAX                =                myX - myA;

  402.         myB                        =                ValueWhen(BearButterfly4,P1H1);
  403.         myC                        =                ValueWhen(BearButterfly4,V1L1);


  404.         my_d_min        =                myAX        *        BtDmin ;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  405.         my_d_max        =                myAX        *        BtDmax ;
  406.         my_Ad_min        =                myA         +         my_d_min;                                                // Khoang dich chuyen cua duong Ad con.
  407.         my_Ad_max        =                myA         +         my_d_max;

  408. BearButterfly =                 IIf(                ( dHigh        >        my_Ad_min        )        AND                ( dHigh        < my_Ad_max )       
  409.                                                                 AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
  410.                                                                 True, False
  411.                                                         );
  412. BearButterfly        =                BearButterfly         AND (dHigh                >        myX);                                                // diem D cao hon X
  413. strPattern                =                WriteIf(BearButterfly ,"BEARISH BUTTERFLY",strPattern);



  414. //=============================================================
  415. //                                BEARISH CRAB
  416. //=============================================================
  417.         dHigh                =                HighestSince(BearCrab4,H);                                // Tinh' gia' tri min, max cua duong Ad. Duong Ad la duong con cua AD
  418.         dLow                 =                 LowestSince(BearCrab4,L);

  419.         myX                        =                ValueWhen(BearCrab4,P1H2);
  420.         myA                        =                ValueWhen(BearCrab4,V1L2);
  421.         myAX                =                myX - myA;

  422.         myB                        =                ValueWhen(BearCrab4,P1H1);
  423.         myC                        =                ValueWhen(BearCrab4,V1L1);


  424.         my_d_min        =                myAX        *        CDmin ;                                                // Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min
  425.         my_d_max        =                myAX        *        CDmax ;
  426.         my_Ad_min        =                myA         +         my_d_min;                                                // Khoang dich chuyen cua duong Ad con.
  427.         my_Ad_max        =                myA         +         my_d_max;

  428. BearCrab                 =                 IIf(                ( dHigh        >        my_Ad_min        )        AND                ( dHigh        < my_Ad_max )       
  429.                                                                 AND        ( dLow                >=        myC                        )        AND                ( dHigh        ==        H),
  430.                                                                 True, False
  431.                                                         );
  432. BearCrab                 =                BearCrab         AND (dHigh                >        myX);                                                // diem D cao hon X
  433. strPattern         =                WriteIf(BearCrab ,"BEARISH CRAB",strPattern);



  434. //==========================================================
  435. //   VE DUONG CHO MO HINH BEARISH ABCD
  436. //==========================================================


  437. BearHar4 = BearABCD4;
  438. BearHar = BearABCD;

  439. Point4 = IIf(BearHar,ValueWhen(BearHar4,bi),Null);
  440. BearHar = IIf(BearHar, IIf(Point4 == ValueWhen(BearHar,point4,0) AND ValueWhen(BearHar,bi,0) > bi ,False,BearHar),BearHar);

  441. A = ValueWhen(BearHar4,V1L2);
  442. Abar = ValueWhen( BearHar4,V1bar2);
  443. B = ValueWhen(BearHar4,P1H1);
  444. Bbar = ValueWhen(BearHar4,P1bar1);
  445. C1 = ValueWhen(BearHar4,V1L1);
  446. C1bar = ValueWhen(BearHar4,V1bar1);
  447. D = ValueWhen(BearHar,H);
  448. Dbar = ValueWhen(BearHar,bi);

  449. BCdAB = (B-C1)/(B-A);
  450. BCdCD = (D-C1)/(B-C1);

  451. PlotPattern = Dbar > C1bar;

  452. //--------- Ve duong ------------------
  453. if(LastValue(Plotpattern) AND be)
  454. {
  455.                 ColorX = colorYellow;
  456.         // Ve duong AB, BC
  457.                 Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(Bbar),LastValue(B)),"",ColorX ,styleThick);
  458.                 Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleThick);
  459.                 Plot(LineArray(LastValue(C1bar),LastValue(C1),LastValue(Dbar),LastValue(D)),"",ColorX ,styleThick);
  460.                 Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleDashed);
  461.                 Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(Dbar),LastValue(D)),"",ColorX ,styleDashed);

  462.         // Viet cac gia tri Fibo tren duong AB, BC
  463.                 PlotText(NumToStr(LastValue(BCdAB),1.2),(LastValue(C1bar)+LastValue(Abar))/2,(LastValue(C1)+LastValue(A))/2,ColorX );
  464.                 PlotText(NumToStr(LastValue(BCdCD),1.2) ,(LastValue(Dbar)+LastValue(Bbar))/2,(LastValue(D)+LastValue(B))/2,ColorX );

  465.         //---------- Viet cac diem A, B, C, D: by binhnd---------------------
  466.                 xlech                =        -1;
  467.                 ylech                 =         1;
  468.                 PlotText("A",LastValue(Abar)        +         xlech,        LastValue(A)        -        ylech,        ColorX );
  469.                 PlotText("B",LastValue(Bbar)        +         xlech,        LastValue(B)        +        ylech,        ColorX );
  470.                 PlotText("C",LastValue(C1bar)        +         xlech,        LastValue(C1)        -        ylech,        ColorX );
  471.                 PlotText("D",LastValue(Dbar)        +         xlech,        LastValue(D)        +        ylech,        ColorX );

  472.         //--------- Viet thuyet minh mo hinh: by binhnd--------------
  473.                 if (strPattern!="")
  474.                         {
  475.                                 myStr                        =        "Pattern: BEARISH AB=CD";
  476.                                 toadoaX                =        LastValue(Abar);
  477.                                 toadoY                        =        LastValue(D);

  478.                                 PlotText(myStr,toadoaX,toadoY+1,ColorX );
  479.                         }
  480.        
  481. }                        // end of VE DUONG CHO MO HINH BEARISH ABCD


  482. //==========================================================
  483. //   VE DUONG CHO MO HINH BEARISH BAT, GARTLEY, BUTTERFLY, CRAB
  484. //==========================================================

  485. BearHar4 = BearGartley4 OR BearButterfly4 OR BearBat4 OR BearCrab4 ;
  486. BearHar = BearGartley OR BearButterfly OR BearBat OR BearCrab ;

  487. Point4 = IIf(BearHar,ValueWhen(BearHar4,bi),Null);
  488. BearHar = IIf(BearHar, IIf(Point4 == ValueWhen(BearHar,point4,0) AND ValueWhen(BearHar,bi,0) > bi ,False,BearHar),BearHar);

  489. X = ValueWhen(BearHar4,P1H2);
  490. Xbar = ValueWhen(BearHar4,P1Bar2);
  491. A = ValueWhen(BearHar4,V1L2);
  492. Abar = ValueWhen( BearHar4,V1bar2);
  493. B = ValueWhen(BearHar4,P1H1);
  494. Bbar = ValueWhen(BearHar4,P1bar1);
  495. C1 = ValueWhen(BearHar4,V1L1);
  496. C1bar = ValueWhen(BearHar4,V1bar1);
  497. D = ValueWhen(BearHar,H);
  498. Dbar = ValueWhen(BearHar,bi);

  499. ABdXA = (B-A)/(X-A);
  500. BCdAB = (B-C1)/(B-A);
  501. ADdXA = (D-A)/(X-A);
  502. BCdCD = (D-C1)/(B-C1);

  503. PlotPattern = Dbar > C1bar;

  504. //--------- Ve duong ------------------
  505. if(LastValue(Plotpattern) AND be)
  506. {
  507.                 ColorX = colorRed;
  508.         // Ve duong XA, AB, BC
  509.                 Plot( LineArray(LastValue(Xbar),LastValue(X),LastValue(Abar),LastValue(A)),"",ColorX ,styleThick);
  510.                 Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(Bbar),LastValue(B)),"",ColorX ,styleThick);
  511.                 Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleThick);
  512.                 Plot(LineArray(LastValue(C1bar),LastValue(C1),LastValue(Dbar),LastValue(D)),"",ColorX ,styleThick);
  513.                 Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Bbar),LastValue(B)),"",ColorX ,styleDashed);
  514.                 Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Abar),LastValue(A)),"",ColorX ,styleThick);
  515.                 Plot(LineArray(LastValue(Abar),LastValue(A),LastValue(C1bar),LastValue(C1)),"",ColorX ,styleDashed);
  516.                 Plot(LineArray(LastValue(Bbar),LastValue(B),LastValue(Dbar),LastValue(D)),"",ColorX ,styleDashed);
  517.                 Plot(LineArray(LastValue(Xbar),LastValue(X),LastValue(Dbar),LastValue(D)),"",ColorX ,styleDashed);

  518.         // Viet cac gia tri Fibo tren duong XA, AB, BC
  519.                 PlotText(NumToStr(LastValue(ABdXA),1.2),(LastValue(Bbar)+LastValue(Xbar))/2,(LastValue(B)+LastValue(X))/2,ColorX );
  520.                 PlotText(NumToStr(LastValue(BCdAB),1.2),(LastValue(C1bar)+LastValue(Abar))/2,(LastValue(C1)+LastValue(A))/2,ColorX );
  521.                 PlotText(NumToStr(LastValue(BCdCD),1.2) ,(LastValue(Dbar)+LastValue(Bbar))/2,(LastValue(D)+LastValue(B))/2,ColorX );
  522.                 PlotText(NumToStr(LastValue(ADdXA),1.2) ,(LastValue(Dbar)+LastValue(Xbar))/2,(LastValue(D)+LastValue(X))/2,ColorX );

  523.         //---------- Viet cac diem X, A, B, C, D: by binhnd---------------------
  524.                 xlech                =        -1;
  525.                 ylech                 =         1;
  526.                 PlotText("X",LastValue(Xbar)        +         xlech,        LastValue(X)        +        ylech,        ColorX );
  527.                 PlotText("A",LastValue(Abar)        +         xlech,        LastValue(A)        -        ylech,        ColorX );
  528.                 PlotText("B",LastValue(Bbar)        +         xlech,        LastValue(B)        +        ylech,        ColorX );
  529.                 PlotText("C",LastValue(C1bar)        +         xlech,        LastValue(C1)        -        ylech,        ColorX );
  530.                 PlotText("D",LastValue(Dbar)        +         xlech,        LastValue(D)        +        ylech,        ColorX );

  531.         //--------- Viet thuyet minh mo hinh: by binhnd--------------
  532.                 if (strPattern!="")
  533.                         {
  534.                                 strPattern         =         "Pattern: " + strPattern;
  535.                                 toadoaX                =        (LastValue(Dbar)+LastValue(Xbar))/2;
  536.                                 toadoY                        =        (LastValue(D)+LastValue(X))/2;

  537.                                 PlotText(strPattern,toadoaX,toadoY+1,ColorX );
  538.                         }
  539.        
  540. }                        // end of VE DUONG CHO MO HINH BEARISH BAT, GARTLEY, BUTTERFLY, CRAB




  541. //=================================
  542. // Show diem ho^~ tro. va` khang' cu. ko?
  543. //=================================

  544. plotFractals = ParamToggle("Plot Fractals","Off|On",1);                               
  545. if(PlotFractals)
  546. {
  547.         PlotShapes(shapeSmallCircle*P1,colorRed,0,H,10);
  548.         PlotShapes(shapeSmallCircle*V1,colorBlue,0,L,-10);
  549. }



  550. //==============================================
  551. // DAT DIEU KIEN cho TIM KIEM BULL
  552. //==============================================
  553. dkBull = False;
  554. ListBull                 =         ParamList("Type of Bullish", "None|AB=CD|Gartley|Butterfly|Bat|Crab|All Patterns", 6);
  555.         if         (        ListBull == "None"                )                dkBull =         True;
  556.         if (        ListBull =="AB=CD"                )                 dkBull        =        BullABCD ;
  557.         if (        ListBull =="Gartley"                )                 dkBull        =        BullGartley ;
  558.         if (        ListBull =="Butterfly"        )                 dkBull        =        BullButterfly ;
  559.         if (        ListBull =="Bat"                        )                 dkBull        =        BullBat ;
  560.         if (        ListBull =="Crab"                        )                 dkBull        =        BullCrab ;
  561.         if (        ListBull =="All Patterns")                 dkBull        =        (BullABCD) OR (BullGartley) OR (BullButterfly ) OR (BullBat ) OR (BullCrab);

  562. //==============================================
  563. // DAT DIEU KIEN cho TIM KIEM BEAR
  564. //==============================================
  565. dkBear = False;
  566. ListBear                 =         ParamList("Type of Bearish", "None|AB=CD|Gartley|Butterfly|Bat|Crab|All Patterns", 0);
  567.         if         (        ListBear == "None"                )                dkBear =         True;
  568.         if (        ListBear =="AB=CD"                )                 dkBear        =        BearABCD ;
  569.         if (        ListBear =="Gartley"                )                 dkBear        =        BearGartley ;
  570.         if (        ListBear =="Butterfly"        )                 dkBear        =        BearButterfly ;
  571.         if (        ListBear =="Bat"                        )                 dkBear        =        BearBat ;
  572.         if (        ListBear =="Crab"                        )                 dkBear =        BearCrab ;
  573.         if (        ListBear =="All Patterns")                 dkBear =        (BearABCD ) OR (BearGartley ) OR (BearButterfly ) OR (BearBat ) OR (BearCrab );
  574. //===============================

  575. AddColumn(V,"Volume",1.0);
  576. Filter = (dkBull) AND (dkBear);

  577. _SECTION_END();
複製代碼
發表於 10-5-21 14:00 | 顯示全部樓層
請問Good大,紅茶大......
這圖要怎麼看阿!  這是屬於型態辨識嗎!
有看沒懂,可否說明一下如何應用.....
我愛紅茶 該用戶已被刪除
發表於 10-5-21 15:47 | 顯示全部樓層
回復 7# alexwang7777


   
2010-05-21_154511.png
2010-05-21_154549.png
2010-05-21_154600.png
發表於 10-5-21 15:55 | 顯示全部樓層
類似ZigZag嗎?
 樓主| 發表於 10-5-21 20:31 | 顯示全部樓層
回復 8# 我愛紅茶
我想產生的圖型就是要參考這張的型態!

    all11-798787big.jpg
 樓主| 發表於 10-5-21 20:33 | 顯示全部樓層
不知小娃站長,可以把第一帖的程式碼(太亂了)刪除嗎?因為跟紅茶大提供的是一樣的!
我愛紅茶 該用戶已被刪除
發表於 10-5-21 21:05 | 顯示全部樓層
回復 11# good88


    @@~你可以更改內容就好了~不必刪阿
 樓主| 發表於 10-5-21 21:38 | 顯示全部樓層
超過120分鐘後就不能編輯了!
發表於 11-4-11 23:06 | 顯示全部樓層
我看到Fomulas裡,內容有越南字:mô hình(模形),tính giá trị min max của đường AD(計算AD線的最大値,最小値),Tinh' gia' tri cua duong Ad con. Khi gia' giam? tu` tre^n xuong' thi` max -> min 原文:Khi giá giảm từ trên xuống thì Mã -> min(計算Ad附線的値.當價從上下跌則max -> min )
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-5-15 02:53

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 | AI繪圖AI超擬真美女AI beauty AI Stable DiffusionAI正妹AI Lookbook