// Downloaded From https://www.WiseStockTrader.com /* HARMONIC PATTERN DETECTION Automatic Detection of Harmonic Patterns - Gartley, Bat, Butterfly and Crab. Zig Zag is not used in this AFL. It is based on fractals Contact - DHIRAJRAO2007@GMAIL.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", colorBlack ), 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) 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,colorBlack,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); _SECTION_BEGIN("Kpl System"); /* my entry is very simple(daily data for trading) kpl system for entry only & exit as follow: 1 st exit at x % from entry price only 1/3 quantity.(ie 1st profit target) 2 nd exit when exit Signal comes from kpl sys remaining 1/3 quantity. 3. scale-in to initial quantity if new kpl Buy Signal comes. re-do above scaling-out & scaling-in till filal exit. 4. final exit all quantity when Close below 21 Day EMA. kpl system code bellow : */ //AFL by Kamalesh Langote. Email:kpl@... no=Param( "Swing", 8, 1, 55 ); tsl_col=ParamColor( "Color", colorLightGrey ); res=HHV(H,no); sup=LLV(L,no); avd=IIf(C>Ref(res,-1),1,IIf(C Ref(HaHigh,-1) AND Ref(HaHigh,1) < HaHigh;//Peak PKV0 = ValueWhen(PK,HaHigh,0);//PeakValue0 PKV1 = ValueWhen(PK,HaHigh,1);//PeakValue1 PKV2 = ValueWhen(PK,HaHigh,2);//PeakValue2 MPK = PKV2 < PKV1 AND PKV1 > PKV0 ;//MajorPeak MPKV = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, PKV1,1); //MajorPeakValue MPKD = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, DateNum(),1); //MajorPeakDate SD = IIf(DateNum() < LastValue(MPKD,lastmode = True ), Null, LastValue(MPKV,Lastmode = True));//SelectedDate Plot(SD, "LastMinorResistance",colorRed,styleLine,styleThick); //PLOT THE SECOND LAST MAJOR PEAK RESISTANCE LINE MPKV2 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, PKV1,2); //MajorPeakValue MPKD2 = ValueWhen(Ref(MPK,-1) == 0 AND MPK == 1, DateNum(),2); //MajorPeakDate SD2 = IIf(DateNum() < LastValue(MPKD2,lastmode = True ), Null, LastValue(MPKV2,Lastmode = True));//SelectedDate Plot(SD2, "LastMajorResistance",colorRed,styleLine); _SECTION_END(); _SECTION_BEGIN("Support"); SP = Ref(HaLow,1) > HaLow AND HaLow < Ref(HaLow,-1);//Peak SPV0 = ValueWhen(SP,HaLow,0);//PeakValue0 SPV1 = ValueWhen(SP,HaLow,1);//PeakValue1 SPV2 = ValueWhen(SP,HaLow,2);//PeakValue2 MSP = SPV2 > SPV1 AND SPV1 < SPV0 ;//MajorPeak MSPV = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, SPV1,1); MSPD = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, DateNum(),1); SD = IIf(DateNum() < LastValue(MSPD,lastmode = True ), Null, LastValue(MSPV,Lastmode = True)); Plot(SD,"LastMinorSupport",colorGreen,styleLine,styleThick); MSPV2 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, SPV1,2); MSPD2 = ValueWhen(Ref(MSP,-1) == 0 AND MSP == 1, DateNum(),2); SD2 = IIf(DateNum() < LastValue(MSPD2,lastmode = True ), Null, LastValue(MSPV2,Lastmode = True)); Plot(SD2,"LastMajorSupport",colorGreen,styleLine); _SECTION_END(); _SECTION_BEGIN("Background text"); C11=ParamColor("up panel",colorDarkOliveGreen ); C12=ParamColor("dn panel",colorDarkGrey ); C13=Param("fonts",20,10,30,1 ); C14=Param("left-right",2.1,1.0,5.0,0.1 ); C15=Param("up-down",12,1,20,1 ); Miny = Status("axisminy"); Maxy = Status("axismaxy"); lvb = Status("lastvisiblebar"); fvb = Status("firstvisiblebar"); pxwidth = Status("pxwidth"); pxheight = Status("pxheight"); GfxSetBkMode( 0 ); GfxSetOverlayMode(1); GfxGradientRect(0,0,pxwidth, pxheight, C11, C12 ); GfxSelectFont("Tahoma", Status("pxheight")/C13 ); GfxSetTextAlign( 6 ); GfxTextOut( Name(), Status("pxwidth")/C14, Status("pxheight")/C15 ); GfxSelectFont("Tahoma", Status("pxheight")/C13*0.5 ); GfxTextOut( "DEERU", Status("pxwidth")/C14, Status("pxheight")/C15*2.5 ); GfxSelectFont("Tahoma", Status("pxheight")/C13*0.5 ); GfxTextOut( " 1 DHIRAJ", Status("pxwidth")/C14, Status("pxheight")/C15*4 ); GfxSelectFont("MS Sans Serif", 10, 500, False, False, 0); GfxSetTextColor(colorYellow); GfxTextOut(""+edc+"", Status("pxwidth")/1.15, Status("pxheight")/C15*0.3 ); //------------------------------------------------------------------------------ // // Formula Name: MURREY MATH LINES Formula // Author/Uploader: Jacek // E-mail: // Date/Time Added: 2006-02-18 14:21:45 // Origin: // Keywords: MURREY MATH // Level: medium // Flags: indicator // Formula URL: http://www.amibroker.com/library/formula.php?id=588 // Details URL: http://www.amibroker.com/library/detail.php?id=588 // //------------------------------------------------------------------------------ // // Murrey Math Horizontal Lines. // // Use Parameter function to adjust Time Frame. // // Enjoy ! // //------------------------------------------------------------------------------ /* MURREY MATH HORIZONTAL LINES Formula for Amibroker based on Excel spreadsheet by Jacek */ GraphXSpace=1; MaxGraph=12; Period=Param("MM_Period", 32, 4, 256, 1) ; Graph1Color=6; Graph2Color=7; Graph3Color=4; Graph4Color=5; Graph5Color=6; Graph6Color=5; Graph7Color=4; Graph8Color=7; Graph9Color=6; Graph10Color=4; Graph11Color=4; Graph0=Close; Graph0Color=1; Graph0Style=64; Graph1Style=1; Graph2Style=1; Graph3Style=1; Graph4Style=1; Graph5Style=1; Graph6Style=1; Graph7Style=1; Graph8Style=1; Graph9Style=1; Graph10Style=1; Graph11Style=4; PER = Period; BarNR = LastValue(Cum(1)) ; TimeFrame = BarNR - PER ; TF = TimeFrame ; Lo = LastValue(ValueWhen(Cross(Cum(1), TF), LLV(Min(H,L),PER),1)) ; Hi = LastValue(ValueWhen(Cross(Cum(1), TF), HHV(Max(H,L),PER),1)) ; Lo = LastValue( LLV(Min(H,L),PER ),1) ; Hi = LastValue( HHV(Max(H,L),PER ),1) ; Fractal = IIf(Hi<=250,100, IIf(Hi<=2500,1000, IIf(Hi<=25000,10000, IIf(Hi<=250000,100000, 0 )))) ; int_Log = int( log(Fractal/(Hi-Lo))/log(2) ) ; Oct = Fractal * ( exp(ln(1/2)* int_Log ) ) ; Min_1 = int( Lo / Oct ) * Oct ; Max_1 = IIf( (Min_1 + Oct) > Hi, Min_1 + Oct, Min_1 + 2*Oct ) ; Min_2 = IIf( (Min_1 + 1/8*(Max_1-Min_1)) <= Lo AND Hi <= (Max_1 - 1/8*(Max_1-Min_1)) , (Min_1 + 1/4*(Max_1-Min_1)) , Min_1 ) ; Max_2 = IIf( (Min_1 + 1/8*(Max_1-Min_1)) <= Lo AND Hi <= (Max_1 - 1/8*(Max_1-Min_1)) , (Max_1 - 1/4*(Max_1-Min_1)) , Max_1 ) ; /******************************/ Diff = Max_2 - Min_2 ; H1 = IIf( (Min_2 + 3/16*Diff) <= Lo AND Hi <= (9/16*Diff + Min_2) , Min_2 + 1/2*Diff, 0) ; H2 = IIf( (Min_2 - 1/8*Diff) <= Lo AND Hi <= (5/8*Diff + Min_2) AND H1==0, Min_2 + 1/2*Diff, 0) ; H3 = IIf( (Min_2 + 7/16*Diff) <= Lo AND Hi <= (Min_2 + 13/16*Diff), Min_2 + 3/4*Diff, 0 ) ; H4 = IIf( (Min_2 + 3/8*Diff) <= Lo AND Hi <= (Min_2 + 9/8*Diff) AND H3==0, Max_2, 0 ) ; H5 = IIf( (Min_2 + 1/8*Diff)<=Lo AND Hi <= (Min_2 + 7/8*Diff) AND H1==0 AND H2==0 AND H3==0 AND H4==0, Min_2 + 3/4*Diff , 0 ) ; H6 = IIf( ( H1 + H2 + H3 + H4 + H5 ) == 0, Max_2, 0 ) ; /**************************/ L1 = IIf(H1>0, Min_2 + 1/4*Diff, 0) ; L2 = IIf(H2>0, Min_2, 0) ; L3 = IIf(H3>0, Min_2 + 1/2*Diff, 0) ; L4 = IIf(H4>0, Min_2 + 1/2*Diff, 0) ; L5 = IIf(H5>0, Min_2 + 1/4*Diff, 0) ; L6 = IIf(H6>0, Min_2, 0 ) ; M_8 = ( H1 + H2 + H3 + H4 + H5 + H6 ) ; M_0 = ( L1 + L2 + L3 + L4 + L5 + L6 ) ; /**************************************/ Graph1 = ValueWhen(Cum(1) >= TF, M_0 ); Graph2 = ValueWhen(Cum(1) >= TF, M_0 + (1*(0.125*(M_8-M_0)))); Graph3 = ValueWhen(Cum(1) >= TF, M_0 + (2*(0.125*(M_8-M_0)))); Graph4 = ValueWhen(Cum(1) >= TF, M_0 + (3*(0.125*(M_8-M_0)))); Graph5 = ValueWhen(Cum(1) >= TF, M_0 + (4*(0.125*(M_8-M_0)))); Graph6 = ValueWhen(Cum(1) >= TF, M_0 + (5*(0.125*(M_8-M_0)))); Graph7 = ValueWhen(Cum(1) >= TF, M_0 + (6*(0.125*(M_8-M_0)))); Graph8 = ValueWhen(Cum(1) >= TF, M_0 + (7*(0.125*(M_8-M_0)))); Graph9 = ValueWhen(Cum(1) >= TF, M_8 ) ; Graph10 = ValueWhen(Cum(1) >= TF, M_8 + (2*(0.125*(M_8-M_0)))); Graph11 = ValueWhen(Cum(1) >= TF, M_0 - (2*(0.125*(M_8-M_0)))); /**************************************************************/ Title = Name() + "=" + WriteIf( round(C)== C, NumToStr(C,1) , WriteVal(C) ) + " " + "\\c17" + WriteIf( Interval()==86400, "Daily ", WriteIf(Interval()==3600,"Hourly ", WriteIf(Interval()==900,"15 Min ", WriteIf(Interval()==300,"5 Min ", WriteIf(Interval()==60,"1 Min ", "" ) ) ) ) ) + Date() + "\\c12" + WriteIf(Volume>0," Turnover=","") + WriteIf(Volume>0, WriteVal(Volume*Close/1000), "" ) ; _SECTION_BEGIN("WMA"); P = ParamField("Price field",-1); Periods = Param("Periods", 15, 2, 300, 1, 10 ); Plot( WMA( P, Periods ), _DEFAULT_NAME(), ParamColor( "Color", colorCycle ), ParamStyle("Style") ); _SECTION_END(); _SECTION_BEGIN("VWAP"); /// VWAP code that also plots standard deviations...if you want a 3rd...it should be fairly simple to add // // NOTE: the code is SLOOOOWWWW...can someone help speed it up? // I tried my best, but can't really do much with the two for-loops... // // LarryJR - ljr500@hotmail.com // need this line or else when u scroll 1 min chart over a few days, the vwap bars may change // size (which is wrong) because of the QuickAFL processing code // so we ensure we have enough bars loaded for at least a couple of days... set the number appropriately. SetBarsRequired( 10000, 0 ); // this stores true/false based on a new day... newday=Day() != Ref(Day(), -1); SumPriceVolume=0; totVolume=0; Vwap2=0; stddev=0; newdayindex=0; Variance =0; // we must use a loop here because we need to save the vwap for each bar to calc the variance later for( i= 0; i < BarCount; i++ ) { // only want to reset our values at the start of a new day if (newday[i]==True) { SumPriceVolume=0; totVolume=0; newdayindex=i; // this is the index at the start of a new day Variance=0; //Vwap2=0; } AvgPrice=(O[i] + H[i] + L[i] + C[i])/4; // Sum of Volume*price for each bar sumPriceVolume += AvgPrice * (Volume[i]); // running total of volume each bar totVolume += (Volume[i]); if (totVolume[i] >0) { Vwap2[i]=Sumpricevolume / totVolume ; Vwap2temp=Vwap2[i]; } // now the hard part...calculate the variance... // a separate calc from the start of each day - note it requires the vwap from above // also note, we calculate starting at the first bar in the new day to today to the curent bar Variance=0; for (j=newdayindex; j < i; j++) { AvgPrice=(O[j] + H[j] + L[j] + C[j])/4; Variance += (Volume[j]/totVolume) * (Avgprice-Vwap2temp)*(Avgprice-Vwap2temp); } stddev_1_pos[i]=Vwap2temp + sqrt(Variance); stddev_1_neg[i]=Vwap2temp - sqrt(Variance); stddev_2_pos[i]=Vwap2temp + 2*sqrt(Variance); stddev_2_neg[i]=Vwap2temp - 2*sqrt(Variance); } Plot (Vwap2,"VWAP2",colorDarkGrey, styleLine); Plot (stddev_1_pos,"VWAP_std+1",colorGrey50, styleDashed); Plot (stddev_1_neg,"VWAP_std-1",colorGrey50, styleDashed); Plot (stddev_2_pos,"VWAP_std+2",colorGrey40, styleDashed); Plot (stddev_2_neg,"VWAP_std-2",colorGrey40, styleDashed); _SECTION_END();