Gartley 222 Pattern Indicator.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:6k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Gartley 222 Pattern Indicator
  4. //  Author/Uploader: Daniel Ervi 
  5. //  E-mail:          
  6. //  Date/Time Added: 2004-04-09 17:07:48
  7. //  Origin:          Active Trader article, August 2003
  8. //  Keywords:        Gartey, Pattern, ZigZag
  9. //  Level:           semi-advanced
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=347
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=347
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  A port of the Wealth-Lab code posted by Mark Conway to the Wealth-Lab
  17. //  forums. It has been adapted to an AFL indicator, but with a little work it
  18. //  could be made into a scan or even a trading system.
  19. //
  20. //------------------------------------------------------------------------------
  21. // Gartley 222 Pattern Indicator Plot
  22. //
  23. // Ported by Daniel Ervi from code originally posted for Wealth-Lab by Mark Conway.
  24. // Based on the August 2003 article in Active Trader Magazine.
  25. //
  26. // Usage:  Gartley222(VPFactor, Tolerance, Lookback)
  27. //         VPFactor adjusts swing size percentage (Zig Zag)
  28. //         Tolerance adjusts percentage tolerance from ideal pattern specification
  29. //         Lookback adjusts volatility calculation
  30. procedure Gartley222(VPFactor, Tolerance, Lookback)
  31. {
  32.   F1 = 0.618;
  33.   F2 = 0.786;
  34.   F3 = 1.27;
  35.   F4 = 1.618;
  36.   // Setup volatility adjusted reversal array
  37.   VP = 100 * ATR(Lookback) / Close;
  38.   Reversal = int(VPFactor * VP);
  39.   for(Bar = 50; Bar < BarCount; Bar++) 
  40.   { 
  41.     // Build Peak and Trough arrays
  42.     P1    = Peak(High, Reversal[Bar]);
  43.     P1Bar = Bar - PeakBars(High, Reversal[Bar]);
  44.     P2    = Peak(High, Reversal[Bar], 2);
  45.     P2Bar = Bar - PeakBars(High, Reversal[Bar], 2);
  46.     T1    = Trough(Low, Reversal[Bar]);
  47.     T1Bar = Bar - TroughBars(Low, Reversal[Bar]);
  48.     T2    = Trough(Low, Reversal[Bar], 2);
  49.     T2Bar = Bar - TroughBars(Low, Reversal[Bar], 2);
  50.     // Test for a bullish 222
  51.     // Trough X is T2
  52.     // Peak A is P2
  53.     // Trough B is T1
  54.     // Peak C is P1
  55.     // D is the Buy point
  56.     D = Low[Bar];
  57.     PTValid = (P1Bar[Bar] > T1Bar[Bar]) AND (T1Bar[Bar] > P2Bar[Bar]) AND (P2Bar[Bar] > T2Bar[Bar]);
  58.     HLValid = (P1[Bar] < P2[Bar]) AND (T1[Bar] > T2[Bar]) AND (P1[Bar] > T1[Bar]);
  59.     InZone  = (D < T1[Bar]) AND (D > T2[Bar]);
  60.     if(PTValid AND HLValid AND InZone)
  61.     {
  62.       XA = P2[Bar] - T2[Bar];
  63.       AB = P2[Bar] - T1[Bar];
  64.       BC = P1[Bar] - T1[Bar];
  65.       CD = P1[Bar] - D;
  66.       AD = P2[Bar] - D;
  67.       ABdXA = AB / XA; // AB should be 61.8% of XA
  68.       C1    = (ABdXA > F1 - Tolerance) AND (ABdXA < F1 + Tolerance);
  69.       BCdAB = BC / AB; // BC should be 61.8-78.6% of AB
  70.       C2    = (BCdAB > F1 - Tolerance) AND (BCdAB < F2 + Tolerance);
  71.       CDdBC = CD / BC; // CD should be 127-161.8% of BC}
  72.       C3    = (CDdBC > F3 - Tolerance) AND (CDdBC < F4 + Tolerance);
  73.       ADdXA = AD / XA; // AD should be 78.6% of XA}
  74.       C4    = (ADdXA > F2 - Tolerance) AND (ADdXA < F2 + Tolerance);
  75.       if(C1 AND C2 AND C3 AND C4)
  76.       {
  77.         // Bullish Gartley found.  Draw pattern.
  78.         PlotXA = LineArray(T2Bar[Bar], T2[Bar], P2Bar[Bar], P2[Bar]);
  79.         Plot(PlotXA, "", colorBlue, styleLine + styleThick);
  80.         PlotAB = LineArray(P2Bar[Bar], P2[Bar], T1Bar[Bar], T1[Bar]);
  81.         Plot(PlotAB, "", colorBlue, styleLine + styleThick);
  82.         PlotBC = LineArray(T1Bar[Bar], T1[Bar], P1Bar[Bar], P1[Bar]);
  83.         Plot(PlotBC, "", colorBlue, styleLine + styleThick);
  84.         PlotCD = LineArray(P1Bar[Bar], P1[Bar], Bar, D);
  85.         Plot(PlotCD, "", colorBlue, styleLine + styleThick);
  86.         PlotBD = LineArray(T1Bar[Bar], T1[Bar], Bar, D);
  87.         Plot(PlotBD, "", colorDarkBlue, styleSwingDots );
  88.         PlotXD = LineArray(T2Bar[Bar], T2[Bar], Bar, D);
  89.         Plot(PlotXD, "", colorDarkBlue, styleSwingDots );
  90.         PlotXB = LineArray(T2Bar[Bar], T2[Bar], T1Bar[Bar], T1[Bar]);
  91.         Plot(PlotXB, "", colorDarkBlue, styleSwingDots );
  92.       }
  93.     }
  94.     // Test for a bearish 222
  95.     // Peak X is P2
  96.     // Trough A is T2
  97.     // Peak B is P1
  98.     // Trough C is T1
  99.     // D is the Buy point
  100.     D = High[Bar];
  101.     PTValid = (T1Bar[Bar] > P1Bar[Bar]) AND (P1Bar[Bar] > T2Bar[Bar]) AND (T2Bar[Bar] > P2Bar[Bar]);
  102.     HLValid = (T1[Bar] > T2[Bar]) AND (P1[Bar] < P2[Bar]) AND (T1[Bar] < P1[Bar]);
  103.     InZone  = (D > P1[Bar]) AND (D < P2[Bar]);
  104.     if(PTValid AND HLValid AND InZone)
  105.     {
  106.       XA = P2[Bar] - T2[Bar];
  107.       AB = P1[Bar] - T2[Bar];
  108.       BC = P1[Bar] - T1[Bar];
  109.       CD = D - T1[Bar];
  110.       AD = D - T2[Bar];
  111.       ABdXA = AB / XA; // AB should be 61.8% of XA
  112.       C1    = (ABdXA > F1 - Tolerance) AND (ABdXA < F1 + Tolerance);
  113.       BCdAB = BC / AB; // BC should be 61.8-78.6% of AB
  114.       C2    = (BCdAB > F1 - Tolerance) AND (BCdAB < F2 + Tolerance);
  115.       CDdBC = CD / BC; // CD should be 127-161.8% of BC}
  116.       C3    = (CDdBC > F3 - Tolerance) AND (CDdBC < F4 + Tolerance);
  117.       ADdXA = AD / XA; // AD should be 78.6% of XA}
  118.       C4    = (ADdXA > F2 - Tolerance) AND (ADdXA < F2 + Tolerance);
  119.       if(C1 AND C2 AND C3 AND C4)
  120.       {
  121.         // Bearish Gartley found.  Draw pattern.
  122.         PlotXA = LineArray(P2Bar[Bar], P2[Bar], T2Bar[Bar], T2[Bar]);
  123.         Plot(PlotXA, "", colorRed, styleLine + styleThick);
  124.         PlotAB = LineArray(T2Bar[Bar], T2[Bar], P1Bar[Bar], P1[Bar]);
  125.         Plot(PlotAB, "", colorRed, styleLine + styleThick);
  126.         PlotBC = LineArray(P1Bar[Bar], P1[Bar], T1Bar[Bar], T1[Bar]);
  127.         Plot(PlotBC, "", colorRed, styleLine + styleThick);
  128.         PlotCD = LineArray(T1Bar[Bar], T1[Bar], Bar, D);
  129.         Plot(PlotCD, "", colorRed, styleLine + styleThick);
  130.         PlotBD = LineArray(P1Bar[Bar], P1[Bar], Bar, D);
  131.         Plot(PlotBD, "", colorDarkRed, styleSwingDots );
  132.         PlotXD = LineArray(P2Bar[Bar], P2[Bar], Bar, D);
  133.         Plot(PlotXD, "", colorDarkRed, styleSwingDots );
  134.         PlotXB = LineArray(P2Bar[Bar], P2[Bar], P1Bar[Bar], P1[Bar]);
  135.         Plot(PlotXB, "", colorDarkRed, styleSwingDots );
  136.       }
  137.     }
  138.   }
  139. }
  140. Gartley222(1.0, 0.1, 20);
  141. Plot(C,"Close", colorBlueGrey, styleBar);