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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Regression Analysis Line
  4. //  Author/Uploader: Frank Snay 
  5. //  E-mail:          fesnay@san.rr.com
  6. //  Date/Time Added: 2001-09-03 15:36:58
  7. //  Origin:          Graphical Display of Regression Analysis Line
  8. //  Keywords:        Regression Analysis Line
  9. //  Level:           basic
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=106
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=106
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Graphical Display of Regression Analysis Line. User can set the length of
  17. //  the RA line, the percent above and below said RA line for parallel lines,
  18. //  and a "DaysBack" user described variable for historical study and display
  19. //  of the RA line.
  20. //
  21. //------------------------------------------------------------------------------
  22. /* Regression Analysis - Graph a Straight Line
  23. ** AFL Implementation by Frank Snay
  24. ** The Program is designed to graph a user defined length, straight regression 
  25. ** analysis line.  Percentage lines, also user defined, are drawn above and
  26. ** below the regression analysis line.  
  27. ** A user defined "DaysBack" draws the line back (think AFL code ref() ) from 
  28. ** the current end of the data for those who want to see a graphed, historical
  29. ** line from previous days.  Setting "DaysBack" to zero ends the graph on the
  30. ** current last database day.
  31. ** Candlestick code displayed, with the green box with white fill being a day where
  32. ** the close exceeds the open, and a red box with black fill being a day where the
  33. ** open exceeds the close. (Tj - any way to make the fill the same color as the boxes?)
  34. ** Use Automatic scaling, Grid: Middle + ShowDates 
  35. ** THE FOLLOWING ARE USER INPUTS FOR THE DESIRED RESULTS:
  36. ** User Input - Number of Days for Regression Analysis Line Study  */
  37. periods =63;
  38. /*  User Input - Upper and Lower Line seperation in percentage */
  39. Percent = 10;
  40. /* User Input - Number of days BACK for Historical Test */
  41. DaysBack = 0; //Keep at 0 for current regression analysis line
  42. /*  Compute the number of bars in datafile  */
  43. RABars = 0; //initialize
  44. TotalBars = cum(1); //how many bars in database
  45. FinalBar = lastvalue(TotalBars);//number value of last bar
  46. EndDay = FinalBar - DaysBack;//for other than 0 DaysBack
  47. StartDay = EndDay - periods+1;//starting point for line
  48. Master1 = iif(TotalBars >= StartDay and TotalBars <= EndDay,1,0);//defined period
  49. RABars = iif(Master1,ref(RABars,-1)+1,0); // daily counter in defined period
  50. RABarKntr = iif(Master1,sum(RABars,periods),0); //Sum of daily counts
  51. /*  Regression Analysis Computations  */
  52. TempMeanX = iif(RABarKntr == periods,sum(RABarKntr,periods),0);  // Sum of individual day counters
  53. MeanX1 = hhv(TempMeanX,TotalBars)/periods;  //  Final number divided by number of days
  54. MeanX = lastvalue(MeanX1); 
  55. TempMeanY =  iif(RABarKntr == periods, sum(c,periods),0);
  56. MeanY1 = hhv(TempMeanY,TotalBars)/periods ;  //  Final sum  divided by number of days
  57. MeanY = lastvalue(MeanY1);  
  58. Slope1 = iif(TotalBars == EndDay,linregslope(c,periods),0);
  59. Slope2 = iif(hhv(Slope1,FinalBar)>= 0,hhv(slope1,FinalBar),llv(Slope1,FinalBar));
  60. slope = lastvalue(Slope2);
  61. Intercept = MeanY -Slope * MeanX;
  62. /*  Linear Regression Line = Intercept plus the Slope times RABarKntr  */
  63. LRLine = Intercept + Slope * RABarKntr; 
  64. /*  Convert Percent to decimal */
  65. Percent1 = Percent/100;
  66. /* Add half to LRLine to get upper, subtract half to get lower */
  67. UpperLRLine = LRLine * (1+(Percent1)/2);
  68. LowerLRLine = LRLine * (1-(Percent1)/2);
  69. /*  Following 3 lines - graph ONLY days in the period */
  70. UpperLRLine = iif(RABarKntr >= 1,LRLine*(1+Percent1/2),-1e10);
  71. LowerLRLine = iif(RABarKntr>= 1, LRLine *(1-Percent1/2),-1e10);
  72. LRLine = iif(RABarKntr >= 1, LRLine,-1e10);
  73. /*  Graph the output  */
  74. // candlestick chart drawn here
  75. maxgraph=4;
  76. graph0 = close;
  77. graph0style = 64;
  78. graph0barcolor = iif(c>=o,5,4); //Green or Red candlestick graphs
  79. graph0color =2;
  80. graph1style = graph2style = graph3style = 1;
  81. graph1color = graph2color = graph3color  = 7;
  82. graph1 =LRLine;
  83. graph2 =UpperLRLine;
  84. graph3 =LowerLRLine;