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

vnpy_ctastrategy/engine.py与vnpy_ctastrategy/backtesting.py中对load_bar函数的定义如以下代码所示,为什么load_bar(10),在回测时是加载10个交易日数据用于初始化,实盘中是加载10个自然日数据用于初始化呢? 从代码来看无论是回测还是实盘,start: datetime = end - timedelta(days)都是减少的10个自然日啊? 望解答一下,谢谢

vnpy_ctastrategy/engine.py

    def load_bar(
        self,
        vt_symbol: str,
        days: int,
        interval: Interval,
        callback: Callable[[BarData], None],
        use_database: bool
    ) -> List[BarData]:
        """"""
        symbol, exchange = extract_vt_symbol(vt_symbol)
        end: datetime = datetime.now(DB_TZ)
        start: datetime = end - timedelta(days)
        bars: List[BarData] = []

        # Pass gateway and datafeed if use_database set to True
        if not use_database:
            # Query bars from gateway if available
            contract: Optional[ContractData] = self.main_engine.get_contract(vt_symbol)
            if contract and contract.history_data:
                req: HistoryRequest = HistoryRequest(
                    symbol=symbol,
                    exchange=exchange,
                    interval=interval,
                    start=start,
                    end=end
                )
                bars: List[BarData] = self.main_engine.query_history(req, contract.gateway_name)
            # Try to query bars from datafeed, if not found, load from database.
            else:
                bars: List[BarData] = self.query_bar_from_datafeed(symbol, exchange, interval, start, end)
        if not bars:
            bars: List[BarData] = self.database.load_bar_data(
                symbol=symbol,
                exchange=exchange,
                interval=interval,
                start=start,
                end=end,
            )
        return bars

vnpy_ctastrategy/backtesting.py

    def load_bar(
        self,
        vt_symbol: str,
        days: int,
        interval: Interval,
        callback: Callable,
        use_database: bool
    ) -> List[BarData]:
        """"""
        self.callback = callback

        init_end = self.start - INTERVAL_DELTA_MAP[interval]
        init_start = self.start - timedelta(days=days)
        symbol, exchange = extract_vt_symbol(vt_symbol)
        bars: List[BarData] = load_bar_data(
            symbol,
            exchange,
            interval,
            init_start,
            init_end
        )
        return bars

Member
avatar
加入于:
帖子: 4713
声望: 287

因为用来回测的历史数据里面都是交易日的数据
这个days默认入参只是参考,自己根据策略实际需要调整就好

Member
avatar
加入于:
帖子: 260
声望: 3

xiaohe wrote:

因为用来回测的历史数据里面都是交易日的数据
这个days默认入参只是参考,自己根据策略实际需要调整就好

谢谢回复,如下图所示是rb888数据,的确数据库中的回测历史数据里面都是交易日的数据,但是日期2023-9-22到2023-09-25也包含了2天自然日,所在回测时是加载10个交易日数据用于初始化,其实也是包含了周末的自然日数据的start: datetime = end - timedelta(days),实际用于初始化的k线只有8天,可以这样理解吗?

description

Member
avatar
加入于:
帖子: 4713
声望: 287

这个是1.1.5之后修改的,文档会更新的

Member
avatar
加入于:
帖子: 260
声望: 3

xiaohe wrote:

这个是1.1.5之后修改的,文档会更新的

1.1.5之后修改的,这句话是什么意思?

Member
avatar
加入于:
帖子: 4713
声望: 287

vnpy_ctastrategy1.1.5版本及以前,回测load_bar是读取的交易日长度,感兴趣可以自己去github上去看源码

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

沪公网安备 31011502017034号

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