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

标题: 编写了一个布尔型IIFBool自定义函数,但编译时出错 [打印本页]

作者: tygk    时间: 2020-5-20 17:21:57     标题: 编写了一个布尔型IIFBool自定义函数,但编译时出错

本帖最后由 tygk 于 2020-5-20 17:24 编辑

Vars
    BoolSeries a;
    BoolSeries b;
    BoolSeries c;
       
Begin
    if(a) {Return b;} else {Return c;}
End


编译时提示:
Return语句的返回值类型与公式定义的返回值类型不符。

这是什么原因?如何改进使其通过编译?

作者: Yuen_Lee    时间: 2020-5-21 12:51:58

返回值应是Bool型,不能为BoolSeries。要想得到b,c的返回值,可使用BoolRef b,c来定义。
作者: tygk    时间: 2020-5-21 13:06:07

Yuen_Lee 发表于 2020-5-21 12:51
返回值应是Bool型,不能为BoolSeries。要想得到b,c的返回值,可使用BoolRef b,c来定义。 ...

改为:

Vars
    Bool a;
        BoolRef b;
        BoolRef c;
       
Begin
    if(a) {Return b;} else {Return c;}
End

编译时,提示错误:无法识别的字符串:BoolRef

这是什么原因?
作者: tygk    时间: 2020-5-21 13:07:35

Yuen_Lee 发表于 2020-5-21 12:51
返回值应是Bool型,不能为BoolSeries。要想得到b,c的返回值,可使用BoolRef b,c来定义。 ...

改为:

Vars
    Bool a;
        BoolRef b;
        BoolRef c;
       
Begin
    if(a) {Return b;} else {Return c;}
End

编译时,提示错误:无法识别的字符串:BoolRef

这是什么原因?
作者: Yuen_Lee    时间: 2020-5-21 13:16:19

不要返回b和c。在调用你的函数后,b,c的值就已经可以取了。
如:
IIFBool(price,b,c);
x = b;
y = c;
就能发现b,c的值已经通过函数改变了。


作者: Yuen_Lee    时间: 2020-5-21 13:23:31

下面这种形式:
Vars
    Bool a;
    BoolRef b;
    BoolRef c;
Begin
    a = ....语句;
    b = ....语句;
    c = ....语句;
    if(a)
        {Return true;}
    else
        {Return False;}
End
作者: tygk    时间: 2020-5-21 15:24:55

Yuen_Lee 发表于 2020-5-21 13:23
下面这种形式:
Vars
    Bool a;




在实际策略中要用到这样一句:

iif( c>m30 , m30>m30[1] , true ) ;

应如何实现?
作者: 小米    时间: 2020-5-22 09:56:36

tygk 发表于 2020-5-21 15:24
在实际策略中要用到这样一句:

iif( c>m30 , m30>m30[1] , true ) ;

这样写肯定不对的。。iif不是这样用的。
iifstring("c>30,“true”,“false”);  
if(c>m30,m30>m30[1],true)这样的语法是不对的,且这个也是完全不符合逻辑的呀。。
您是想要表达什么呢?
作者: tygk    时间: 2020-5-22 10:25:39

小米 发表于 2020-5-22 09:56
这样写肯定不对的。。iif不是这样用的。
iifstring("c>30,“true”,“false”);  
if(c>m30,m30>m30[1],t ...

如果价格大于30日均线,则要求30日均线也向上,否则返回真。

在其它软件里,这种iif函数可以轻松实现。而在TB里,怎么也不能实现。说明TB的局限性很大。只好放弃TB软件了。
作者: 小米    时间: 2020-5-22 10:30:15

tygk 发表于 2020-5-22 10:25
如果价格大于30日均线,则要求30日均线也向上,否则返回真。

在其它软件里,这种iif函数可以轻松实现。 ...

是不是搞反了?
如果价格大于30日均线,且同时30日均线向上,否则返回假,才是合理吧?

是呢,TB里对逻辑要求还是有的,如果逻辑不清的需求确实没法实现 。




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