Ehlers Laguerre RSI.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:2k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Ehlers Laguerre RSI
  4. //  Author/Uploader: Not Too Swift 
  5. //  E-mail:          
  6. //  Date/Time Added: 2005-03-28 23:00:59
  7. //  Origin:          
  8. //  Keywords:        
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=450
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=450
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  The Laguerre transform provides a time warp such that the low frequency
  17. //  components are delayed much more than the high frequency components. This
  18. //  enables very smooth filters to be built using a short amount of data.
  19. //
  20. //  The Laguerre RSI operates on four data points and is smoother than an
  21. //  RSI(4).
  22. //
  23. //------------------------------------------------------------------------------
  24. SetBarsRequired(200, 0);
  25. // Ehlers formulas
  26. // from Ehlers, John F. Cybernetic Analysis for Stocks and Futures. Wiley. 2004. 
  27. // Chapter 14, p. 213. Code on p. 221.
  28. function LRSI(array, gamma)
  29. // Figure 14.8 on p. 221.
  30. {
  31.   L0 = array;  // Initialize as array
  32.   L1 = array;
  33.   L2 = array;
  34.   L3 = array;
  35.   LRSIValue = array;
  36.   for(i = 1; i < BarCount; i++)
  37.   {
  38.      L0[i] = (1 - gamma)*array[i] + gamma*L0[i-1];
  39.      L1[i] = - gamma * L0[i] + L0[i-1] + gamma * L1[i-1];
  40.      L2[i] = - gamma * L1[i] + L1[i-1] + gamma * L2[i-1];
  41.      L3[i] = - gamma * L2[i] + L2[i-1] + gamma * L3[i-1];
  42.      CU = 0;
  43.      CD = 0;
  44.      if (L0[i] >= L1[i]) CU = L0[i] - L1[i]; else (CD = L1[i] - L0[i]);
  45.      if (L1[i] >= L2[i]) CU = CU + L1[i] - L2[i]; else CD = CD + L2[i] - L1[i];
  46.      if (L2[i] >= L3[i]) CU = CU + L2[i] - L3[i]; else CD = CD + L3[i] - L2[i];
  47.      if (CU + CD != 0) LRSIValue[i] = CU / (CU + CD);
  48.   }
  49.   return LRSIValue;
  50. }
  51. Plot(LRSI(C, 0.5), "Laguerre RSI", colorRed, styleLine);
  52. PlotGrid(.8);
  53. PlotGrid(.5);
  54. PlotGrid(.2);