vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 28
声望: 0

实盘的时候,每天早上8:30左右打开软件,8:58左右分报错4097,然后又连接正常,行情界面一直有tick推送过来且显示正常,但是策略on_bar函数一直没有bar生成。tick能够显示在行情界面,为什么进不去on_tick函数???必须要再次重启软件才完全正常。

Member
avatar
加入于:
帖子: 282
声望: 12

请去cta_strategy.engine.py文件下打印process_tick_event函数看看。

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

青青子荆 wrote:

请去cta_strategy.engine.py文件下打印process_tick_event函数看看。

每天早上第一次启动才有这个问题,明天早上我测试一下。谢谢

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

青青子荆 wrote:

请去cta_strategy.engine.py文件下打印process_tick_event函数看看。

今天8:55登录的,连接正常。9点以后process_tick_event函数一直都有tick数据进来,但是on_bar()没有合成bar。必须要重启软件才能在on_bar()合成bar。。。实在是太奇怪了。。大佬有没有思路给个参考呀?

Member
avatar
加入于:
帖子: 282
声望: 12

请逐行打印process_tick_event的逻辑,看卡在哪一步了

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

青青子荆 wrote:

请逐行打印process_tick_event的逻辑,看卡在哪一步了

今天4.1号早上9点开盘之前连接好ctp以后,交易所会发过来一个tick,我发现它的datatime有问题。
这个tick应该是昨天晚上的最后一个,但是这个datetime如下:

TickData(gateway_name='CTP', symbol='c2201', exchange=<Exchange.DCE: 'DCE'>, datetime=datetime.datetime(2021, 4, 1, 22, 59, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)...

日期时间应该是2021, 3, 31, 22, 59,但是发过来的是2021, 4, 1, 22, 59
可能会导致
BarGenerator的
def update_tick(self, tick: TickData) -> None:
"""
Update new tick data into generator.
"""
......
......

    # Filter tick data with older timestamp
    if self.last_tick and tick.datetime < self.last_tick.datetime:
        return

在这个函数中一直都是跳进这个if逻辑,因为第一个tick的时间是2021, 4, 1, 22, 59,后面所有的tick都会被return,从而不会合成bar。

今天4.2号早上开盘前又测试了一下,是在点击初始化策略之后,启动策略之前process_tick_event会进来一个tick:如下
TickData(gateway_name='CTP', symbol='c2201', exchange=<Exchange.DCE: 'DCE'>, datetime=datetime.datetime(2021, 4, 2, 22, 59, 50, 300000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), name='黄玉米2201', volume=6145, open_interest=39087.0, last_price=2582.0, last_volume=0, limit_up=2778.0, limit_down=2416.0, open_price=2580.0, high_price=2591.0, low_price=2553.0, pre_close=2580.0, bid_price_1=2580.0, bid_price_2=0, bid_price_3=0, bid_price_4=0, bid_price_5=0, ask_price_1=2584.0, ask_price_2=0, ask_price_3=0, ask_price_4=0, ask_price_5=0, bid_volume_1=8, bid_volume_2=0, bid_volume_3=0, bid_volume_4=0, bid_volume_5=0, ask_volume_1=1, ask_volume_2=0, ask_volume_3=0, ask_volume_4=0, ask_volume_5=0)

这个tick是交易所发过来的吗?

Member
avatar
加入于:
帖子: 282
声望: 12

可以加个判断条件保证推进来的tick在交易时间内

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

至简 wrote:

青青子荆 wrote:

请逐行打印process_tick_event的逻辑,看卡在哪一步了

今天4.1号早上9点开盘之前连接好ctp以后,交易所会发过来一个tick,我发现它的datatime有问题。
这个tick应该是昨天晚上的最后一个,但是这个datetime如下:

TickData(gateway_name='CTP', symbol='c2201', exchange=<Exchange.DCE: 'DCE'>, datetime=datetime.datetime(2021, 4, 1, 22, 59, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>)...

日期时间应该是2021, 3, 31, 22, 59,但是发过来的是2021, 4, 1, 22, 59
可能会导致
BarGenerator的
def update_tick(self, tick: TickData) -> None:
"""
Update new tick data into generator.
"""
......
......

    # Filter tick data with older timestamp
    if self.last_tick and tick.datetime < self.last_tick.datetime:
        return

在这个函数中一直都是跳进这个if逻辑,因为第一个tick的时间是2021, 4, 1, 22, 59,后面所有的tick都会被return,从而不会合成bar。

今天4.2号早上开盘前又测试了一下,是在点击初始化策略之后,启动策略之前process_tick_event会进来一个tick:如下
TickData(gateway_name='CTP', symbol='c2201', exchange=<Exchange.DCE: 'DCE'>, datetime=datetime.datetime(2021, 4, 2, 22, 59, 50, 300000, tzinfo=<DstTzInfo 'Asia/Shanghai' CST+8:00:00 STD>), name='黄玉米2201', volume=6145, open_interest=39087.0, last_price=2582.0, last_volume=0, limit_up=2778.0, limit_down=2416.0, open_price=2580.0, high_price=2591.0, low_price=2553.0, pre_close=2580.0, bid_price_1=2580.0, bid_price_2=0, bid_price_3=0, bid_price_4=0, bid_price_5=0, ask_price_1=2584.0, ask_price_2=0, ask_price_3=0, ask_price_4=0, ask_price_5=0, bid_volume_1=8, bid_volume_2=0, bid_volume_3=0, bid_volume_4=0, bid_volume_5=0, ask_volume_1=1, ask_volume_2=0, ask_volume_3=0, ask_volume_4=0, ask_volume_5=0)

这个tick是交易所发过来的吗?

貌似之前看到过,也有人问过。经纪商认为是4.1这个交易日的报价,时间22:59 所以他们认为自己没错

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

沪公网安备 31011502017034号