以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (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是怎么计算出来的,那就算了。