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

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Renko Chart
  4. //  Author/Uploader: Graham Kavanagh 
  5. //  E-mail:          gkavanagh@e-wire.net.au
  6. //  Date/Time Added: 2005-07-21 02:18:53
  7. //  Origin:          
  8. //  Keywords:        renko
  9. //  Level:           advanced
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=521
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=521
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Plot renko chart. Error in plotting will occur if the box and/or reversal
  17. //  values are too small causing the number of renko bars exceeding the
  18. //  underlying stock normal price bars
  19. //
  20. //------------------------------------------------------------------------------
  21. // Renko  Chart
  22. // Graham Kavanagh  13 Aug 2004 ver C
  23. // Custom Indicator, date axis does not apply
  24.  SetBarsRequired(10000,10000);
  25. // Brick size is dependant on what you want, if too small will not produce a chart due to insufficient x-axis bars
  26. //Brick = LastValue( ATR(100) );
  27. //Brick = LastValue( Max(0.02*C, 0.05) );
  28. Brick = Param( "Brick Size", 0.1, 0.01, 1.00, 0.01 );
  29. reverse = 2;
  30. // Convert the closing price to rising and falling rounded bricks
  31. CF = ceil(C/Brick);
  32. CR = floor(C/Brick);
  33. // initialize first element
  34. j = 0;
  35. RKC[j] = CF[0];
  36. RKO[j] = CF[0] + 1;
  37. down[j] = 1;  // By default the first bar is a down bar.
  38. up[j] = 0;
  39. // Loop to produce the Renko values in number of bricks
  40. for( i=1; i<BarCount-1; i++ )
  41. {
  42. if( CF[i] <= RKC[j] - 1 && down[j] ) // Continue down
  43. {
  44. num = RKC[j] - CF[i];
  45. for( x=1; x<=num; x++ )
  46. {
  47. j++;
  48. up[j] = 0;
  49. down[j] = 1;
  50. RKC[j] = RKC[j-1] - 1;
  51. RKO[j] = RKC[j] + 1;
  52. }
  53. }
  54. else
  55. {
  56. if( CR[i] >= RKC[j] + Reverse && down[j] )  // Change down to up
  57. {
  58. num = CR[i] - RKC[j];
  59. j++;
  60. up[j] = 1;
  61. down[j] = 0;
  62. RKC[j] = RKC[j-1] + 2;
  63. RKO[j] = RKC[j] - 1;
  64. for( x=2; x<=num; x++ )
  65. {
  66. j++;
  67. up[j] = 1;
  68. down[j] = 0;
  69. RKC[j] = RKC[j-1] + 1;
  70. RKO[j] = RKC[j] - 1;
  71. }
  72. }
  73. else
  74. {
  75. if( CR[i] >= RKC[j] + 1 && up[j] ) // Continue Up
  76. {
  77. num = CR[i] - RKC[j];
  78. for( x=1; x<=num; x++ )
  79. {
  80. j++;
  81. Up[j] = 1;
  82. Down[j] = 0;
  83. RKC[j] = RKC[j-1] + 1;
  84. RKO[j] = RKC[j] - 1;
  85. }
  86.   }
  87.   else
  88.   {
  89.   if( CF[i] <= RKC[j] - Reverse && up[j] )  // Change up to down
  90.   {
  91.   num = RKC[j] - CF[i];
  92.   j++;
  93. Up[j] = 0;
  94.   Down[j] = 1;
  95.   RKC[j] = RKC[j-1] - 2;
  96.   RKO[j] = RKC[j] + 1;
  97.   for( x=2; x<=num; x++ )
  98.   {
  99.   j++;
  100.   up[j] = 0;
  101.   down[j] = 1;
  102.     RKC[j] = RKC[j-1] - 1;
  103.     RKO[j] = RKC[j] + 1;
  104. }
  105. }
  106. }
  107. }
  108. }
  109. }
  110. // move the chart to right end of chart space, ie last brick on last bar position
  111. delta =  BarCount-1 - j;
  112. RKC = Ref( RKC, -delta );
  113. RKO = Ref( RKO, -delta );
  114. Up = Ref( Up, -delta );
  115. Down = Ref( Down, -delta );
  116. /*
  117. rC = RKC * Brick;// + (Up-down)*Brick/2;
  118. rO = RC - (Up-down)*Brick;
  119. rH = Max(rC,rO);
  120. rL = Min(rC,rO);
  121. */
  122. C = RKC * Brick;// + (Up-down)*Brick/2;
  123. O = C - (Up-down)*Brick;
  124. H = Max(C,O);
  125. L = Min(C,O);
  126. Plot( C, "", colorGrey50,styleCandle); 
  127. // plot chart
  128. //plotOHLC( rO, rH, rL, rC, "Renko Price " , colorBlack, styleCandle);
  129. GraphXSpace=5;
  130. Title = Name() + " - {{INTERVAL}} {{DATE}} - Renko Chart : Last Value = " + RKC * Brick + ", Brick Size = " + Brick;