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

ptrade 平台如何使用 get_cb_list 获取可转债代码及最新行情?

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

问题描述

get_cb_list获取的数据不包含最新行情?

使用get_cb_list获取可转债代码列表后,为什么获取的代码在当天交易时段内一直是相同的?

解决方案

1. get_cb_list 获取的数据不包含最新行情?

是的,get_cb_list() 接口仅返回当前可转债市场的所有代码列表(例如 ['110033.SS', '113011.SS', ...]),它本身不包含任何行情数据(如价格、成交量、涨跌幅等)。

如果您需要获取这些可转债的最新行情数据,需要将获取到的代码列表作为参数,传递给行情获取接口,例如 get_snapshot()(获取实时快照)或 get_price() / get_history()(获取历史K线数据)。

2. 为什么获取的代码在当天交易时段内一直是相同的?

获取的代码列表在当天交易时段内保持不变,主要有以下两个原因:

  1. 市场规则决定:可转债的上市、退市等状态变动都是按交易日(天)来计算的。在同一个交易日内,市场上存在的标的(包括正常交易和停牌的标的)是固定的,盘中不会突然新增或彻底消失一只可转债。
  2. 接口包含停牌代码:根据官方文档说明,get_cb_list() 返回的列表包含停牌代码。因此,即使某只可转债在盘中临时停牌,它的代码依然会存在于该列表中。
  3. 缓存机制:为了减小对行情服务的压力,ptrade 引擎在交易模块中对该函数做了缓存处理(同一分钟内多次调用返回当前分钟首次查询的缓存数据)。

3. 如何获取当天“可交易”且包含最新行情的可转债列表?

如果您希望过滤掉停牌、退市等无法交易的可转债,并获取最新行情,可以结合 get_snapshot() 接口来实现。以下是一个标准的策略示例:

def initialize(context):
    # 每天 9:25 运行获取可交易可转债列表的函数
    run_daily(context, get_trade_cb_list, "9:25")

def before_trading_start(context, data):
    # 每日清空,避免取到昨日市场代码表
    g.trade_cb_list = []

def get_trade_cb_list(context):
    # 1. 获取所有可转债代码(包含停牌)
    cb_list = get_cb_list()
    
    # 2. 获取这些代码的实时行情快照
    cb_snapshot = get_snapshot(cb_list)
    
    # 3. 过滤出可交易的代码
    # 代码有行情快照并且交易状态不在暂停交易(HALT)、停盘(SUSP)、长期停盘(STOPT)、退市(DELISTED)状态的判定为可交易代码
    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):
    pass

通过这种方式,您不仅获取了代码列表,还利用快照数据中的 trade_status 字段精准过滤了不可交易的标的,为后续的交易逻辑打下基础。