以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  关于数组的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=84468)

--  作者:mamakaa
--  发布时间:2015/8/26 16:34:15
--  关于数组的问题
INPUT:N(240,0,999);
VARIABLE:i=0,j=0;
VARIABLE:M[]=0;
ll:=llv(l,N);
lll:=l;
a3:=BARSLAST(l=ll[datacount]);
b3:=datacount-a3;
j3:=1;
tm3:=999999;
for i3=b3[datacount]+1 to datacount do begin
k3:=(lll[i3]-ll[datacount])/j3;
if k3<tm3 then begin
tm3:=k3;
ts3:=J3;
end;
j3:=j3+1;
end;
B1:LINEVALUE(l=ll[datacount] and a3=0,l,BARPOS=datacount-a3[datacount]+ts3,l,0,0),color5454ff;
M:=B1;
q:=UBOUND(B1);//a3的下标
for i=1 to q do BEGIN
if M[i]>500 THEN BEGIN//数组被赋值的时候不要声明数组,要不然就会报错
U[j]:=M[i];//数组用大写
j:=j+1;
end;
end;
y:U+5;
这段程序是通道函数,其中B1是趋势线的一条斜线,我用数组把符合条件的内容付给y,但是数组U有时候有,有时候没有,请问这是什么情况啊?

--  作者:jinzhe
--  发布时间:2015/8/26 16:42:40
--  

http://www.weistock.com/bbs/dispbbs.asp?BoardID=10&ID=30380&replyID=&skin=1

关于数组的问题你看下这个,如果不明白就讲下想法,


--  作者:mamakaa
--  发布时间:2015/8/26 16:52:17
--  
B1是一条斜线,我想截取一部分,比方说B1是从100到200之间的一条斜线,150之前的部分不要,这时候就用到数组,把B1导入数组M,当M[i]>150的时候把数值导入到U数组中,然后把数组U付给y,画出一条直线,但是现在问题是数组U偶尔会有值,但是大部分情况下数组U根本就没有,我用调试一步步执行的,请问是什么情况出现这种问题?



--  作者:mamakaa
--  发布时间:2015/8/26 16:56:13
--  
数组U无法提前定义VARIABLE:U[]=0;系统会崩溃。
--  作者:jinzhe
--  发布时间:2015/8/26 17:02:02
--  
B1这条线具体是什么讲清楚点,然后具体要截取多少长的线?
--  作者:mamakaa
--  发布时间:2015/8/26 17:05:22
--  
INPUT:N(240,0,999);
hh:=hhv(h,N);
hhh:=h;
aa1:datacount,NODRAW;//返回当前k线数
aa:BARSLAST(h=hh[datacount]),NODRAW;
ba:datacount-aa,LINETHICK0;
ja:=1;
tm1:=999999;
for i1=ba[datacount]+1 to datacount do begin
k1:=(hh[datacount]-hhh[i1])/ja;
if k1<tm1 then begin
tm1:=k1;
ts1:=ja;
end;
ja:=ja+1;
end;
A1:LINEVALUE(h=hh[datacount] and aa=0,h,BARPOS=datacount-aa[datacount]+ts1,h,0,0),colorffff54;

cha:=hhv(abs(l-a1),aa);
A2:a1-cha[datacount],colorffff54;

AI:a1-cha[datacount]/2,colorffff54,LINEDASH;
ll:=llv(l,N);
lll:=l;
a3:=BARSLAST(l=ll[datacount]);
b3:=datacount-a3;
j3:=1;
tm3:=999999;
for i3=b3[datacount]+1 to datacount do begin
k3:=(lll[i3]-ll[datacount])/j3;
if k3<tm3 then begin
tm3:=k3;
ts3:=J3;
end;
j3:=j3+1;
end;
B1:LINEVALUE(l=ll[datacount] and a3=0,l,BARPOS=datacount-a3[datacount]+ts3,l,0,0),color5454ff;
chb:=hhv(abs(h-b1),a3);

b2:b1+chb[datacount],color5454ff;
bi:b1+chb[datacount]/2,color5454ff,LINEDASH;
B1是通道函数中的一条线,截取一条直线的一半

--  作者:jinzhe
--  发布时间:2015/8/26 17:11:55
--  
问题正在查,请耐心等待
--  作者:mamakaa
--  发布时间:2015/8/26 17:18:47
--  
可以先定义U数组VARIABLE:U[500]=0,这时候是有U的值了,然后去掉这段代码,那么程序就正确显示出U的数值,关掉程序,再次应用于图,那么数组U又没了,真的很奇怪
--  作者:every
--  发布时间:2015/8/27 9:02:50
--  
在逐K线模式下对数组的转换操作,应该避免在循环语句中使用,因为可能会导致循环对数组数据积累而导致计算出错
--  作者:every
--  发布时间:2015/8/27 9:06:16
--  

可像8楼说的那样定义一个大数组,如果发现大小不够了,通过函数SETUBOUND扩充