Candle Identification.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:7k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Candle Identification
  4. //  Author/Uploader: Herman van den Bergen 
  5. //  E-mail:          psytek@magma.ca
  6. //  Date/Time Added: 2005-01-28 16:37:15
  7. //  Origin:          
  8. //  Keywords:        Candle identification Function
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=422
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=422
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Click on any Candle in the price chart and the Title will identify the
  17. //  selected Candle pattern(s). The Candle definitions were gathered from
  18. //  various sources and accuracy is not garanteed. Add your own patterns to the
  19. //  CandlePattern function.
  20. //
  21. //------------------------------------------------------------------------------
  22. _SECTION_BEGIN("Candle Identification");
  23. Plot(C,"",1,64);
  24. O1 = Ref(O,-1);O2 = Ref(O,-2);
  25. H1 = Ref(H,-1);H2 = Ref(H,-2);
  26. L1 = Ref(L,-1);L2 = Ref(L,-2);
  27. C1 = Ref(C,-1);C2 = Ref(C,-2);
  28. function CandlePattern(P)
  29.    {
  30.    global PatternName;
  31.    if(P == 0) { PatternName = "NearDoji"; Pv = (abs(O-C)<= ((H-L)*0.1)); }
  32.    else if(P == 1) { PatternName = "BlackCandle"; Pv = (O>C); }
  33.    else if(P == 2) { PatternName = "LongBlackCandle"; Pv = (O>C AND
  34. (O-C)/(.001+H-L)>.6); }
  35.    else if(P == 3) { PatternName = "SmallBlackCandle"; Pv = ((O>C) AND
  36. ((H-L)>(3*(O-C)))); }
  37.    else if(P == 4) { PatternName = "WhiteCandle"; Pv = (C>O); }
  38.    else if(P == 5) { PatternName = "LongWhiteCandle"; Pv = ((C>O) AND
  39. ((C-O)/(.001+H-L)>.6)); }
  40.    else if(P == 6) { PatternName = "SmallWhiteCandle"; Pv = ((C>O) AND
  41. ((H-L)>(3*(C-O)))); }
  42.    else if(P == 7) { PatternName = "BlackMaubozu"; Pv = (O>C AND H==O AND
  43. C==L); }
  44.    else if(P == 8) { PatternName = "WhiteMaubozu"; Pv = (C>O AND H==C AND
  45. O==L); }
  46.    else if(P == 9) { PatternName = "BlackClosingMarubozu"; Pv = (O>C AND
  47. C==L); }
  48.    else if(P == 10) { PatternName = "WhiteClosingMarubozu"; Pv = (C>O AND
  49. C==H); }
  50.    else if(P == 11) { PatternName = "BlackOpeningMarubozu"; Pv = (O>C AND
  51. O==H); }
  52.    else if(P == 12) { PatternName = "WhiteOpeningMarubozu"; Pv = (C>O AND
  53. O==L); }
  54.    else if(P == 13) { PatternName = "HangingMan"; Pv = (((H-L)>4*(O-C)) AND
  55. ((C-L)/(.001+H-L)>= 0.75) AND ((O-L)/(.001+H-L)>= 0.75)); }
  56.    else if(P == 14) { PatternName = "Hammer"; Pv = (((H-L)>3*(O-C)) AND
  57. ((C-L)/(.001+H-L)>0.6) AND ((O-L)/(.001+H-L)>0.6)); }
  58.    else if(P == 15) { PatternName = "InvertedHammer"; Pv = (((H-L)>3*(O-C))
  59. AND ((H-C)/(.001+H-L)>0.6) AND ((H-O)/(.001+H-L)>0.6)); }
  60.    else if(P == 16) { PatternName = "ShootingStar"; Pv = (((H-L)>4*(O-C))
  61. AND ((H-C)/(.001+H-L)>= 0.75) AND ((H-O)/(.001+H-L)>= 0.75)); }
  62.    else if(P == 17) { PatternName = "BlackSpinningTop"; Pv = ((O>C) AND
  63. ((H-L)>(3*(O-C))) AND (((H-O)/(.001+H-L))<.4) AND
  64. (((C-L)/(.001+H-L))<.4)); }
  65.    else if(P == 18) { PatternName = "WhiteSpinningTop"; Pv = ((C>O) AND
  66. ((H-L)>(3*(C-O))) AND (((H-C)/(.001+H-L))<.4) AND
  67. (((O-L)/(.001+H-L))<.4)); }
  68.    else if(P == 19) { PatternName = "BearishAbandonedBaby"; Pv = ((C1 == O1)
  69. AND (C2>O2) AND (O>C) AND (L1>H2) AND (L1>H)); }
  70.    else if(P == 20) { PatternName = "BearishEveningDojiStar"; Pv = ((C2>O2)
  71. AND ((C2-O2)/(.001+H2-L2)>.6) AND (C2<O1) AND (C1>O1) AND
  72. ((H1-L1)>(3*(C1-O1))) AND (O>C) AND (O<O1)); }
  73.    else if(P == 21) { PatternName = "DarkCloudCover"; Pv = (C1>O1 AND
  74. ((C1+O1)/2)>C AND O>C AND O>C1 AND C>O1 AND (O-C)/(.001+(H-L)>0.6)); }
  75.    else if(P == 22) { PatternName = "BearishEngulfing"; Pv = ((C1>O1) AND
  76. (O>C) AND (O>= C1) AND (O1>= C) AND ((O-C)>(C1-O1))); }
  77.    else if(P == 23) { PatternName = "ThreeOutsideDownPattern"; Pv = ((C2>O2)
  78. AND (O1>C1) AND (O1>= C2) AND (O2>= C1) AND ((O1-C1)>(C2-O2)) AND (O>C) AND
  79. (C<C1)); }
  80.    else if(P == 24) { PatternName = "BullishAbandonedBaby"; Pv = ((C1 == O1)
  81. AND (O2>C2) AND (C>O) AND (L2>H1) AND (L>H1)); }
  82.    else if(P == 25) { PatternName = "BullishMorningDojiStar"; Pv = ((O2>C2)
  83. AND ((O2-C2)/(.001+H2-L2)>.6) AND (C2>O1) AND (O1>C1) AND
  84. ((H1-L1)>(3*(C1-O1))) AND (C>O) AND (O>O1)); }
  85.    else if(P == 26) { PatternName = "BullishEngulfing"; Pv = ((O1>C1) AND
  86. (C>O) AND (C>= O1) AND (C1>= O) AND ((C-O)>(O1-C1))); }
  87.    else if(P == 27) { PatternName = "ThreeOutsideUpPattern"; Pv = ((O2>C2)
  88. AND (C1>O1) AND (C1>= O2) AND (C2>= O1) AND ((C1-O1)>(O2-C2)) AND (C>O) AND
  89. (C>C1)); }
  90.    else if(P == 28) { PatternName = "BullishHarami"; Pv = ((O1>C1) AND (C>O)
  91. AND (C<= O1) AND (C1<= O) AND ((C-O)<(O1-C1))); }
  92.    else if(P == 29) { PatternName = "ThreeInsideUpPattern"; Pv = ((O2>C2)
  93. AND (C1>O1) AND (C1<= O2) AND (C2<= O1) AND ((C1-O1)<(O2-C2)) AND (C>O) AND
  94. (C>C1) AND (O>O1)); }
  95.    else if(P == 30) { PatternName = "PiercingLine"; Pv = ((C1<O1) AND
  96. (((O1+C1)/2)<C) AND (O<C) AND (O<C1) AND (C<O1) AND
  97. ((C-O)/(.001+(H-L))>0.6)); }
  98.    else if(P == 31) { PatternName = "BearishHarami"; Pv = ((C1>O1) AND (O>C)
  99. AND (O<= C1) AND (O1<= C) AND ((O-C)<(C1-O1))); }
  100.    else if(P == 32) { PatternName = "ThreeInsideDownPattern"; Pv = ((C2>O2)
  101. AND (O1>C1) AND (O1<= C2) AND (O2<= C1) AND ((O1-C1)<(C2-O2)) AND (O>C) AND
  102. (C<C1) AND (O<O1)); }
  103.    else if(P == 33) { PatternName = "ThreeWhiteSoldiers"; Pv = (C>O*1.01)
  104. AND (C1>O1*1.01) AND (C2>O2*1.01) AND (C>C1) AND (C1>C2) AND (O<C1) AND
  105. (O>O1) AND (O1<C2) AND (O1>O2) AND (((H-C)/(H-L))<.2) AND
  106. (((H1-C1)/(H1-L1))<.2) AND (((H2-C2)/(H2-L2))<.2); }
  107.    else if(P == 34) { PatternName = "DarkCloudCover"; Pv = (C1>O1*1.01) AND
  108. (O>C) AND (O>H1) AND (C>O1) AND (((C1+O1)/2)>C) AND (C>O1) AND
  109. (MA(C,13)-Ref(MA(C,13),-4)>0); }
  110.    else if(P == 35) { PatternName = "ThreeBlackCrows"; Pv = (O>C*1.01) AND
  111. (O1>C1*1.01) AND (O2>C2*1.01) AND (C<C1) AND (C1<C2) AND (O>C1) AND (O<O1)
  112. AND (O1>C2) AND (O1<O2) AND (((C-L)/(H-L))<.2) AND (((C1-L1)/(H1-L1))<.2)
  113. AND (((C2-L2)/(H2-L2))<.2); }
  114.    else if(P == 36) { PatternName = "doji"; Pv = (O == C); }
  115.    else if(P == 37) { PatternName = "GapUp"; Pv = GapUp(); }
  116.    else if(P == 38) { PatternName = "GapDown"; Pv = GapDown(); }
  117.    else if(P == 39) { PatternName = "BigGapUp"; Pv = L>1.01*H1; }
  118.    else if(P == 40) { PatternName = "BigGapDown"; Pv = H<0.99*L1; }
  119.    else if(P == 41) { PatternName = "HugeGapUp"; Pv = L>1.02*H1; }
  120.    else if(P == 42) { PatternName = "HugeGapDown"; Pv = H<0.98*L1; }
  121.    else if(P == 43) { PatternName = "DoubleGapUp"; Pv = GapUp() AND
  122. Ref(GapUp(),-1); }
  123.    else if(P == 44) { PatternName = "DoubleGapDown"; Pv = GapDown() AND
  124. Ref(GapDown(),-1); }
  125.    return Pv;
  126.    }
  127. PatternNameList = "";
  128. for(Cp=0; Cp<=44; Cp++)
  129. {
  130. VarSet("Pattern"+NumToStr(Cp,1.0),CandlePattern(cP));
  131. PatternNameList = PatternNameList +PatternName+","; 
  132. }
  133. BI = BarIndex();
  134. SelectedBar = SelectedValue(BI) -BI[0];
  135. //Selectedbar = Status("lastvisiblebar")-1;
  136. PStr="";
  137. for(Cp=0; Cp<=44; Cp++)
  138. {
  139. Temp = VarGet("Pattern"+NumToStr(Cp,1.0));
  140. if(temp[SelectedBar]) Pstr=Pstr+"#"+NumToStr(Cp,1.0)+" - "+StrExtract(PatternNameList,Cp)+"n";
  141. }
  142. Title = "nCandle Demostration n"+ Pstr;
  143. _SECTION_END();