以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  无效值运算的奇异现象  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=64281)

--  作者:无极无名
--  发布时间:2014/4/23 11:11:21
--  无效值运算的奇异现象
输出结果总有些不对的地方,于是只好老老实实把无效值的问题全面测试一下:

当前处在图表第一个周期,代码和结果如下:
COND:ref(date,1);无效值

COND2:cond+1;无效值
COND3:cond*1;无效值

结论1:与无效值进行算术运算,结果依然是无效值

COND4:DATE>cond;有效值=0
cond5:date<>cond;有效值=0

结论2:与无效值进行比较,结果都是0

COND6:2 AND cond,LINETHICK0;有效值=0

cond7:ref(date,2) and cond,linethick0;有效值=0

cond8:2 and 3,linethick0;有效值=1

结论3:金字塔允许数值变量进行逻辑运算,应该是默认了有效值数值=TRUE(1),无效值=FALSE(0),可以解释上述结果;

COND9:3 OR conD;有效值=3

cond10:ref(date,2) OR cond;有效值=0

COND11:2 OR 3,LINETHICK0; 有效值=1

结论4:结论3可以解释cond10和COND11的结果,这里的0和1实际上不是数值,是布尔值,但是不能解释COND9,
其输出结果“3”很显然是一个数值,而不是一个布尔值。这大概金字塔不要求用户区分数值变量和布尔变量,并且两者可以混合运算而产生的奇异现象。

IF DATE<>REF(DATE,1) THEN 
BEGIN
KP1:=OPEN;
END
KP:KP1;有效值,一个不随机的数值。
疑问:KP1的输出是测试重点和目标,就是这个变量不对使得公式结果出错。因为变量KP1没有事先声明初值,
那么在DATE<>REF(DATE,1)满足条件之前,KP1肯定依然没有被赋值,我认为此时KP1
应该是一个无效值,但是实际结果是KP1有值,既不是一个随机数,也不是一个可以解释的数值。请帮忙解释一下。

--  作者:lichenghu
--  发布时间:2014/4/23 11:21:19
--  

1,如果您条件一直不满足,返回一定为无效值

2,如果后面条件满足,则返回值为指标运行完成后最后一次返回值


--  作者:无极无名
--  发布时间:2014/4/23 11:45:41
--  
“看君一句话,胜读十年书”。谢谢!

马上改代码测试
VARIABLE:A=DRAWNULL,KP1=DRAWNULL;


COND2:A+1,LINETHICK0;

COND3:A*1,LINETHICK0;

COND4:DATE>A,LINETHICK0;

cond5:date<>A,linethick0;


COND6:2 AND A,LINETHICK0;

cond7:ref(date,2) and A,linethick0;

cond8:2 and 3,linethick0;

COND9:3 OR cond,LINETHICK0;

cond10:ref(date,2) OR A;

COND11:2 OR 3,LINETHICK0; 

IF COND THEN 
BEGIN
KP1:=OPEN;
END
KP:KP1;
结果完全正确。