查看: 84|回复: 9

编写了一个布尔型IIFBool自定义函数,但编译时出错 [复制链接]

Rank: 1

精华
0
UID
115519
积分
41
帖子
19
主题
11
阅读权限
10
注册时间
2013-2-13
最后登录
2020-5-22
发表于 7 天前 |显示全部楼层
本帖最后由 tygk 于 2020-5-20 17:24 编辑

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


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

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

Rank: 3Rank: 3

精华
0
UID
110114
积分
218
帖子
157
主题
15
阅读权限
40
注册时间
2012-4-20
最后登录
2020-5-27
发表于 6 天前 |显示全部楼层
返回值应是Bool型,不能为BoolSeries。要想得到b,c的返回值,可使用BoolRef b,c来定义。

使用道具 举报

Rank: 1

精华
0
UID
115519
积分
41
帖子
19
主题
11
阅读权限
10
注册时间
2013-2-13
最后登录
2020-5-22
发表于 6 天前 |显示全部楼层
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

这是什么原因?

使用道具 举报

Rank: 1

精华
0
UID
115519
积分
41
帖子
19
主题
11
阅读权限
10
注册时间
2013-2-13
最后登录
2020-5-22
发表于 6 天前 |显示全部楼层
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

这是什么原因?

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
110114
积分
218
帖子
157
主题
15
阅读权限
40
注册时间
2012-4-20
最后登录
2020-5-27
发表于 6 天前 |显示全部楼层
不要返回b和c。在调用你的函数后,b,c的值就已经可以取了。
如:
IIFBool(price,b,c);
x = b;
y = c;
就能发现b,c的值已经通过函数改变了。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
110114
积分
218
帖子
157
主题
15
阅读权限
40
注册时间
2012-4-20
最后登录
2020-5-27
发表于 6 天前 |显示全部楼层
下面这种形式:
Vars
    Bool a;
    BoolRef b;
    BoolRef c;
Begin
    a = ....语句;
    b = ....语句;
    c = ....语句;
    if(a)
        {Return true;}
    else
        {Return False;}
End

使用道具 举报

Rank: 1

精华
0
UID
115519
积分
41
帖子
19
主题
11
阅读权限
10
注册时间
2013-2-13
最后登录
2020-5-22
发表于 6 天前 |显示全部楼层
Yuen_Lee 发表于 2020-5-21 13:23
下面这种形式:
Vars
    Bool a;




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

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

应如何实现?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26477
帖子
12583
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2020-5-27
发表于 5 天前 |显示全部楼层
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)这样的语法是不对的,且这个也是完全不符合逻辑的呀。。
您是想要表达什么呢?

使用道具 举报

Rank: 1

精华
0
UID
115519
积分
41
帖子
19
主题
11
阅读权限
10
注册时间
2013-2-13
最后登录
2020-5-22
发表于 5 天前 |显示全部楼层
小米 发表于 2020-5-22 09:56
这样写肯定不对的。。iif不是这样用的。
iifstring("c>30,“true”,“false”);  
if(c>m30,m30>m30[1],t ...

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

在其它软件里,这种iif函数可以轻松实现。而在TB里,怎么也不能实现。说明TB的局限性很大。只好放弃TB软件了。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26477
帖子
12583
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2020-5-27
发表于 5 天前 |显示全部楼层
tygk 发表于 2020-5-22 10:25
如果价格大于30日均线,则要求30日均线也向上,否则返回真。

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

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2020-5-27 22:26

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部