vn.py官网
开源量化社区
Member
加入于:
帖子: 105
声望: 1

在早上9点开盘的时候,经常会出现某些期货的标的接受不到数据。夜盘没有这种问题。我敢肯定不是策略内部的bug,因为重启就恢复正常了。最近两天rb2105都出现了这个问题。我用的无图形界面,并且是在实盘上运行的。请问有人遇到和我类似的问题吗?

Member
avatar
加入于:
帖子: 3033
声望: 174

建议可以print一下看看当时是否有tick推送过来

Member
加入于:
帖子: 105
声望: 1

刚刚试过了。tick是推送过来了。好奇怪,我用的
self.am = ArrayManager(1)
self.load_bar(10)
不存在数据准备的问题啊

Member
加入于:
帖子: 105
声望: 1

而且为啥我开盘以后重新运行就成功了呢

Member
avatar
加入于:
帖子: 3033
声望: 174
  1. 那么请问你所说的期货的标的接受不到数据的具体情况是怎样的呢?
  2. 请问你的策略里需要用到am计算指标吗?如果不需要,不用am就行了。如果需要,am的size需要大于你计算指标的参数的
Member
加入于:
帖子: 105
声望: 1

我的策略是在分钟线上运行的。具体情况就是on_bar函数里的内容完全不执行,也接收不到bar里的任何信息。我其实不需要am计算指标,只需要当前的收盘价就行了。但问题是夜盘是没有任何问题的,早上开盘后再重启策略也是没有问题的。所以我不理解为什么在早上会出现这个问题。

Member
avatar
加入于:
帖子: 3033
声望: 174

那么就请去掉关于am的代码吧,有可能是因为am判断不满足直接return了。如果没有tick推送,可能是品种交易不活跃导致tick不更新,以至于没有生成bar。既然有tick推送,可以结合过来的tick和bargenerator看看是否成功合成了bar(也可先在on_bar打印看看是否有bar推送)。

Member
加入于:
帖子: 105
声望: 1

我检查过了,am.inited也是Ture,也有tick推送,但on_bar上就是没有bar推送。最关键的一点就是如果在9点开盘前就启动,那么就没有on_bar的数据;在开盘后启动,就有on_bar的数据。在夜盘上,一直都有数据。

Member
avatar
加入于:
帖子: 3033
声望: 174

但是如果没有用到am,建议还是去掉关于am的代码。如果有tick推送,没有on_bar推送,建议可以print一下tick对照bg看一下为什么没有生成bar,在哪一步逻辑判断时被拦下来了

Member
加入于:
帖子: 105
声望: 1

我发现问题出在哪里了。是开盘前的第一根tick的时间有问题。
我在BarGenerator的update_tick下加了一句话:
print(f'{tick.symbol}:{tick.datetime}')

于是早上启动策略后(开盘之前)就print出了如下:

rb2105:2020-12-25 23:00:00.500000+08:00
因为时间出现在今天晚上,所以开盘以后出现的tick都没有正常地被生成bar的数据。为什么会出现一个这样的时间戳?
更奇怪的是,另一个关于螺纹钢的策略输出的是正常的:
rb2105:2020-12-25 07:53:40+08:00

请问这可能是什么原因造成的?

Member
avatar
加入于:
帖子: 3033
声望: 174

应该是交易所盘前推送了fake_data吧,那就请策略内过滤一下非交易时段的tick吧

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号