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

[amibroker] Re: Question on filter and exploration



PureBytes Links

Trading Reference Links

I am not sure itwould help. You say you have 44 candle pattern, how 
about using the first addcolumn() for EPIC, then the next 44 
Addcolumn() for candle,  export your explore into excel, where you 
can easily use auto-filter to check stock-candle type relation ship  
 

--- In amibroker@xxxxxxxxxxxxxxx, "Herman van den Bergen" 
<psytek@xxxx> wrote:
> Try the Exploration code below. Use param() to select eithe Number 
of
> occurrences or percent up days.
> Watch for line wraps.
> 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)
> //////////////////////////////////////////////////////////////////
> SetOption("noDefaultColumns",True);
> Filter=Status("LastBarInTest");
> ST = Param("NumPatterns, %Updays",0,0,1,1);
> if(ST) Stat = 0; else Stat = 1;
> AddTextColumn(Name(),WriteIf(ST,"%UpDays","NumPatterns"));
> for(Cp=0; Cp<=44; Cp++)
>  {
>  CandlePatternTrue = CandlePattern(cP) 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));
>  if(St) AddColumn(NumUpDays,PatternName,1.2);
>  if(St) AddColumn(NumPatterns,PatternName,1.0);
>  }
> /*
> //Plot((HighestInDisplay-Lowestindisplay)
+0.9*HighestIndisplay,"",1,styleNoL
> ine|styleNoLabel);
> 
> Plot(C,"Close",colorWhite,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";
> AddColumn(p, "WhiteOpeningMarubozu",1);
> AddColumn(numpatterns, "Patterns Found",1);
> AddColumn(NumUpDays/NumPatterns*100,"% up days",1);
> AddColumn(Numdowndays/NumPatterns*100,"% down days",1);
> 
> 
> 
> 
> 
> 
> 
> -----Original Message-----
> From: Bundy [mailto:bundy@x...]
> Sent: Tuesday, September 14, 2004 3:15 AM
> To: amibroker@xxxxxxxxxxxxxxx
> Subject: [amibroker] Question on filter and exploration
> 
> 
> I have an indicator that can identify 44 different candlestick 
patters and
> calculate the % of up and down days following each particular 
candle.
> 
> I want to turn this into an exploration so I can easily see what 
types of
> candlestick patterns work better with which stock, etc.
> 
> The code is below - at the moment I have to manually change the 
filter to
> identify each of the 45 candlesticks individually - which makes
> com[parisons between patterns difficult.
> 
> Is there a way to cycle through the patterns using filter to give 
me the
> results for each candle in the one scan?
> 
> The code is below - my contribution to the exploration are the 
last few
> lines - I have no idea whether what I ask can be done, let alone 
how to do
> it - any help would be much appreciated.
> 
> Arthur



------------------------ Yahoo! Groups Sponsor --------------------~--> 
Make a clean sweep of pop-up ads. Yahoo! Companion Toolbar.
Now with Pop-Up Blocker. Get it for free!
http://us.click.yahoo.com/L5YrjA/eSIIAA/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/