Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Candlestick Evaluation for Amibroker (AFL)
This indicator formula allows you to select Candlestick patterns, mark their occurrence on the chart, AND display their frequency AND profit-prediction value.
Similar Indicators / Formulas
Indicator / Formula
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | //Apply the code to an indicator, Open up the Param window, AND drag the CandlePattern# slider left AND right. //Each CandlePattern number selects a different candle pattern. //The selected pattern is identified on your chart with a vertical Blue line. //The white line on your chart represents the resulting Equity if the pattern were traded. //Thus you can see the pattern’s profitability over your data history. //Try different tickers, they will all behave differently. The exit delay, i.e., the delay after the candle pattern occurred before the price is sampled, is adjustable. //Presumably some longer patterns require more bars to show profits/losses. //The Name of the candle pattern AND a number of other stats are also shown in the Title. //Add your own price patterns AND metrics. O1 = Ref ( O ,-1);O2 = Ref ( O ,-2); H1 = Ref ( H ,-1);H2 = Ref ( H ,-2); L1 = Ref ( L ,-1);L2 = Ref ( L ,-2); C1 = Ref ( C ,-1);C2 = Ref ( C ,-2); function CandlePattern(P) { global PatternName; if (P == 0) { PatternName = "NearDoji" ; Pv = ( abs ( O - C )<= (( H - L )*0.1)); } else if (P == 1) { PatternName = "BlackCandle" ; Pv = ( O > C ); } else if (P == 2) { PatternName = "LongBlackCandle" ; Pv = ( O > C AND ( O - C )/(.001+ H - L )>.6); } else if (P == 3) { PatternName = "SmallBlackCandle" ; Pv = (( O > C ) AND (( H - L )>(3*( O - C )))); } else if (P == 4) { PatternName = "WhiteCandle" ; Pv = ( C > O ); } else if (P == 5) { PatternName = "LongWhiteCandle" ; Pv = (( C > O ) AND (( C - O )/(.001+ H - L )>.6)); } else if (P == 6) { PatternName = "SmallWhiteCandle" ; Pv = (( C > O ) AND (( H - L )>(3*( C - O )))); } else if (P == 7) { PatternName = "BlackMaubozu" ; Pv = ( O > C AND H == O AND C == L ); } else if (P == 8) { PatternName = "WhiteMaubozu" ; Pv = ( C > O AND H == C AND O == L ); } else if (P == 9) { PatternName = "BlackClosingMarubozu" ; Pv = ( O > C AND C == L ); } else if (P == 10) { PatternName = "WhiteClosingMarubozu" ; Pv = ( C > O AND C == H ); } else if (P == 11) { PatternName = "BlackOpeningMarubozu" ; Pv = ( O > C AND O == H ); } else if (P == 12) { PatternName = "WhiteOpeningMarubozu" ; Pv = ( C > O AND O == L ); } else if (P == 13) { PatternName = "HangingMan" ; Pv = ((( H - L )>4*( O - C )) AND (( C - L )/(.001+ H - L )>= 0.75) AND (( O - L )/(.001+ H - L )>= 0.75)); } else if (P == 14) { PatternName = "Hammer" ; Pv = ((( H - L )>3*( O - C )) AND (( C - L )/(.001+ H - L )>0.6) AND (( O - L )/(.001+ H - L )>0.6)); } else if (P == 15) { PatternName = "InvertedHammer" ; Pv = ((( H - L )>3*( O - C )) AND (( H - C )/(.001+ H - L )>0.6) AND (( H - O )/(.001+ H - L )>0.6)); } else if (P == 16) { PatternName = "ShootingStar" ; Pv = ((( H - L )>4*( O - C )) AND (( H - C )/(.001+ H - L )>= 0.75) AND (( H - O )/(.001+ H - L )>= 0.75)); } else if (P == 17) { PatternName = "BlackSpinningTop" ; Pv = (( O > C ) AND (( H - L )>(3*( O - C ))) AND ((( H - O )/(.001+ H - L ))<.4) AND ((( C - L )/(.001+ H - L ))<.4)); } else if (P == 18) { PatternName = "WhiteSpinningTop" ; Pv = (( C > O ) AND (( H - L )>(3*( C - O ))) AND ((( H - C )/(.001+ H - L ))<.4) AND ((( O - L )/(.001+ H - L ))<.4)); } else if (P == 19) { PatternName = "BearishAbandonedBaby" ; Pv = ((C1 == O1) AND (C2>O2) AND ( O > C ) AND (L1>H2) AND (L1> H )); } else if (P == 20) { PatternName = "BearishEveningDojiStar" ; Pv = ((C2>O2) AND ((C2-O2)/(.001+H2-L2)>.6) AND (C2<O1) AND (C1>O1) AND ((H1-L1)>(3*(C1-O1))) AND ( O > C ) AND ( O <O1)); } else if (P == 21) { PatternName = "DarkCloudCover" ; Pv = (C1>O1 AND ((C1+O1)/2)> C AND O > C AND O >C1 AND C >O1 AND ( O - C )/(.001+( H - L )>0.6)); } else if (P == 22) { PatternName = "BearishEngulfing" ; Pv = ((C1>O1) AND ( O > C ) AND ( O >= C1) AND (O1>= C ) AND (( O - C )>(C1-O1))); } else if (P == 23) { PatternName = "ThreeOutsideDownPattern" ; Pv = ((C2>O2) AND (O1>C1) AND (O1>= C2) AND (O2>= C1) AND ((O1-C1)>(C2-O2)) AND ( O > C ) AND ( C <C1)); } else if (P == 24) { PatternName = "BullishAbandonedBaby" ; Pv = ((C1 == O1) AND (O2>C2) AND ( C > O ) AND (L2>H1) AND ( L >H1)); } else if (P == 25) { PatternName = "BullishMorningDojiStar" ; Pv = ((O2>C2) AND ((O2-C2)/(.001+H2-L2)>.6) AND (C2>O1) AND (O1>C1) AND ((H1-L1)>(3*(C1-O1))) AND ( C > O ) AND ( O >O1)); } else if (P == 26) { PatternName = "BullishEngulfing" ; Pv = ((O1>C1) AND ( C > O ) AND ( C >= O1) AND (C1>= O ) AND (( C - O )>(O1-C1))); } else if (P == 27) { PatternName = "ThreeOutsideUpPattern" ; Pv = ((O2>C2) AND (C1>O1) AND (C1>= O2) AND (C2>= O1) AND ((C1-O1)>(O2-C2)) AND ( C > O ) AND ( C >C1)); } else if (P == 28) { PatternName = "BullishHarami" ; Pv = ((O1>C1) AND ( C > O ) AND ( C <= O1) AND (C1<= O ) AND (( C - O )<(O1-C1))); } else if (P == 29) { PatternName = "ThreeInsideUpPattern" ; Pv = ((O2>C2) AND (C1>O1) AND (C1<= O2) AND (C2<= O1) AND ((C1-O1)<(O2-C2)) AND ( C > O ) AND ( C >C1) AND ( O >O1)); } else if (P == 30) { PatternName = "PiercingLine" ; Pv = ((C1<O1) AND (((O1+C1)/2)< C ) AND ( O < C ) AND ( O <C1) AND ( C <O1) AND (( C - O )/(.001+( H - L ))>0.6)); } else if (P == 31) { PatternName = "BearishHarami" ; Pv = ((C1>O1) AND ( O > C ) AND ( O <= C1) AND (O1<= C ) AND (( O - C )<(C1-O1))); } else if (P == 32) { PatternName = "ThreeInsideDownPattern" ; Pv = ((C2>O2) AND (O1>C1) AND (O1<= C2) AND (O2<= C1) AND ((O1-C1)<(C2-O2)) AND ( O > C ) AND ( C <C1) AND ( O <O1)); } else if (P == 33) { PatternName = "ThreeWhiteSoldiers" ; Pv = ( C > O *1.01) AND (C1>O1*1.01) AND (C2>O2*1.01) AND ( C >C1) AND (C1>C2) AND ( O <C1) AND ( O >O1) AND (O1<C2) AND (O1>O2) AND ((( H - C )/( H - L ))<.2) AND (((H1-C1)/(H1-L1))<.2) AND (((H2-C2)/(H2-L2))<.2); } else if (P == 34) { PatternName = "DarkCloudCover" ; Pv = (C1>O1*1.01) AND ( O > C ) AND ( O >H1) AND ( C >O1) AND (((C1+O1)/2)> C ) AND ( C >O1) AND ( MA ( C ,13)- Ref ( MA ( C ,13),-4)>0); } else if (P == 35) { PatternName = "ThreeBlackCrows" ; Pv = ( O > C *1.01) AND (O1>C1*1.01) AND (O2>C2*1.01) AND ( C <C1) AND (C1<C2) AND ( O >C1) AND ( O <O1) AND (O1>C2) AND (O1<O2) AND ((( C - L )/( H - L ))<.2) AND (((C1-L1)/(H1-L1))<.2) AND (((C2-L2)/(H2-L2))<.2); } else if (P == 36) { PatternName = "doji" ; Pv = ( O == C ); } else if (P == 37) { PatternName = "GapUp" ; Pv = GapUp (); } else if (P == 38) { PatternName = "GapDown" ; Pv = GapDown (); } else if (P == 39) { PatternName = "BigGapUp" ; Pv = L >1.01*H1; } else if (P == 40) { PatternName = "BigGapDown" ; Pv = H <0.99*L1; } else if (P == 41) { PatternName = "HugeGapUp" ; Pv = L >1.02*H1; } else if (P == 42) { PatternName = "HugeGapDown" ; Pv = H <0.98*L1; } else if (P == 43) { PatternName = "DoubleGapUp" ; Pv = GapUp () AND Ref ( GapUp (),-1); } else if (P == 44) { PatternName = "DoubleGapDown" ; Pv = GapDown () AND Ref ( GapDown (),-1); } return Pv; } P = Param ( "CandlePattern#" ,20,0,44,1); PP = Param ( "Profit period" ,0,0,10,1); CandlePatternTrue = CandlePattern(P); NextBar = Ref (CandlePatternTrue,-1); ProfitFormula = ( Ref ( C ,PP)- O )/ O *100; Profit = IIf (NextBar,ProfitFormula,0); SetOption ( "AllowSameBarExit" , True ); Short = 0; Cover = 0; Buy = Nextbar AND Ref ( C > O ,-1); BuyPrice = Open ; Sell = Buy ; //Ref(Buy,-PP); SellPrice = C ; SecondBar = BarIndex ()==2; ProfitArray = Cum (Profit); SimpleProfit = LastValue (ProfitArray); CompoundedProfit = ( LastValue ( AMA2 (1,(SecondBar==1),(SecondBar==0)*(1 + Profit/100)))-1)*100; Upday = IIf (NextBar, ( C - O )>0,0); downDay = IIf (NextBar, ( C - O )<0,0); PatternColor = IIf (CandlePatternTrue,2,1); NumUpDays = LastValue ( Cum (UpDay)); NumDownDays = LastValue ( Cum (downDay)); NumPatterns = LastValue ( Cum (CandlePatternTrue )); LowestInDisplay = Lowest ( ValueWhen ( Status ( "barVisible" ), L )); HighestInDisplay = Highest ( ValueWhen ( Status ( "Barvisible" ), H )); Plot ( C , "Close" , colorBlack ,64); Plot (ProfitArray, "" ,2,1| styleOwnScale ); Plot ( IIf (CandlePatternTrue, L -0.005, Null ), "" ,6, styleHistogram ); PlotShapes (UpDay* shapeUpArrow , colorBrightGreen ,0, L ); PlotShapes (downDay* shapeDownArrow , colorRed ,0, H ); Title = "\nCANDLE PATTERN ANALYSIS\n\n" + "Open: " + NumToStr ( O ,1.2)+ "\n" + "High: " + NumToStr ( H ,1.2)+ "\n" + "Low: " + NumToStr ( L ,1.2)+ "\n" + "Close: " + NumToStr ( C ,1.2)+ "\n\n" + "Candle Pattern: " +PatternName+ "\n" + "Candle Pattern# " + NumToStr (P,1.0)+ "\n" + "#Patterns found: " + NumToStr (NumPatterns ,1.0)+ "\n" + "#Updays: " + NumToStr (NumUpDays,1.0, False )+ " [" + NumToStr ( Nz (NumUpDays/NumPatterns*100),1.0, False )+ "%]\n" + "#DownDays: " + NumToStr (NumDownDays,1.0, False )+ " [" + NumToStr ( Nz (NumDownDays/numpatterns*100),1.0, False )+ "%]\n\n" + "Profit at cursor: " + NumToStr (Profit,1.4)+ "%\n" + "Ave.Profit/Pattern:" + NumToStr ( Nz (SimpleProfit/NumPatterns),1.4)+ "%\n" + "Tot.Simple profit: " + NumToStr (SimpleProfit,1.4)+ "%\n" + "Tot.Comp. profit: " + NumToStr (CompoundedProfit,1.4)+ "%\n" ; |
3 comments
Leave Comment
Please login here to leave a comment.
Back
I just saw the cci index in the parameters but after i reset the parameters it seems to have disappeared
thanks
very usefull. thanks