VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 14
声望: 0

description
一直没搞懂,为什么在backtesting的new_bar里,self.cross_limit_order()和self.cross_stop_order()是写在self.strategy.on_bar(bar)前面,on_bar里进行下单,订单信息存到self.active_limit_orders里,在下一次new_bar去判断上一次self.active_limit_orders的订单能不能成交,就是上一根bar下的单,用了当前bar的价格去判断,为什么要这么写?难道self.cross_limit_order()和self.cross_stop_order()不应该放在self.strategy.on_bar(bar)后面吗?

Super Moderator
avatar
加入于:
帖子: 556
声望: 43

self.cross_limit_order()和self.cross_stop_order()是用来撮合成交的。而判断一个订单能否成交,依靠当前时间点的是无法判断的,只有下一个时间点才能判断。所以先要撮合上一个时间点的订单。再去调用当前时间点的策略回调。

Member
avatar
加入于:
帖子: 14
声望: 0

郭易燔 wrote:

self.cross_limit_order()和self.cross_stop_order()是用来撮合成交的。而判断一个订单能否成交,依靠当前时间点的是无法判断的,只有下一个时间点才能判断。所以先要撮合上一个时间点的订单。再去调用当前时间点的策略回调。
感谢回答,但是按照这个逻辑,如果实盘是在on_tick里下单,对应的是当前的bar,价格是在当前bar范围内,是否根据当前bar撮合成交,backtesting是不是针对回测用bar的close_price下单,所以需要通过下一根bar来判断?

Super Moderator
avatar
加入于:
帖子: 556
声望: 43

1.实盘的撮合时由交易所来执行的,委托会直接发给交易所,本地不进行撮合。

  1. backtesting是回测功能代码,实盘代码在engine中。
  2. 回测的撮合可以简单理解为,如果上个委托价格在上一根bar的最高最低价之间,则可以成交。否则,这单就不能成交。
Member
avatar
加入于:
帖子: 14
声望: 0

郭易燔 wrote:

1.实盘的撮合时由交易所来执行的,委托会直接发给交易所,本地不进行撮合。

  1. backtesting是回测功能代码,实盘代码在engine中。
  2. 回测的撮合可以简单理解为,如果上个委托价格在上一根bar的最高最低价之间,则可以成交。否则,这单就不能成交。
    再次感谢回答,“如果上个委托价格在上一根bar的最高最低价之间,则可以成交”,如果是这个逻辑,那是没问题的,
    description

description
如图所示,new_bar先把self.bar置为当前bar,再去判断上个委托价格的,所以是判断了上个委托价格是否在当前这一根bar的最高最低价之间,而不是上一根bar的最高最低价之间,这就让我很难理解

Super Moderator
avatar
加入于:
帖子: 556
声望: 43

不好意思,上一句说的有点问题。
1.简单来说,为了避免未来函数的问题。t时刻的委托只有在t时段走完,到达t+1时刻才能确定是否成交。
2.在t+1时刻你才看到t时间段内全部的数据
3.这里是在t+1时刻里先将数据更新为t时段的k线数据,然后对t时刻的指令进行撮合,最后再发出t+1时刻的指令。
如果还是有疑惑的话可以看一下官方的cta视频教程,里面会有更详细的解释。

Member
avatar
加入于:
帖子: 14
声望: 0

郭易燔 wrote:

不好意思,上一句说的有点问题。
1.简单来说,为了避免未来函数的问题。t时刻的委托只有在t时段走完,到达t+1时刻才能确定是否成交。
2.在t+1时刻你才看到t时间段内全部的数据
3.这里是在t+1时刻里先将数据更新为t时段的k线数据,然后对t时刻的指令进行撮合,最后再发出t+1时刻的指令。
如果还是有疑惑的话可以看一下官方的cta视频教程,里面会有更详细的解释。
豁然开朗,太感谢你的回答了!不过如果我的信号是基于截至到t-1时刻的bar,在实盘是根据tick来下单,而tick只是当前bar的中间某个时刻,这逻辑对应的回测,是不是可以根据当前时刻bar的最高价最低价来判断是否能成交?再次感谢!

Super Moderator
avatar
加入于:
帖子: 556
声望: 43

不行。

  1. 无论是tick还是bar都推荐在下新单之前把所有之前未成交的单都撤销掉,不然一来会错失交易机会,二来对订单的管理容易出错
  2. 所以t时刻的tick就在t+1时刻的tick判断
  3. 就算1分钟的bar也包含很多tick,很可能在你下单的tick之前,你的成交机会就已经没了,所以不能用来判断。
Member
avatar
加入于:
帖子: 14
声望: 0

郭易燔 wrote:

不行。

  1. 无论是tick还是bar都推荐在下新单之前把所有之前未成交的单都撤销掉,不然一来会错失交易机会,二来对订单的管理容易出错
  2. 所以t时刻的tick就在t+1时刻的tick判断
  3. 就算1分钟的bar也包含很多tick,很可能在你下单的tick之前,你的成交机会就已经没了,所以不能用来判断。
    了解了,这个判断的逻辑,一直困扰了我好久,真的太感谢你了~
© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】