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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Relative Strength
  4. //  Author/Uploader: Brian Mitchell 
  5. //  E-mail:          bmitchell@pobox.com
  6. //  Date/Time Added: 2004-01-17 00:59:58
  7. //  Origin:          
  8. //  Keywords:        
  9. //  Level:           advanced
  10. //  Flags:           exploration
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=323
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=323
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Comparative relative strength scoring/ranking. I use this to compare
  17. //  sectors in tc2000, but it could be used for just about anything. Point it
  18. //  at a watchlist (make sure to set watchlistnum variable appropriately) and
  19. //  it will rank everything in the watchlist relative to one another.
  20. //
  21. //------------------------------------------------------------------------------
  22. /*
  23. Simple Sector Rotation Model
  24. bmitchell@pobox.com
  25. This is a simple method for determining the strongest sectors at any given time. Use daily
  26. mode for intermediate term, and weekly for longer term. The basis of it is Daryl Guppy's
  27. Multiple Moving Averages (MMA) plot. Here, I seperate the moving averages into short term
  28. and long term averages, and give a point for each moving average above all the long term averages.
  29. I do this for every symbol in the watchlist except the index being scanned, then I generally
  30. sort the results based on the RS reading. To use this, you need to create a watchlist of
  31. symbols, and set WatchlistNum appropriately. Also, you want to define a filter so that you only
  32. scan this watchlist.
  33. This is intended only for sector rotation, and probably would not be terribly useful as a trading
  34. system in and of itself. I use TC2000's MG* sector indexes personally.
  35. */
  36. EnableRotationalTrading();
  37. SetOption("WorstRankHeld", 5);
  38. PositionSize = -100;
  39. PositionScore = 0;
  40. WatchlistNum = 1;
  41. Filter=1;
  42. NumColumns=0;
  43. function CalculatePosition(st, Lt1, Lt2, Lt3, Lt4, Lt5, Lt6)
  44. {
  45. score=0;
  46. if(st > Lt1) score++;
  47. if(st > Lt2) score++;
  48. if(st > Lt3) score++;
  49. if(st > Lt4) score++;
  50. if(st > Lt5) score++;
  51. if(st > Lt6) score++;
  52. return score;
  53. }
  54. // walk through the watchlist grabbing all the symbols to calculate RS vs ourself.
  55. List = CategoryGetSymbols(categoryWatchlist, WatchlistNum);
  56. for(i=0; (sym = StrExtract(List, i)) != "";i++)
  57. {
  58. if(sym != Name())
  59. {
  60. f = RelStrength(sym);
  61. st3 = EMA(f, 3);
  62. st5 = EMA(f, 5);
  63. st8 = EMA(f, 8);
  64. st12 = EMA(f, 12);
  65. st15 = EMA(f, 15);
  66. Lt30 = EMA(f, 30);
  67. Lt35 = EMA(f, 35);
  68. Lt40 = EMA(f, 40);
  69. Lt45 = EMA(f, 45);
  70. Lt50 = EMA(f, 50);
  71. Lt60 = EMA(f, 60);
  72. z=BarCount - 1;
  73. // uncomment the following if you want to do some backtesting or if you like waiting around
  74. // a long time for the exploration to complete
  75. //for(z=0;z < BarCount;z++)
  76. {
  77. PositionScore[z] = PositionScore[z] + CalculatePosition(st3[z], Lt30[z], Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
  78. PositionScore[z] = PositionScore[z] + CalculatePosition(st5[z], Lt30[z], Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
  79. PositionScore[z] = PositionScore[z] + CalculatePosition(st8[z], Lt30[z], Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
  80. PositionScore[z] = PositionScore[z] + CalculatePosition(st12[z], Lt30[z], Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
  81. PositionScore[z] = PositionScore[z] + CalculatePosition(st15[z], Lt30[z], Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
  82. }
  83. }
  84. }
  85. AddTextColumn(FullName(), "Name");
  86. AddColumn(PositionScore[BarCount - 1], "RS");