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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Automatic Trend-line
  4. //  Author/Uploader: Tomasz Janeczko 
  5. //  E-mail:          tj@amibroker.com
  6. //  Date/Time Added: 2001-06-16 07:56:58
  7. //  Origin:          Created by Tomasz Janeczko
  8. //  Keywords:        trend
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=3
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=3
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  A trend line is a sloping line drawn between two prominent points on a
  17. //  chart. Rising trend lines are usually drawn between two troughs (low
  18. //  points) to illustrate price support while falling trend lines are usually
  19. //  drawn between two peaks (high points) to illustrate upside price
  20. //  resistance. The consensus is that once a trend has been formed (two or more
  21. //  peaks/troughs have touched the trend line and reversed direction) it will
  22. //  remain intact until broken.
  23. //
  24. //  The trend line is described by well-know linear equation:
  25. //
  26. //  y = ax + b
  27. //
  28. //  where x represents time (bar number), y represents price, a defines the
  29. //  slope of the line and b defines initial offset. The main problem in
  30. //  defining appropriate AFL formula is finding the values of these two latter
  31. //  coefficients. If a trend line is drawn between two important lows the slope
  32. //  of the line could be calculated by subtracting the second low price from
  33. //  the first low price and dividing the result by a number of bars between the
  34. //  lows:
  35. //
  36. //  a = ( low2 - low1 ) / ( bars2 - bars1 )
  37. //
  38. //  Calculating offset (b) value is trivial when we shift the time scale so x=0
  39. //  is located at the first low. In this case b=low1.
  40. //
  41. //  So our mathematical formula for the trendline between two important lows
  42. //  will look like this:
  43. //
  44. //  y = ( x - bars1 ) * ( low2 - low1 ) / ( bars2 - bars1 ) + low1
  45. //
  46. //  While determining low prices is simple (just point your mouse over the
  47. //  dominant low and read the low price from a data tooltip that appears on the
  48. //  screen), determining the bar number is not that simple. You can of course
  49. //  count bars by hand but this is simply too much work (especially when you
  50. //  don't have Florida volunteers for a recount :-) ). Luckily we have AFL that
  51. //  allows us to do it in automatic way. All we have to do is to make a running
  52. //  total of bars (our x coordinate) using cum() function:
  53. //
  54. //  x = cum( 1 );
  55. //
  56. //  and then find out where low occured using valuewhen() function:
  57. //
  58. //  bar1 = valuewhen( low == low1, x, 1 );
  59. //
  60. //  bar2 = valuewhen( low == low2, x, 1 );
  61. //
  62. //  For more detailed description please check out:
  63. //
  64. //  <a href="http://www.amibroker.com/newsletter/04-2000.html">Newsletter
  65. //  04/2000</a>
  66. //
  67. //------------------------------------------------------------------------------
  68. x = Cum(1);
  69. perchg = 0.3*LastValue( Highest( ROC( Low, 50 ) ));
  70. startvalue = LastValue( Trough( Low, perchg, 1 ) );
  71. endvalue1 = LastValue( Trough( Low, perchg, 2 ) );
  72. startbar = LastValue( ValueWhen( Low == startvalue, x, 1 ) );
  73. endbar = LastValue( ValueWhen( Low == endvalue1, x, 1 ) );
  74. Aa = (endvalue1-startvalue)/(endbar-startbar);
  75. b = startvalue;
  76. trendline = Aa * ( x  - startbar ) + b; 
  77. Plot( Close, "Price", colorBlue, styleCandle );
  78. Plot( IIf( x >= endbar, trendline, Null ), "Trendline", colorRed );