VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 8
声望: 0

之前写的策略里面就感觉小时数据不太对,今天测试了一下,发现第59分钟的数据,是算到下一个小时里面去的。
测试代码如下,就是简单在on_bar,on_1h_bar里面把时间写入一个文件

from vnpy_ctastrategy import (
    CtaTemplate,
    StopOrder,
    TickData,
    BarData,
    TradeData,
    OrderData,
    BarGenerator,
    ArrayManager,
)
from vnpy.trader.constant import Interval

class xugu0516strategy(CtaTemplate):

    author = "test"


    def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
        """"""
        super().__init__(cta_engine, strategy_name, vt_symbol, setting)

        self.kx = BarGenerator(self.on_bar, 1, self.on_1h_bar,Interval.HOUR)

    def on_init(self):
        """
        Callback when strategy is inited.
        """
        self.write_log("策略初始化")
        self.load_bar(50)

    def on_start(self):
        """
        Callback when strategy is started.
        """

        self.write_log("策略启动")

    def on_stop(self):
        """
        Callback when strategy is stopped.
        """
        self.write_log("策略停止")

    def on_tick(self, tick: TickData):
        """
        Callback of new tick data update.
        """
        #self.put_event()
        self.kx.update_tick(tick)

    def on_bar(self, bar: BarData):

        self.kx.update_bar(bar)

        f = open("testbar_0516.txt", "a")
        f.write('-------------t:'+str(bar.datetime)  + "\n")
        f.close()


    def on_1h_bar(self, bar: BarData):

        f = open("testbar_0516.txt", "a")
        f.write('new hbar-------------t:'+str(bar.datetime)  + "\n")
        f.close()


    def on_trade(self, trade: TradeData):
         self.put_event()

    def on_order(self, order: OrderData):
        """
        Callback of new order data update.
        """
        pass


    def on_stop_order(self, stop_order: StopOrder):
        """
        Callback of stop order update.
        """
        pass

最后写入的文件如图,可以看到21:59的数据,实际上是合成到了22:00的小时k线里面,回测和实盘都是这样的。

description

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

14:59的数据 也会给到 21:00的K线里面

description

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

同样的,合成15分钟的K线的话,也会把14分、29分、44分、59分给到下一周期的K线,这种机制不太对,与自然时间都有1分钟的偏移,产生一些微妙的问题,怎么修正?

description

Member
avatar
加入于:
帖子: 5282
声望: 318

update_bar_hour_window函数收到59分的K线会推送小时线,可以自己去看源码
可以把on_bar函数下的输入逻辑写在update_bar函数之前
或者自己去utility下面对update_bar_hour_window函数打印排查

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

沪公网安备 31011502017034号

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