问题描述
为什么在回测模块中调用get_cb_list函数后没有数据返回?
解决方案
在 ptrade 量化平台中,如果在回测模块调用 get_cb_list 函数遇到报错或没有数据返回,根本原因在于该函数的使用场景限制。
原因解析
根据 ptrade API 文档的明确规定:
- 使用场景:
get_cb_list函数仅在交易模块可用。 - 接口说明:该函数用于返回当前可转债市场的所有代码列表(包含停牌代码)。
由于回测环境(Backtest)和实盘交易环境(Trade)在底层数据支持和接口开放权限上存在差异,get_cb_list 被设计为仅在实盘交易环境中提供实时或当天的可转债市场代码表。因此,当您在回测模块(如 initialize, handle_data 等回测上下文中)强行调用该接口时,系统无法提供对应的数据,从而导致报错或返回空数据。
解决方案与建议
- 区分运行环境:在编写策略时,请务必注意 API 的适用场景。如果您需要编写兼容回测和交易的策略,可以使用
is_trade()函数来判断当前运行环境,从而避免在回测中执行仅限交易模块的函数。def handle_data(context, data): if is_trade(): # 仅在交易环境中执行 cb_list = get_cb_list() log.info(cb_list) else: # 回测环境的替代逻辑 log.info("当前为回测环境,跳过 get_cb_list 调用") - 回测中的替代方案:如果您在回测中确实需要可转债的基础信息,可以尝试在研究模块中获取历史可转债数据并保存为 CSV 或 Pickle 文件,然后在回测初始化时读取这些静态数据作为股票池或参考列表。
总结来说,请勿在回测模块中使用 get_cb_list,将其严格保留在实盘交易策略中使用即可解决此报错的关键。