[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

- Re: [amibroker] Acceleration Bands -



PureBytes Links

Trading Reference Links




[Ed] <FONT 
face=Arial>I was wondering if there is code to search for a variety of 
candlesticks (doji, hanging man...) or candlestick patterns (morning star, 
bullish engulfing pattern...). 
<FONT 
face=Arial> 
Hello Ed, below 
some experimental code to identify and investigate Candle Patterns 
on price charts. The patterns come from many sources, some of my own thrown 
in, and you can add your own. Copy it to an indicator and open the Param() 
window. As is you can select up to 44 candle patterns and see various stats on 
your chart. Candle patterns have more meaning if they occur under the right 
conditions, for example in an oversold or overbought condition. In the code the 
RSI() is used as qualifier however you should experiment with your own 
formula.
<FONT 
face=Arial> 
Candle patterns are 
relative in short timeframes and you have to consider how many trades were 
used to create the pattern and the fact that the patterns may be the result of 
random price movements. The more samples (trades) are contained in the candle 
pattern the more valid the pattern is (just my personal opinion). 

<FONT 
face=Arial> 
Good 
luck,
<FONT 
face=Arial>herman



<FONT 
face=Arial> 
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);//////////////////////////////////////////////////////////////////ThH = 
Param("Qualifier High Threshold",100,0,100,1);ThL = Param("Qualifier 
Low Threshold",0,0,100,1);Pd  = Param("Qualifier 
Period",3,0,10,1);R = RSI(Pd); // Qualifier for candle pattern (substitute 
your 
own)//////////////////////////////////////////////////////////////////CandlePatternTrue 
= CandlePattern(P) AND R>ThL AND R<ThH;NextBar = 
Ref(CandlePatternTrue,-1);Profit = IIf(NextBar, (C-O)/O*100,0);SecondBar 
= BarIndex()==2;SimpleProfit = LastValue(Cum(Profit));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((HighestInDisplay-Lowestindisplay)+0.9*HighestIndisplay,"",1,styleNoLine|styleNoLabel);Plot(C,"Close",colorBlack,64);Plot(IIf(CandlePatternTrue,1,Null)*0.995*L,"",6,2|4);
 
<FONT 
face=Arial>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";
<FONT 
face=Arial> 



 


Check AmiBroker web page at:
http://www.amibroker.com/

Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html








Yahoo! Groups Sponsor


  ADVERTISEMENT 












Yahoo! Groups Links
To visit your group on the web, go to:http://groups.yahoo.com/group/amibroker/ 
To unsubscribe from this group, send an email to:amibroker-unsubscribe@xxxxxxxxxxxxxxx 
Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.