🚀 AI 一键生成 ptrade 策略代码

ptrade提示“可转债代码不支持”或获取数据为空怎么办?

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

问题描述

获取可转债数据为空

在进行量化 交易的过程中,使用获取可转债标的行情的接口,但是提示报错12319*.SZ不支持。

解决方案

在 ptrade 量化平台中获取可转债数据时,如果遇到数据为空或提示 12319*.SZ不支持 的报错,通常是由以下几个原因导致的。请按照以下步骤进行排查和解决:

1. 检查可转债基础数据权限是否开通

如果您使用的是 get_cb_info() 接口获取可转债基础信息,该接口依赖于可转债基础数据权限。如果您的账户未开通此权限,调用该接口将返回空的 DataFrame。
解决方法:请联系您的开户券商,确认并申请开通 ptrade 的“可转债基础数据权限”。

2. 检查代码后缀及格式是否正确

ptrade 对标的代码的后缀有严格要求。可转债代码必须包含正确的市场后缀:

  • 深交所可转债:后缀为 .SZ(例如:123190.SZ
  • 上交所可转债:后缀为 .SS(例如:110059.SS

如果报错提示不支持,请检查您传入的代码字符串是否拼写正确,是否多加了空格或使用了错误的市场后缀。

3. 确认标的当前是否可交易(是否已退市或停牌)

如果您请求的是已经退市的可转债,部分行情接口可能无法返回最新数据。建议先通过 get_cb_list() 获取当前市场所有可转债代码列表,确认该代码是否在列表中。

4. 正确获取可转债数据的代码示例

以下是一个标准的获取可转债列表及行情的示例代码,供您参考:

def initialize(context):
    # 每日盘前获取可转债列表
    run_daily(context, get_trade_cb_list, "9:25")

def get_trade_cb_list(context):
    # 1. 获取当前可转债市场的所有代码列表
    cb_list = get_cb_list()
    
    # 2. 过滤出可交易的可转债(排除停牌、退市等)
    cb_snapshot = get_snapshot(cb_list)
    g.trade_cb_list = [cb_code for cb_code in cb_list if
                       cb_snapshot.get(cb_code, {}).get("trade_status") not in
                       [None, "HALT", "SUSP", "STOPT", "DELISTED"]]
    log.info("当天可交易的可转债数量:%s" % len(g.trade_cb_list))

def handle_data(context, data):
    # 假设我们要获取 123190.SZ 的行情
    target_cb = '123190.SZ'
    
    # 确保代码在可交易列表中
    if target_cb in g.trade_cb_list:
        # 获取历史行情
        hist = get_history(5, '1d', 'close', security_list=target_cb)
        log.info("可转债历史行情:\n%s" % hist)
        
        # 获取基础信息(需券商开通权限)
        cb_info = get_cb_info()
        if not cb_info.empty:
            info = cb_info[cb_info['bond_code'] == target_cb]
            log.info("可转债基础信息:\n%s" % info)
        else:
            log.warning("获取可转债基础信息为空,请检查是否开通权限!")

总结:遇到 不支持 报错时,首先核对代码后缀(.SZ.SS),其次使用 get_cb_list() 验证代码有效性;如果 get_cb_info() 返回空,请务必联系券商开通相应的数据权限。