Harmonic Pattern Detector - 2 |
//www.aflcode.com _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);
Sign up here with your email
ConversionConversion EmoticonEmoticon