以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://www.weistock.com/bbs/list.asp?boardid=2)
----  pel中数组的使用  (http://www.weistock.com/bbs/dispbbs.asp?boardid=2&id=156978)

--  作者:linxingywei
--  发布时间:2017/8/17 16:14:55
--  pel中数组的使用
请问pel中用variable定义了数组, variable:A1[10]=0 , 在使用中可以调整数组的大小(元素个数),或者该数组赋值后有没有语句能再把数组的元素值全都置为0 吗?
--  作者:gxx978
--  发布时间:2017/8/17 16:27:17
--  
参考函数SETUBOUND
--  作者:FireScript
--  发布时间:2017/8/17 16:30:02
--  
如果你定义数组的时候不指定长度,就可以动态扩充数组大小的。楼上那个要注意设置的长度小于当前数组长度的问题。
--  作者:linxingywei
--  发布时间:2017/8/17 16:46:23
--  
请问定义数组的时候不指定长度,是这样设定吗?variable:A1[]
动态扩充数组大小,是用SETUBOUND函数吗?
如果设置的长度小于当前数组长度,会有什么问题?

--  作者:FireScript
--  发布时间:2017/8/17 17:29:02
--  
以下是引用linxingywei在2017/8/17 16:46:23的发言:
请问定义数组的时候不指定长度,是这样设定吗?variable:A1[]
动态扩充数组大小,是用SETUBOUND函数吗?
如果设置的长度小于当前数组长度,会有什么问题?

3楼回复错了。

VARIABLE:t[10]=0;//或者VARIABLE:t[]=0
t:=open-close;

 

上面的代码,就是动态填充的例子。新的元素会不断填充到数值后面。不断扩充数组大小。SETUBOUND的话,如果你现在数组长度是100,你设置成50,你数组就有一半的数据被砍掉了。


--  作者:linxingywei
--  发布时间:2017/8/17 17:38:01
--  
我看SETUBOUND的函数说明,
使用SETUBOUND(x,0),可以使清空数组,但是我用了下,发现这种写法并不能清空数组,之前对数组的赋值,还是保留。

--  作者:FireScript
--  发布时间:2017/8/18 9:17:18
--  
以下是引用linxingywei在2017/8/17 17:38:01的发言:
我看SETUBOUND的函数说明,
使用SETUBOUND(x,0),可以使清空数组,但是我用了下,发现这种写法并不能清空数组,之前对数组的赋值,还是保留。

我看下你代码怎么写的。

VARIABLE:t[]=0;
if open>close then t:=open-close;
a:UBOUND(t);
if a>100 then SETUBOUND(t,0);
s:UBOUND(t);

 

我测试了可以的啊。


--  作者:linxingywei
--  发布时间:2017/8/18 15:09:57
--  
但是我测试下来,清空没有作用。
VARIABLE:t[]=0;
if open>close then t:=open-close;
a:UBOUND(t);
a1:t[1];
if a>100 then SETUBOUND(t,0);
s:UBOUND(t);
s1:t[1];
SETUBOUND(t,20);
s2:t[1];

显示的结果:

图片点击可在新窗口打开查看此主题相关图片如下:2017-08-18_150736.jpg
图片点击可在新窗口打开查看
如果SETUBOUND(t,0), 是把数组清空的话,s 应该显示 0 ,但是显示的和a的值是一样的。
a1和s1取的数组第一个元素值也是相同的。

--  作者:FireScript
--  发布时间:2017/8/18 15:33:41
--  
以下是引用linxingywei在2017/8/18 15:09:57的发言:
但是我测试下来,清空没有作用。
VARIABLE:t[]=0;
if open>close then t:=open-close;
a:UBOUND(t);
a1:t[1];
if a>100 then SETUBOUND(t,0);
s:UBOUND(t);
s1:t[1];
SETUBOUND(t,20);
s2:t[1];

显示的结果:

图片点击可在新窗口打开查看此主题相关图片如下:2017-08-18_150736.jpg
图片点击可在新窗口打开查看
如果SETUBOUND(t,0), 是把数组清空的话,s 应该显示 0 ,但是显示的和a的值是一样的。
a1和s1取的数组第一个元素值也是相同的。

1.我按照你的代码测试,a无法大于100(你那上边是825)。每次扩充数据就报错,数组报“越界错误”,这说明清空是成功的。这个应该是这样的:在数据较小的情况下,阴线数目达不到100,但是一旦扩充数据。就能触发清空操作,然后t[1]这种语句就会报错。

 
图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

2.你那边是不是用了序列模式?只有序列模式才会这样,其中细节我再测试下。我研先究下序列模式下数组的操作问题。回头在这个帖子我会继续回复的。