以文本方式查看主题

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

--  作者:wangguanjin
--  发布时间:2013/12/21 23:19:45
--  marketdata.STKINDI 在自定义函数中的使用问题

我定义了一个自定义函数,里面加入如下代码:

Function MyFun(Formula,StockIDStr)
    \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码
    Set Formula1 = marketdata.STKINDI("600217","SH","ma(5,10,20,60)",0,5)
    MyFun = Formula1.GetBufData("ma1",Formula1.DataSize-1)
End Function

 

我在逐K线模型下运行的交易系统中调用了MyFun,为什么在测试的时候,函数 返回的结果总是一个数,没有变化


--  作者:王锋
--  发布时间:2013/12/22 1:13:54
--  
600217 看看你引用的这个品种的历史数据补齐了没有
--  作者:wangguanjin
--  发布时间:2013/12/22 20:31:17
--  
你好,boss, 600217 数据已经补齐了的,啥子问题捏?
--  作者:王锋
--  发布时间:2013/12/23 18:21:09
--  

你的代码就是返回的一个数,如果你需要一个数组变量,那么你应该在循环语句中使用。


--  作者:wangguanjin
--  发布时间:2013/12/23 21:17:11
--  
boss,您好!

在逐K线模式下,每根K线调用它的时候,返回的应该是对应当前K线的值, 我的意思是它返回的值不会发生变化,是固定的。

--  作者:王锋
--  发布时间:2013/12/23 22:32:46
--  
你还是好好检查 marketdata.STKINDI 你的参数引用吧
--  作者:wangguanjin
--  发布时间:2013/12/24 22:52:20
--  

我把完整代码贴出来吧,代码如下:

 

// 以下代码为PLA语言代码,在逐K线模式下运行

VARIABLE:clo[] = 0;

VARIABLE:clo2[] = 0;

clo := STKINDIEX(\'600000\',\'MA.MA1(5)\',0,6,0,1000);

clo2 := MyFun(); // MyFun为 VBA写的自定义函数

 

VBA函数如下:

Function MyFun(Formula)
    \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码
    Set Formula1 = marketdata.STKINDI("600000","SH","ma(5)",0,5)
    MyFun = Formula1.GetBufData("ma1",Formula1.DataSize-1)

End Function

 

问题是:我用产品600000的日K线下进行调试,发现clo数组和clo2数组的内容不一致,应该一样才对啊


[此贴子已经被作者于2013/12/24 22:53:06编辑过]

--  作者:王锋
--  发布时间:2013/12/25 16:27:26
--  

PEL中你使用STKINDIEX对引用的数据做了1000根限定。

而你VBA的marketdata.STKINDI未作限定,请仔细看看marketdata.STKINDI的帮助说明,加上数量限定就好了。