🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

为什么在ptrade回测模块中调用get_cb_list会报错?

ptrade | 发布时间: 2026/6/4
以下内容由 EasyQuant 生成。

问题描述

get_cb_list在回测模块中使用报错是什么原因?

为什么在回测模块中调用get_cb_list函数后没有数据返回?

解决方案

在 ptrade 量化平台中,如果在回测模块调用 get_cb_list 函数遇到报错或没有数据返回,根本原因在于该函数的使用场景限制

原因解析

根据 ptrade API 文档的明确规定:

  • 使用场景get_cb_list 函数仅在交易模块可用
  • 接口说明:该函数用于返回当前可转债市场的所有代码列表(包含停牌代码)。

由于回测环境(Backtest)和实盘交易环境(Trade)在底层数据支持和接口开放权限上存在差异,get_cb_list 被设计为仅在实盘交易环境中提供实时或当天的可转债市场代码表。因此,当您在回测模块(如 initialize, handle_data 等回测上下文中)强行调用该接口时,系统无法提供对应的数据,从而导致报错或返回空数据。

解决方案与建议

  1. 区分运行环境:在编写策略时,请务必注意 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 调用")
    
  2. 回测中的替代方案:如果您在回测中确实需要可转债的基础信息,可以尝试在研究模块中获取历史可转债数据并保存为 CSV 或 Pickle 文件,然后在回测初始化时读取这些静态数据作为股票池或参考列表。

总结来说,请勿在回测模块中使用 get_cb_list,将其严格保留在实盘交易策略中使用即可解决此报错的关键。