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

我的策略是每天早上8点50分自动启动,目标合约是pg液化石油气。
8:50还没到竞价阶段,但是启动后on_tick收到的第一个tick的时间居然是当天晚上10点59分的,
比如1月1日早上8:50启动,结果收到的第一条tick的datetime居然是1月1日晚上10:59的,
结果导致BarGenerator无法生成分钟bar了(因为BarGenerator只会接收比上一条tick时间更晚的tick)。

初步估计是vnpy_ctp对大商所的ActionDay的处理问题,所以应该不只是pg合约,大商所的合约都可能有这个问题。(这下不得不吐槽国内的交易所对 TradingDay/ActionDay 的处理问题了,几个交易所几个不同标准,FXXK.)
我看到论坛上有过滤无效tick的解决办法:https://www.vnpy.com/forum/topic/30601-che-di-jie-jue-tickshu-ju-de-guo-lu-wen-ti
但是修改的地方太多了,不利于vnpy后续更新(除非官方把修改合并进去)

主要是这个异常tick如果不考虑本地系统时间,单纯从tick的datetime还无法判断是否无效,因为它也确实是正常的交易时间内。
目前一个不太优雅的解决办法是,直接取系统时间,如果是9点前收取的tick一律无视。
但这种过滤方法又会影响回测和载入历史tick,所以针对这个问题又得额外增加判断逻辑。

Member
avatar
加入于:
帖子: 1476
声望: 105

havenonetosay wrote:

我的策略是每天早上8点50分自动启动,目标合约是pg液化石油气。
8:50还没到竞价阶段,但是启动后on_tick收到的第一个tick的时间居然是当天晚上10点59分的,
比如1月1日早上8:50启动,结果收到的第一条tick的datetime居然是1月1日晚上10:59的,
结果导致BarGenerator无法生成分钟bar了(因为BarGenerator只会接收比上一条tick时间更晚的tick)。

初步估计是vnpy_ctp对大商所的ActionDay的处理问题,所以应该不只是pg合约,大商所的合约都可能有这个问题。(这下不得不吐槽国内的交易所对 TradingDay/ActionDay 的处理问题了,几个交易所几个不同标准,FXXK.)
我看到论坛上有过滤无效tick的解决办法:https://www.vnpy.com/forum/topic/30601-che-di-jie-jue-tickshu-ju-de-guo-lu-wen-ti
但是修改的地方太多了,不利于vnpy后续更新(除非官方把修改合并进去)

主要是这个异常tick如果不考虑本地系统时间,单纯从tick的datetime还无法判断是否无效,因为它也确实是正常的交易时间内。
目前一个不太优雅的解决办法是,直接取系统时间,如果是9点前收取的tick一律无视。
但这种过滤方法又会影响回测和载入历史tick,所以针对这个问题又得额外增加判断逻辑。

看vnpy_ctp的仓库已经开了Issue,大家有什么思路在这里一起讨论下吧。

确实对于大商所的日期特殊处理,就是导致上述问题的原因。

Member
avatar
加入于:
帖子: 38
声望: 1

MTF wrote:

havenonetosay wrote:

我的策略是每天早上8点50分自动启动,目标合约是pg液化石油气。
8:50还没到竞价阶段,但是启动后on_tick收到的第一个tick的时间居然是当天晚上10点59分的,
比如1月1日早上8:50启动,结果收到的第一条tick的datetime居然是1月1日晚上10:59的,
结果导致BarGenerator无法生成分钟bar了(因为BarGenerator只会接收比上一条tick时间更晚的tick)。

初步估计是vnpy_ctp对大商所的ActionDay的处理问题,所以应该不只是pg合约,大商所的合约都可能有这个问题。(这下不得不吐槽国内的交易所对 TradingDay/ActionDay 的处理问题了,几个交易所几个不同标准,FXXK.)
我看到论坛上有过滤无效tick的解决办法:https://www.vnpy.com/forum/topic/30601-che-di-jie-jue-tickshu-ju-de-guo-lu-wen-ti
但是修改的地方太多了,不利于vnpy后续更新(除非官方把修改合并进去)

主要是这个异常tick如果不考虑本地系统时间,单纯从tick的datetime还无法判断是否无效,因为它也确实是正常的交易时间内。
目前一个不太优雅的解决办法是,直接取系统时间,如果是9点前收取的tick一律无视。
但这种过滤方法又会影响回测和载入历史tick,所以针对这个问题又得额外增加判断逻辑。

看vnpy_ctp的仓库已经开了Issue,大家有什么思路在这里一起讨论下吧。

确实对于大商所的日期特殊处理,就是导致上述问题的原因。

因为大商所的ActionDay和TradingDay是相同的(没有遵循上期对ActionDay的规范),
所以对于大商所夜盘品种来说,针对早上开盘前的tick快照(也就是这个品种的最新一个tick,对于pg来说也就是前一天晚上10点59分的tick),不论是取ActionDay还是TradingDay,还是取本地实际实际日期,都不对。
问题是没有接口能查询上一个交易日的日期,毕竟有周末或者节假日,所以又不能单纯把日期减1。

我目前想到的一个简单的判断逻辑是,直接把这个datetime和本地时间做对比,误差超过5分钟(设置一个阈值),就视作无效tick。

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

沪公网安备 31011502017034号

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