以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- 自定义函数如何在逐K模式下返回公式中可以使用的数组,这回有代码,请管理员帮我看看 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=69426) |
-- 作者:ywbab -- 发布时间:2014/8/30 18:46:30 -- 自定义函数如何在逐K模式下返回公式中可以使用的数组,这回有代码,请管理员帮我看看 Function vba_HHV2(Formula, Number, ReturnValue) \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 Dim History \'日线数据对象 Dim Max_l \'最低价中的最高价 Dim Min_l \'最低价中最低价 Dim Max_l_Number \'最低价中的最高价_所在的位置 Dim Min_l_Number \'最低价中最低价_所在的位置 Dim Max_l_Day \'最低价中的最高价_距离当前的天数 Dim Min_l_Day \'最低价中最低价距_离当前的天数 Dim Temp_hl \'中间变量 Dim Temp_sum \'中间变量 Dim ll Dim L_Arr Dim k_tmp vba_HHV2 = 0 If Number <= 10 Then Exit Function \'-=========================================== \'-============初始化变量================== Max_l = 0 Min_l = 0 Max_l_Number = 0 Min_l_Number = 0 Max_l_Day = 0 Min_l_Day = 0 \'-=================================== Set History = Formula.ParentGrid.GetHistoryData() \'获取日线数据对象 \'-=========================== \'取最后一天的收盘价 \' Close = History.Close(History.Count-1) \'-========================================= ReDim L_Arr(1) ll = History.Low(Number) \'-=======下面涉及往前找最高价================== If Number < 10 Then Exit Function Max_l = History.Low(Number - 1) Min_l = History.Low(Number - 1) For i = Number - 1 To 0 Step -1 Temp_hl = History.Low(i) p_Temp_hl = Temp_hl * 1.01 Temp_sum = Temp_sum + 1 If p_Temp_hl >= Max_l Then If Temp_hl >= Max_l Then Max_l = Temp_hl Max_l_Day = Temp_sum k_tmp = 0 Else k_tmp = k_tmp + 1 End If Else k_tmp = k_tmp + 1 End If If k_tmp > 3 Then Exit For Next L_Arr(0) = Max_l L_Arr(1) = Max_l_Day vba_HHV2 = L_Arr \'返回数组 ReturnValue = 8 End Function \'-====================公式代码======================== VARIABLE: PARR[2]=0; po:=0; PARR:=vba_HHV2(Number-1,po); L_out3:PARR[1]; L_out4:PARR[2]; uy:po; \'-==========上面在公式中的输出均为零!!!!================= 请求管理员看看问题在哪????????? [此贴子已经被作者于2014/8/30 18:48:14编辑过]
|
-- 作者:马良 -- 发布时间:2014/8/30 23:09:11 -- 逐k线模式是不能返回数组的 |