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

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
加入于:
帖子: 6136
声望: 382

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

Member
avatar
加入于:
帖子: 273
声望: 4

xiaohe wrote:

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

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

description

Member
avatar
加入于:
帖子: 6136
声望: 382

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

Member
avatar
加入于:
帖子: 273
声望: 4

xiaohe wrote:

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

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

Member
avatar
加入于:
帖子: 6136
声望: 382

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