以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://www.weistock.com/bbs/list.asp?boardid=2) ---- 疑似BUG: 序列变量初始化不了 (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=4817) |
|
-- 作者:paulshen -- 发布时间:2011/1/13 15:54:24 -- 疑似BUG: 序列变量初始化不了 可运行的公式如下: //用于后台交易的优化 //时间条件 //仓位条件 //适应周期和序列两种模式 D:=datacount; for I=5 to datacount do begin
{开平仓条件} {平仓条件} //初始化仓位全局变量 //--------------------交易指令----------------------------- //多单止损 - 初始止损信号 //平多开空 //空单止损 - 初始止损信号 DEBUGFILE(FILEPATH,\'=======\',0); DEBUGFILE(FILEPATH,\'STHH:%.2f\',STHH); //----------------------------------------------------- 如果增加序列变量初始化(标为红色),则输出结果如下: 2011-01-13 15:25:03.801 =======
如上所示,STHH和STLL为空值。
如果去掉初始化行,则可得到正常值: 2011-01-13 15:22:43.151 =======
请帮忙看看,是什么原因。变量初始用法有问题? |
|
-- 作者:阿火 -- 发布时间:2011/1/13 16:13:38 -- variable : 申明并初始化变量;variable 为全局变量申明语句,一般用在逐周期计算模式。因为variable变量在序列模式与普通的变量是没有区别的。
在序列模式,变量初始化就直接赋值为0,或者干脆不用,直接删除 红色那一行就好了 [此贴子已经被作者于2011-1-13 16:13:57编辑过]
|
|
-- 作者:paulshen -- 发布时间:2011/1/13 16:17:46 -- 我的本意就是做全局变量申明,也希望初始成0,为了避免由于没做初始化可能带来的问题。
这里主要问题是做了变量申明以后,STHH和STLL都成了空值。 [此贴子已经被作者于2011-1-13 16:18:37编辑过]
|
|
-- 作者:paulshen -- 发布时间:2011/1/13 17:34:12 -- 问题还是出在DEBUGFILE上,对STLL和STHH做了全局声明以后就无法正常输出了。
用循环打出STLL和STHH的序列值看都是正常的。 |
|
-- 作者:paulshen -- 发布时间:2011/1/13 17:36:29 -- 或者把这两行 DEBUGFILE(FILEPATH,\'STHH:%.2f\',STHH); DEBUGFILE(FILEPATH,\'STHH:%.1f\',STHH[D]); 也是可以正常输出。其中D:=datacount; |
|
-- 作者:paulshen -- 发布时间:2011/1/13 17:40:58 -- 还有做了全局申明以后, cross函数也无法正常调用STLL和STHH了。BO,BC,SO, SC都成了-1。 |
|
-- 作者:阿火 -- 发布时间:2011/1/13 22:48:30 -- 尝试把 variable:I=0;
改成 variable:I=0;
位置放在input之后:
我这里测试了一下,可以输入正确结果 2011-01-13 22:34:59.859 =======
runmode、varibale、input等语句最好放在程序前面吧。 [此贴子已经被作者于2011-1-13 22:51:33编辑过]
|
|
-- 作者:paulshen -- 发布时间:2011/1/14 11:48:12 -- 疑似BUG: 序列变量初始化不了 这样写的确可以了申明了,知不知道什么申明时加下标不行?我看到运行模式网页里是那么用的。 |
|
-- 作者:fly -- 发布时间:2011/1/14 14:21:07 -- 如果是个已经固定了值的数组,比如S[10]=0,是可以的.
估计是楼主用到了datacount,随着行情的变化,是个不断变化的值. |
|
-- 作者:大灰狼 -- 发布时间:2011/1/14 14:47:44 -- 变量的申明和初始化是两码事。 尤其是数组的申明和初始化是要严格区分的 |