以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  自定义函数传入变量问题  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=10795)

--  作者:matador_liu
--  发布时间:2012/3/28 1:34:27
--  自定义函数传入变量问题
能否实现如下功能,如何实现:
 
写一个逐周期自定义函数CF(Formula, Series), series既可以传入C,又可以传入(H+L)/2等,这样才能体现函数的价值嘛:)

--  作者:guotx2010
--  发布时间:2012/3/28 8:48:13
--  
既然是参数,传入什么,不是你自己说了算了吗?
--  作者:matador_liu
--  发布时间:2012/3/28 11:44:15
--  
 可是在K线模式下,函数中Series(n)的写法报错,是不是K线模式不能传入数组啊,还是我的写法有问题?
--  作者:matador_liu
--  发布时间:2012/3/28 11:48:18
--  
比如说在K线模式下 UBound(Series)  类型不匹配,是不是说明Series不能是个数组啊。那我传入close、(H+L)/2也就不能达到所期望的那样了。

--  作者:admin
--  发布时间:2012/3/28 11:54:00
--  
将你的公式调用方式,及VBA函数代码贴过来我们看看
--  作者:matador_liu
--  发布时间:2012/3/28 12:17:09
--  
 很简单,比如我想求最近两个数据的最大值,如以下代码:

Function CU_HHV(Formula,Series)
    \'改为逐周期调用
    If Formula.WorkMode = 1 Then
        Exit Function
    End If

    DataCount = UBound(Series)
    IF Series(DataCount) > Series(DataCount-1) THEN \'Function.Max(Series(DataCount), Series(DataCount-1))
        CU_HHV = Series(DataCount)
    ELSE
        CU_HHV = Series(DataCount - 1)
    END IF
End Function

调用的时如下:
CU_HHV(H)  求高点最大值
CU_HHV(L)  求低点点最大值

--  作者:admin
--  发布时间:2012/3/28 13:21:12
--  

问题主要出在,在逐K线模式下,你传递过来的变量都是单值数据而非数组,

DataCount = UBound(Series)
你这样来调用取数组的数量大小是错误的,正确的方法是程序内部使用一个数组,保存传递过来的数据,然后进行对比


--  作者:matador_liu
--  发布时间:2012/3/28 13:43:09
--  
不知您能看明白我的需求没,能不能帮忙写个小小的示例,关键代码即可。
即我想写一个函数能在逐K线模式下用,可传入不同变量(如Close、如High等),函数中可以调用这个变量不同时期的值以进行计算。
多谢!!

--  作者:admin
--  发布时间:2012/3/28 14:18:37
--  

稍后给你做个范例


--  作者:matador_liu
--  发布时间:2012/3/28 14:28:51
--  
非常感谢!!图片点击可在新窗口打开查看