设为首页收藏本站

 找回密码
 注册
查看: 3157|回复: 8
打印 上一主题 下一主题

请版主看看,在TBPLUS上Buy和SellShort为什么图表上没信号 [复制链接]

Rank: 1

精华
0
UID
257192
积分
5
帖子
4
主题
1
阅读权限
10
注册时间
2017-9-28
最后登录
2017-12-6
跳转到指定楼层
1#
发表于 2017-11-28 22:05:58 |只看该作者 |倒序浏览
本帖最后由 bj_hpf 于 2017-11-28 22:25 编辑

以前用的单账户,使用A函数做仓位管理,没有什么问题,现在都换成多账户了,A函数取不到仓位了,我就改用Buy和SellShort,发现公式下单了,log里有纪录,委托纪录也有,但是经常图表上不产生信号,下次平仓时手数就对不上了,我专门测试了一下,发现实盘状态下确实图表没有信号,回测中历史Bar上会有下单信号,请问版主这是为什么?
这个测试公式里,我用了全局变量,来保证每个Bar只在第一个tick时,下单一次。
Params
        //此处添加参数
        Numeric Para1(10);
        Numeric Para2(5);
Vars
        //此处添加变量
        Numeric LastBar;
        String LogFile;
Begin
        //此处添加代码正文
        LogFile = "C:\\Program Files\\TradeBlazer\\TBPlus\\log\\tc_" + Symbol + ".log";
        If(BarStatus == 0)
        {
                SetGlobalVar2("LastBar", 0);
        }
        LastBar = GetGlobalVar2("LastBar");
        Commentary("LastBar " + Text(LastBar));
        Commentary("CurrentBar " + Text(CurrentBar));
        If(LastBar != CurrentBar)
        {
                if(CurrentBar % 2 == 0)
                {
                        Buy(CurrentBar % 10 + 1, Close);
                        FileAppend(LogFile, Text(CurrentDate) + " " + Text(CurrentTime) +  " Buy " + Text(CurrentBar % 10 + 1));
                } Else
                {
                        SellShort(CurrentBar % 10 + 1, Close);
                        FileAppend(LogFile, Text(CurrentDate) + " " + Text(CurrentTime) +  " Sell " + Text(CurrentBar % 10 + 1));
                }
        }
        SetGlobalVar2("LastBar", CurrentBar);
End

Rank: 1

精华
0
UID
257192
积分
5
帖子
4
主题
1
阅读权限
10
注册时间
2017-9-28
最后登录
2017-12-6
2#
发表于 2017-11-28 22:32:07 |只看该作者
我又试了下,如果去掉If(LastBar != CurrentBar),每个tick都下单一次,图表上就能产生信号了,对于这个公式多次下单也无所谓,底层会过滤掉,只委托一次,但我实际的策略里面,下单量是用价格来计算的,每个tick可能不同,多次下单会委托多次,有没有办法解决这个问题?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
3#
发表于 2017-11-30 14:29:11 |只看该作者
bj_hpf 发表于 2017-11-28 22:32
我又试了下,如果去掉If(LastBar != CurrentBar),每个tick都下单一次,图表上就能产生信号了,对于这个公 ...

不要使用全局变量来记录,换成序列变量试试

使用道具 举报

Rank: 1

精华
0
UID
257192
积分
5
帖子
4
主题
1
阅读权限
10
注册时间
2017-9-28
最后登录
2017-12-6
4#
发表于 2017-12-1 16:04:15 |只看该作者
本帖最后由 bj_hpf 于 2017-12-1 16:09 编辑

序列变量不能避免重复下单,我现在用的办法是在第一次下单时,用全局变量保存价格和手数,同一根bar重复下单时,读取之前记录的,只要每次下单价格和手数不变,不会重复委托。有时委托有问题,有的账户正常平仓再开仓,有的账户就没有委托平仓,这种问题就靠头寸监控来解决。但如果用止损价格来计算下单手数,实时和历史的肯定会有差别,时不时的头寸监控会平一部分,以目前的机制来说,很难解决,只能用固定资金比例,不要求控制那么精确,也就凑合用了。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
5#
发表于 2017-12-1 16:49:31 |只看该作者
bj_hpf 发表于 2017-12-1 16:04
序列变量不能避免重复下单,我现在用的办法是在第一次下单时,用全局变量保存价格和手数,同一根bar重复下 ...

buy,sell指令的机制与A函数不同。。同一个bar上同一个信号是不会重复发单 的。

使用道具 举报

Rank: 1

精华
0
UID
257192
积分
5
帖子
4
主题
1
阅读权限
10
注册时间
2017-9-28
最后登录
2017-12-6
6#
发表于 2017-12-1 18:24:58 |只看该作者
但是如果价格和手数变了,好像也会重复发单的,我在委托里看到过

使用道具 举报

Rank: 1

精华
0
UID
243172
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2016-11-15
最后登录
2018-3-2
7#
发表于 2018-2-7 11:20:36 |只看该作者
我和你有类似问题,我猜测是这样的:按照程序的写法,对某一个符合条件的bar,当其首次被tick数据触发时(Lastbar !=currentbar),可以正常交易;此后,同一个bar被后续tick多次触发时(Lastbar =currenbar),程序不会进行任何操作,因此也会覆盖图表上的前面的开仓信号,图表变为没有信号。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
8#
发表于 2018-2-7 16:40:44 |只看该作者
PhantomFox 发表于 2018-2-7 11:20
我和你有类似问题,我猜测是这样的:按照程序的写法,对某一个符合条件的bar,当其首次被tick数据触发时(L ...

看你描述的问题表现应该是有信号消失的原因吧?

使用道具 举报

Rank: 1

精华
0
UID
243172
积分
13
帖子
10
主题
3
阅读权限
10
注册时间
2016-11-15
最后登录
2018-3-2
9#
发表于 2018-2-7 17:01:47 |只看该作者
小米 发表于 2018-2-7 16:40
看你描述的问题表现应该是有信号消失的原因吧?

不是的,你看他这个代码,所有执行的buy,sell函数包裹在 lastbar!=currentbar 这个判断里面,但在代码最后又会将全局变量lastbar重置为currentbar,所以这个代码只能在一个bar第一次被触发时(此时currentbar = lastbar+1)进入那个if语句里面,此后同一根bar上虽然被后续tick数据触发,但是进入条件已经不满足了。我自己用全局变量控制下单次数也是类似思路。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-19 14:40

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部