开拓者期货期权程序化系统交易论坛

标题: 为什么一样的一条语句执行结果会不一样? [打印本页]

作者: lb3690    时间: 2018-11-3 22:21:59     标题: 为什么一样的一条语句执行结果会不一样?

[attach]37275[/attach]图1比图2多个ok  
其实两个图中的语句是一样的  只不过是and 两边的表达式对调了一下
if (c>o  &&( countIf(close>open,3))>=2){
if (countIf(close>open,3)>=2 and c>o){

//////////////////////////////////////////////////////////完整如下
Vars
  
Begin

if (c>o  &&( countIf(close>open,3))>=2){
//if (countIf(close>open,3)>=2 and c>o){      //两个if 其实一样 但 结果不一样

PlotString("ok","ok");

}

End
作者: zr1624357    时间: 2018-11-3 23:55:12

试了一下,挺奇怪的
不过,编译的时候,有一个警告,if里面有序列函数,可能存在潜在的错误
我把countif拿出来,就好了
作者: lb3690    时间: 2018-11-4 20:02:23

zr1624357 发表于 2018-11-3 23:55
试了一下,挺奇怪的
不过,编译的时候,有一个警告,if里面有序列函数,可能存在潜在的错误
我把countif拿 ...


什么警告?我的有以下警告  但不影响运行
作者: 小米    时间: 2018-11-5 08:38:22

zr1624357 发表于 2018-11-3 23:55
试了一下,挺奇怪的
不过,编译的时候,有一个警告,if里面有序列函数,可能存在潜在的错误
我把countif拿 ...

countif是序列函数,其运算若是放入条件内,是可能会因为前面条件的限制而导致取值受限,从而计算结果异常的。
所以,在不能确保你前面的条件是否会对其有限制时,可先声明一个中间变量,将序列变量的计算结果赋值给中间变量,再将中间变量放入条件中使用即可避免问题。
作者: 小米    时间: 2018-11-5 08:41:37

lb3690 发表于 2018-11-4 20:02
什么警告?我的有以下警告  但不影响运行

语法是通过了。
但是需要用户自己确保该运算的结果符合你的需求。。
如果不能确保,那还是建议也同样使用中间变量的方式来避免问题吧。
作者: lb3690    时间: 2018-11-5 22:07:41

小米 发表于 2018-11-5 08:41
语法是通过了。
但是需要用户自己确保该运算的结果符合你的需求。。
如果不能确保,那还是建议也同样使用 ...

a=close>AverageFC(.........);
b=close>countif(...........);
c=close<=Cum(..);
//写法1:
abc= a and b and c
if (abc){}
//写法2:
if ( a and b and c  ) {}
//写法3:
abc=close>AverageFC(.........)  and  close>countif(...........)  and close<=Cum(..);
if (abc) {}

写法2 写法3 是否合适?

除了  "不要在条件语句,条件语句的判断表达式,循环语句中使用序列函数"  之外 还有哪些跟普通计算机语言不一样的地方.




欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2