欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 无效值运算的奇异现象

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有2393人关注过本帖树形打印复制链接

主题:无效值运算的奇异现象

帅哥哟,离线,有人找我吗?
无极无名
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:273 积分:365 威望:0 精华:1 注册:2011/4/13 11:57:13
无效值运算的奇异现象  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:5895 积分:3774 威望:0 精华:0 注册:2012/1/1 0:00:01
  发帖心情 Post By:2014/4/23 11:21:19 [只看该作者]

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

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



金字塔—专业程序化交易量化投资平台

客户服务部

-----------------------------------------------------------

欢迎您参加我公司的技术培训,具体培训需求请发邮件到service@weistock.com

您的宝贵建议或者投诉,请发往邮箱:weiwei@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
无极无名
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:273 积分:365 威望:0 精华:1 注册:2011/4/13 11:57:13
  发帖心情 Post By: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;
结果完全正确。


 回到顶部