以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- VB自定义函数问题 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=78111) |
-- 作者:wjd -- 发布时间:2015/4/29 10:06:39 -- VB自定义函数问题 VB自定义函数,为逐K线模式,P1为序列变量,如调用时P1为CLOSE
Function CROSSUNDER(Formula,P1)
End Function
出错,显示为:编译器错误13,类型不匹配\'P1\' 如何处理? |
-- 作者:王锋 -- 发布时间:2015/4/29 11:21:10 -- 逐K线模式下,P1参数不是序列数组,而是一个单值变量,你这么用所以会报错。 |
-- 作者:wjd -- 发布时间:2015/4/29 12:01:41 -- 逐K线模式下,函数就不能输入序列变量吗?如果确实需要,如何处理?用数组?请举个例子 |
-- 作者:王锋 -- 发布时间:2015/4/29 12:33:33 -- 给你做个计算MA均线的例子,CLOSE参数是要计算的均线数据,N为周期 在PEL语言下使用范例: ddd:cu_ma3(close,5);
下面是VBA代码 Dim data \'创建一个外部的全局变量 Function CU_MA3(Formula,CLOSE,N) CU_MA3=data.Average End Function |
-- 作者:王锋 -- 发布时间:2015/4/29 13:32:29 -- 此外提醒,不要在逐K线仅刷最后K线的模式下使用,因为该模式是最后K线才调用该自定义函数一次,会导致计算出错,仅刷最后K线模式算法需要做特殊更改才行 |
-- 作者:wjd -- 发布时间:2015/4/29 14:56:46 -- 谢谢。我正在学习,举例来说, 我要在逐K线模式下实现一个是否下穿函数 Function CrossUnder(Formula , P1 , P2) 如当前P1下穿P2,则返回1,否则返回0 P1、P2为序列,应如何处理? 不需要具体写是否下穿部分,只要P1、P2两个序列如何处理 是否为定义两个外部全局变量数组Array_P1、Array_P2? 在函数中 Array_P1.AddBack(P1) Array_P2.AddBack(P2) 疑问:设布林线上轨为Top;布林线下轨为Bottom; 在公式中: is1 = CrossUnder(CLOSE,Top) \'是否上穿 is2 = CrossUnder(CLOSE,Bottom) \'是否下穿
这样定义的两个数组不就乱了吗? |
-- 作者:wjd -- 发布时间:2015/4/29 15:02:00 -- 另外,如为: i1 := cu_ma3(CLOSE,5) i2 := cu_Ma3(CLOSE,10) .... j1 := cu_ma3(CLOSE,5) 多处调用了cu_ma3,数组不也乱了吗? |
-- 作者:王锋 -- 发布时间:2015/4/29 15:10:57 -- 编程需要一定的逻辑思维,你的问题该这样解决
Function CrossUnder(Formula , P1 , P2, GETTYPE)
Array_P1.AddBack(P1) Array_P2.AddBack(P2)
IF GETTYPE = 0 THEN \'处理上穿判断 END IF
IF GETTYPE = 1 THEN \'处理下破判断 END IF |
-- 作者:wjd -- 发布时间:2015/4/29 15:20:09 -- 另外,如为: i1 := cu_ma3(CLOSE,5) i2 := cu_Ma3(CLOSE,10) .... j1 := cu_ma3(CLOSE,5) 多处调用了cu_ma3,数组不也乱了吗? |
-- 作者:王锋 -- 发布时间:2015/4/29 20:27:20 --
这种情况你不会使用2个不同的自定义函数? 里面将数组也分别使用2个分别去统计不就行了? |