以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- variable数组赋值问题 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=166577) |
-- 作者:uranusmoon -- 发布时间:2018/11/20 12:29:40 -- variable数组赋值问题 后台模型。定义的variable型数组AAA,BBB,CCC,DDD,采用UBOUND函数获取各数组最大下界,若数组不为空,则输出数组角标1~ubound(xxx)的所有值。调试中发现的问题:i为数组最大角标情况下,为什么有时候数组xxx[i]与xxx输出的值不一样。调试记录如下: 2018-11-20 11:11:34.199 i=: 1 AAA[i]: -0 AAA: 43 2018-11-20 11:11:34.200 i=: 1 BBB[i]: -0 BBB: 43 2018-11-20 11:11:34.200 i=: 1 CCC[i]: -0 CCC: 46 2018-11-20 11:11:34.200 i=: 1 DDD[i]: -0 DDD: 46 2018-11-20 11:11:43.244 i=: 1 AAA[i]: -0 AAA: 43 2018-11-20 11:11:43.245 i=: 1 BBB[i]: -0 BBB: 43 2018-11-20 11:11:43.245 i=: 1 CCC[i]: -0 CCC: 46 2018-11-20 11:11:43.246 i=: 1 DDD[i]: -0 DDD: 46 2018-11-20 11:11:52.517 i=: 1 AAA[i]: -0 AAA: 43 2018-11-20 11:11:52.517 i=: 1 BBB[i]: -0 BBB: 43 2018-11-20 11:11:52.518 i=: 1 CCC[i]: 54 CCC: 54 2018-11-20 11:11:52.518 i=: 1 DDD[i]: 54 DDD: 54 [此贴子已经被作者于2018/11/20 12:30:48编辑过]
|
-- 作者:FireScript -- 发布时间:2018/11/20 13:45:16 -- 代码贴下,这个记录我看不出具体什么情况。 |
-- 作者:uranusmoon -- 发布时间:2018/11/20 17:05:52 -- 代码没什么可看的啊 {定义数组} VARIABLE:AAA[]=1; {数组运算} …… {获取数组长度} NdataAAA:=UBOUND(AAA); {调试输出} if NdataAAA>0 and islastbar then begin
for i=1 to NdataAAA do begin
DEBUGFILE(\'C:\\RCD\\RECORD.TXT\',\'i=: \'&numtostr(i,0)&\' AAA[i]: \'&numtostr(AAA[i],0)&\' AAA: \'&numtostr(AAA,0),1000);
end end |
-- 作者:FireScript -- 发布时间:2018/11/20 17:24:55 -- 是不是数组是动态变化的,按照你上面代码的话,i怎么一直输出都是1?你这个数组是不是中间还有赋值之类的操作?你上面代码看不出来问题,只是输出语句而已。 |
-- 作者:uranusmoon -- 发布时间:2018/11/20 17:53:39 -- i=1,表示数组只包含一个数啊。中间根据算法有可能多次赋值,。若没有赋值,则UBOUND(AAA)=0,就不输出了。问题在于从输出结果看,AAA[UBOUND(AAA)]有时候等于0(值不对),而AAA的输出是对的。从数组的操作讲,AAA的输出值应该是等于AAA[UBOUND(AAA)]啊。 后台轮询,逐k线。
[此贴子已经被作者于2018/11/20 17:54:46编辑过]
|
-- 作者:uranusmoon -- 发布时间:2018/11/20 18:01:27 -- 再贴一段记录: 2018-11-20 14:55:30.333 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:55:30.334 i=: 1 DDD[i]: 64 DDD: 64 2018-11-20 14:55:40.392 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:55:40.392 i=: 1 DDD[i]: 64 DDD: 64 2018-11-20 14:55:50.496 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:55:50.497 i=: 1 DDD[i]: 64 DDD: 64 2018-11-20 14:56:00.981 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:56:00.982 i=: 1 DDD[i]: 64 DDD: 64 2018-11-20 14:56:12.257 i=: 1 CCC[i]: -0 CCC: 64 2018-11-20 14:56:12.258 i=: 1 DDD[i]: -0 DDD: 64 2018-11-20 14:57:19.040 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:57:19.040 i=: 1 DDD[i]: 64 DDD: 64 2018-11-20 14:57:30.124 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:57:30.125 i=: 1 DDD[i]: 64 DDD: 64 2018-11-20 14:57:41.365 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:57:41.366 i=: 1 DDD[i]: 64 DDD: 64 2018-11-20 14:57:52.301 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:57:52.301 i=: 1 DDD[i]: 64 DDD: 64 2018-11-20 14:58:02.579 i=: 1 CCC[i]: 64 CCC: 64 2018-11-20 14:58:02.579 i=: 1 DDD[i]: 64 DDD: 64 可以看到CCC[i]和DDD[i]有一次忽闪=-0,然后恢复到正确值64。 请高人解释一下原因 |
-- 作者:FireScript -- 发布时间:2018/11/21 16:12:42 -- 提供完整代码,我们本地重现下。没有代码的话,无从下手的。 |
-- 作者:uranusmoon -- 发布时间:2018/11/21 19:40:50 -- 跟代码有什么关系啊,贴出来几千行代码有什么用?上面说的够清楚了,这是纯粹关于数组输出值的问题,我一直以为直接用数组名不带角标输出的值,就是数组最后一个数据的值。但上面的数据颠覆了我的认知,仅包含一个数据的数组AAA,为什么有时AAA[1]=-0,AAA不等于AAA[1]。如果版主认为需要了解AAA是怎么计算出来的,那就算了。 |