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

[amibroker] Re: Osaka plugin crash loading saved table with > 128 columns (not an AB bug)



PureBytes Links

Trading Reference Links

Herman,
I just want to say thank you for sharing your code.


Dennis



--- In amibroker@xxxxxxxxxxxxxxx, "Herman van den Bergen" 
<psytek@xxxx> wrote:
> [Ed] 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...).
> 
> 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.
> 
> 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).
> 
> Good luck,
> herman
> 
> --------------------------------------------------------------------
--------
> ----
> 
> 
> 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,styleNoL
> ine|styleNoLabel);
> Plot(C,"Close",colorBlack,64);
> Plot(IIf(CandlePatternTrue,1,Null)*0.995*L,"",6,2|4);
> 
> 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";
> 
> 
> --------------------------------------------------------------------
--------
> ----



------------------------ Yahoo! Groups Sponsor --------------------~--> 
Yahoo! Domains - Claim yours for only $14.70
http://us.click.yahoo.com/Z1wmxD/DREIAA/yQLSAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

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

Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
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:
     http://docs.yahoo.com/info/terms/