Steve Woods' Float Channel Lines.afl
上传用户:shiqiang
上传日期:2009-06-12
资源大小:1289k
文件大小:6k
源码类别:

金融证券系统

开发平台:

Others

  1. //------------------------------------------------------------------------------
  2. //
  3. //  Formula Name:    Steve Woods' Float Channel Lines
  4. //  Author/Uploader: Eric Tangen 
  5. //  E-mail:          
  6. //  Date/Time Added: 2001-12-28 15:47:58
  7. //  Origin:          Steve Woods "The Precision Profit Float Indicator"
  8. //  Keywords:        Float Channel Steve Woods
  9. //  Level:           medium
  10. //  Flags:           indicator
  11. //  Formula URL:     http://www.amibroker.com/library/formula.php?id=145
  12. //  Details URL:     http://www.amibroker.com/library/detail.php?id=145
  13. //
  14. //------------------------------------------------------------------------------
  15. //
  16. //  Channel lines define the highest high/close and lowest low/close during a
  17. //  period of time where the cumulative volume of shares traded equaled the
  18. //  float.
  19. //
  20. //  Implemented entirely in vbScript...is there an easier way to code this
  21. //  using AFL?
  22. //
  23. //------------------------------------------------------------------------------
  24. /* Implementation of Steve Woods' Upper and Lower Float Channels 
  25.    in AmiBroker...
  26. file: <put your file name here so you can see the name in the
  27. AFL editor>  
  28.   Plots channel bars of highest high and lowest low during the time
  29.   it took for the cumulative volume to be equal to the float
  30.   upper channel uses the highest high and the highest close
  31.   lower channel using lowest low and the lowest close 
  32.   (using the close is a new wrinkle for this indicator-
  33.    Steve Wood's uses only the high and the low.
  34.   RESTRICTIONS: requires QuotesPlus database for shares float data
  35. */
  36. EnableScript("VBscript");
  37. // this is to show only one entry per stock //
  38. ticker = Name();
  39. AFL_float =  GetExtraData("SharesFloat");
  40. <%
  41. ' VBscript code begins here
  42. ' the 1000000 factor reconciles QP float with QP vol units
  43. vbfloat = 1000000*AFL("AFL_float") 
  44. vbvol = AFL("V")
  45. ' price Array inputs
  46. vbH = AFL("H")
  47. vbL= AFL("L")
  48. vbC = AFL("C")
  49. ' it looks like the only way to create/initialize
  50. ' an array in VBscript is to set it 
  51. ' equal to an AFL Array
  52. ' so for arrays that I will pass back to AFL from  
  53. ' vbscript, I will set them equal to 
  54. ' OpenInterest, A field that isn't used by stock guys
  55. vbFTdays= AFL("OI") 
  56. ' Create Channel Outputs Arrays
  57. vbUCUH = AFL("OI") ' upper Channel using Hi
  58. vbUCUC = AFL("OI") ' upper Channel using Cl
  59. vbLCUL = AFL("OI") ' lower Channel using Lo
  60. vbLCUC = AFL("OI") ' lower Channel using Cl
  61. ' initialize the vbscript arrays 
  62. '(Belt+suspenders precaution if they 
  63. ' aren't zeroed from the QP database)
  64. For i = Ubound(vbFTdays) to 0 step  -1
  65.     vbFTdays(i) = 0
  66.     vbUCUH(i) = 0
  67.     vbUCUC(i) = 0
  68.     vbLCUL(i) = 0
  69.     vbLCUC(i) = 0
  70. Next
  71. 'calculates the number of days it took looking backward from
  72. 'today for the float to turn over...
  73. 'implemented as A Do While loop (for the Volume summation)
  74. 'nested Inside A For-Next loop (to do this calculation for each
  75. 'bar loaded)
  76. ' zero = most distant bar, Ubound = most recent bar = largest positive integer
  77. For i = Ubound(vbvol) to 0 step  -1
  78. ' vbFTdays array contains the number of days for the 
  79. ' float to turn over
  80. VbFTdays(i) = 0
  81. Vbtempvolsum = 0
  82. j = i
  83. VbcountFTdays = 0
  84. ' Add vol till you get one float
  85. Do While Vbtempvolsum < Vbfloat
  86.     Vbtempvolsum = Vbtempvolsum+Vbvol(j)
  87.     VbcountFTdays = VbCountFTdays+1
  88.     j = j-1  ' decrement to set the index to the prior bar
  89.     If j <= 0 Then
  90.         Exit Do
  91.     End If
  92. Loop
  93. If Vbtempvolsum >= Vbfloat Then
  94. VbFTdays(i) = VbcountFTdays ' successful float turnover calc
  95. Else  
  96. VbFTdays(i) =0   ' unsuccessful float turnover calc - insufficient number of bars loaded
  97. End If
  98. Next 
  99. ' end of float turnover bars calc
  100. ' begin the float channels price calc
  101. ' implemented by A for-next loop nested Inside another For-Next Loop
  102. ' Outside loop is for the whole array, Inside loop scans for Min/Max
  103. ' during the length of bars for A float turnover (float turnover bars
  104. ' are in the vbFTdays array
  105. ' zero = most distant bar, Ubound = most recent bar = largest positive integer
  106. For k = Ubound(vbFTdays) to 0 step  -1
  107. If vbFTdays(k) = 0 Then ' zero in this array means days for float turnover isn't calculatable (calc would overrun number of bars loaded)
  108. Exit For
  109. End IF
  110. vbTempFTdays = vbFTdays(k)
  111. ' initialize scratchpad registers for minimum + maximum comparisons
  112. VbTempUpHi = 0 ' Upper Ch using Highs
  113. VbTempUpC = 0 ' Upper Ch using Closes
  114. VbTempBotLo = 1E8 ' Bottom Channel using Lows
  115. VbTempBotC = 1E8 ' Bottom Channel using Lows
  116. For m = k-vbTempFTdays to k step 1 ' this scans the array during an float turnover interval
  117. ' four conditionals to check in creating the four float channels
  118. If  vbH(m) > VbTempUpHi  Then
  119. VbTempUpHi = VbH(m)
  120. VbUCUH(k) =  VbH(m) 
  121. End If
  122. If  vbC(m) > VbTempUpC  Then
  123. VbTempUpC = VbC(m)
  124. VbUCUC(k) =  VbC(m) 
  125. End If
  126. If  vbL(m) < VbTempBotLo  Then
  127. VbTempBotLo = VbL(m)
  128. VbLCUL(k) =  VbL(m) 
  129. End If
  130. If  vbC(m) < VbTempBotC  Then
  131. VbTempBotC = VbC(m)
  132. VbLCUC(k) =  VbC(m) 
  133. End If
  134. Next
  135. Next
  136. AFL.Var("UCUH") = VbUCUH
  137. AFL.Var("UCUC") = VbUCUC
  138. AFL.Var("LCUL") = VbLCUL
  139. AFL.Var("LCUC") = VbLCUC
  140. AFL.Var("Floatout") = 1000000*vbfloat
  141. AFL.Var("FTdays") = vbFTdays
  142. %>
  143. // graphing //
  144. MaxGraph = 5;
  145. Graph0 = Close;
  146. Graph0Style=64;
  147. Graph0Color=1;
  148.  
  149. Graph1 = UCUH;
  150. Graph2 = UCUC;
  151. Graph3 = LCUL;
  152. Graph4 = LCUC;
  153. Graph1Style = Graph2Style = 4;
  154. Graph3Style = Graph4Style = 4;
  155. Graph1Color = 5;
  156. Graph2Color = 11;
  157. Graph3Color = 4;
  158. Graph4Color = 9;
  159. Title=Name()+" "+FullName()+" //Steve Wood's Float Channels// Close:"+WriteVal(Graph0)+" Upper Channels:"+WriteVal(Graph1) + WriteVal(Graph2)+" Lower Channels:" +WriteVal(Graph3)+WriteVal(Graph4) + " Float Shares (M): " +WriteVal(GetExtraData("SharesFloat"));