以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  [讨论]金字塔IF语句的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=3188)

--  作者:小小虾米
--  发布时间:2010/10/11 12:28:12
--  [讨论]金字塔IF语句的问题

我的代码如下:

    Tsell(1,0,LMT, 卖一价-MINDIFF, 0, acct);

    sleep(1000);

    DEBUGFILE(\'e:\\logdir\\test.txt\',\'(03) TBuyHoldingEx=%.0f\', TBuyHoldingEx(acct, \'\', 1));
    DEBUGFILE(\'e:\\logdir\\test.txt\',\'(03) TIsRemainEx=%.0f\', TIsRemainEx(0, acct, \'\'));

    IF( TBuyHoldingEx(acct, \'\', 1=0)  )THEN

    BEGIN

        DEBUGFILE(\'e:\\logdir\\test.txt\',\'(03) 平仓成功......\', 0);

        ......

    END

我的日志如下:

    2010-10-11 11:57:59.406    (03) TBuyHoldingEx=1

    2010-10-11 11:57:59.406    (03) TIsRemainEx=0

    2010-10-11 11:57:59.406    (03) 平仓成功......

    显然,这里 IF( TBuyHoldingEx(acct, \'\', 1=0)  ) 返回结果为真,事实上,2010-10-11 11:57:59.406平仓是不会成功的,这里到底出了什么错呢?

    我再次将 IF( TBuyHoldingEx(acct, \'\', 1=0)  ) 语句改为:IF TBuyHoldingEx(acct, \'\', 1=0)  ,现在结果正确!原来,金字塔程序将语句:

IF( TBuyHoldingEx(acct, \'\', 1=0)  )

翻译成了 IF(X,A,B)函数!图片点击可在新窗口打开查看


--  作者:admin
--  发布时间:2010/10/11 12:30:56
--  

对于千奇百怪的用户编写方式,金字塔不可能每个语句都能100%精确识别错误语法,主要还要靠用户自己平时的编写的良好习惯,不能一出问题就去怪软件本身


--  作者:小小虾米
--  发布时间:2010/10/11 13:05:15
--  
以下是引用admin在2010-10-11 12:30:56的发言:

对于千奇百怪的用户编写方式,金字塔不可能每个语句都能100%精确识别错误语法,主要还要靠用户自己平时的编写的良好习惯,不能一出问题就去怪软件本身

 

如果你这样认为,算我没说。


--  作者:fly
--  发布时间:2010/10/11 13:22:08
--  

楼主这样写,IF TBuyHoldingEx(acct, \'\', 1=0)  

是有误的,可以参见TBuyHoldingEx的参数设置.最后一个参数写法,1=0这都是一个表达式了

 

金字塔的IF语句有两种,一种简单的就是紧跟其后带括号的IF(条件,A,B);

                             一种是IF  条件   THEN

楼主之前应该是不小心误写成前一种了.


--  作者:小小虾米
--  发布时间:2010/10/11 14:45:10
--  
以下是引用fly在2010-10-11 13:22:08的发言:

楼主这样写,IF TBuyHoldingEx(acct, \'\', 1=0)  

是有误的,可以参见TBuyHoldingEx的参数设置.最后一个参数写法,1=0这都是一个表达式了

 

金字塔的IF语句有两种,一种简单的就是紧跟其后带括号的IF(条件,A,B);

                             一种是IF  条件   THEN

楼主之前应该是不小心误写成前一种了.

呵呵,我贴的时候不是从源码里拷贝过来的,是直接写的,可能是我写的有误,不过你们可以测试一下,

图片点击可在新窗口打开查看

     图片点击可在新窗口打开查看

的结果是不一样的。

这样也许更能说明问题。

[此贴子已经被作者于2010-10-11 14:53:52编辑过]

--  作者:wattwei
--  发布时间:2010/10/11 15:09:36
--  
按道理无论如何不会解析出错,公式不具有二义性。
--  作者:fly
--  发布时间:2010/10/11 15:29:05
--  

我试了楼主说的(条件简化了一下,呵呵),

差别就在于IF后面是否紧跟括号,如果IF后面是:空格+括号,则解析就上楼主想要的.

                                        如果IF后面是:括号,就成了IF(条件,A,B);

 

所以,不能忽视----一个空格的价值,呵呵