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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Zig Zag
  4. //  Author/Uploader: Jeff 
  5. //  E-mail:          jparent@nobid.com
  6. //  Date/Time Added: 2005-06-14 22:15:57
  7. //  Origin:          
  8. //  Keywords:        
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=472
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=472
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  normal zig zag with following differences:
  17. //
  18. //  - uses log difference instead of percentage
  19. //
  20. //  - has trigger point indicating when highs and /lows were detected
  21. //
  22. //  log difference is better because it is symmetrical, log(5/10) and log(10/5)
  23. //  has same absolute value, whereas 5/10 and 10/5 have different values.
  24. //
  25. //  trigger is when you can make a trade. usually a rookie mistake, trades are
  26. //  shown to be made at the peaks and troughs of a move, especially in
  27. //  backtesting.
  28. //
  29. //------------------------------------------------------------------------------
  30. // 'thold' is the threshold for the zig-zag turning points
  31. // it is set to a minimum of 2.5% (approx, uses log difference
  32. //  which is more accurate) or a volatility measure
  33. // based on 2 day range over the past 100 days
  34. min_thold=0.025;
  35. thold=Max(min_thold,Median(ln(HHV(H,2)/LLV(L,2)),100));
  36. thold=IIf(IsEmpty(thold),min_thold,thold);
  37. // 't' is a multiplier of 'thold'
  38. // the larger the value of 't', the more significant the
  39. // turning point. Adjust it by opening the Parameter window
  40. // (press ctrl-R)
  41. t=Param("significance",2,2,6,1);
  42. // initialization of variables
  43. d=init=trig=HH=LL=z=0;
  44. // main body
  45. // this program is different than the canned zigzag in that
  46. // it is symmetrical, it does not use percentages, but rather
  47. // log differences. close price is not used either. high and
  48. // low trades are used. an additional item is the trigger
  49. // indicator. it shows the point where the zig or zag was
  50. // identified.
  51. for(i=1;i<BarCount;i++){
  52. if (log(H[i]/L[init])>HH) HH=log(H[i]/L[init]);
  53. if (log(L[i]/H[init])<LL) LL=log(L[i]/H[init]);
  54. if (HH>(t*thold[init]) && d<=0)
  55. { z[init]--; trig[i]=-0.5; d=1;init=i;HH=0;LL=0; }
  56. if (H[i]>H[init] && d==1){init=i;LL=0;}
  57. if (LL<(-t*thold[init]) && d>=0)
  58. { z[init]++; trig[i]=0.5; d=-1;init=i;HH=0;LL=0; }
  59. if (L[i]<L[init] && d==-1){init=i;HH=0;}
  60. }
  61. z_up=z>0; z_dn=z<0;
  62. Plot(z_up,"zig",colorGreen,1);
  63. Plot(-z_dn,"zag",colorRed,1);
  64. Plot(trig,"trigger",colorBlue,1);