以文本方式查看主题

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

--  作者:BruceX
--  发布时间:2013/7/2 20:49:38
--  问题请教老师

fc:=close;//定义一个序列变量,相当于是一个数组
fl:=low;
fh:=high;
fo:=open;
r:=0;
for i=datacount downto datacount-30 do  //遍历可能的所有K线
    BEGIN
    my_low:=fl[i];
    my_open:=fo[i];
    my_close:=fc[i];
    my_high:=fh[i];
if my_close>my_open then

BEGIN
kk[r]:=fc[i];
r:=r+1;
END;
END;


kk_1:kk[0];
kk_2:kk[1];
kk_3:kk[2];
kk_4:kk[3];
kk_5:kk[4];

 

问题:为什么kk_1的数值和kk_2是一样的,直观看,KK_1应该有另外一个数值,却没有显示


--  作者:王锋
--  发布时间:2013/7/2 22:11:39
--  
按F8启动单步跟踪看看
--  作者:BruceX
--  发布时间:2013/7/4 19:43:45
--  
没发现问题啊,当我把循环数量变到很小,它就可以把最近的满足条件的K线显示出来,循环数量加上去后,第一个和第二个总是相等,而满足条件的一根K线总是没显示出来,是什么原因呢?
--  作者:王锋
--  发布时间:2013/7/4 21:34:42
--  
请把你具体数量加小就正常的详细步骤说一下
--  作者:BruceX
--  发布时间:2013/7/5 8:40:00
--  

fc:=close;//定义一个序列变量,相当于是一个数组
fl:=low;
fh:=high;
fo:=open;
r:=0;
for i=datacount downto datacount do  //只计算第一根K线

    BEGIN
    my_low:=fl[i];
    my_open:=fo[i];
    my_close:=fc[i];
    my_high:=fh[i];
if my_close>my_open then

BEGIN
kk[r]:=fc[i];
r:=r+1;
END;
END;


kk_1:kk[0];

 

//这个kk[0]就没问题,确实是最近一根收盘大于开盘的K线

 

fc:=close;//定义一个序列变量,相当于是一个数组
fl:=low;
fh:=high;
fo:=open;
r:=0;
for i=datacount downto datacount-30 do  //遍历前30根K线
    BEGIN
    my_low:=fl[i];
    my_open:=fo[i];
    my_close:=fc[i];
    my_high:=fh[i];
if my_close>my_open then

BEGIN
kk[r]:=fc[i];
r:=r+1;
END;
END;


kk_1:kk[0];

kk_2:kk[1];

 

//此时,kk[0]的值不是最近一根收盘大于开盘的K线的收盘价,而是与kk[1]一样,这是怎么回事?


--  作者:BruceX
--  发布时间:2013/7/14 15:13:31
--  老师,这个问题是什么原因啊
老师,这个问题是什么原因啊?
--  作者:王锋
--  发布时间:2013/7/14 15:55:06
--  

初步看了一下,你的数组使用存在问题,金字塔的数组下标有效值是从1开始的,而你是从0开始使用。

序列模式下对数组的这样的使用默认会执行从1开始,因此用0和1下标效果是一样的。

 

帮你这样改好了

 

VARIABLE:kk[30]=0; //你应该有个良好的使用习惯,数组在使用前先初始化

fc:=close;//定义一个序列变量,相当于是一个数组
fl:=low;
fh:=high;
fo:=open;
r:=1;
for i=datacount downto datacount-30 do  //遍历前30根K线
    BEGIN
    my_low:=fl[i];
    my_open:=fo[i];
    my_close:=fc[i];
    my_high:=fh[i];
if my_close>my_open then

BEGIN
kk[r]:=fc[i];
r:=r+1;
END;
END;


kk_1:kk[1];

kk_2:kk[2];


--  作者:BruceX
--  发布时间:2013/7/15 9:41:34
--  
谢谢老师,那个数组使用时要先初始化,那个变量需要吗?
--  作者:BruceX
--  发布时间:2013/7/15 9:45:56
--  
是不是无法定义空数组VARIABLE:kk[]=0;