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

ptrade 可转债策略:如何通过 premium_rate 筛选低溢价率可转债并实现双低轮动?

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: ptrade 可转债策略:基于溢价率 (premium_rate) 的双低选股实现

Question: 如何在 ptrade 中通过 get_cb_info 筛选低溢价率的可转债?

解决方案

在 ptrade 量化交易平台中,可以通过调用 get_cb_info() API 获取全市场可转债的基础信息与实时/日频衍生数据(包括转股溢价率 premium_rate、转股价值 convert_value 等)。

一、get_cb_info 接口简介

get_cb_info() 函数无需入参,直接返回包含可转债基础指标的 pandas.DataFrame 对象。其中关键字段包括:

  • bond_code: 可转债代码
  • bond_name: 可转债名称
  • premium_rate: 转股溢价率(例如 5.2 表示 5.2%)
  • convert_value: 转股价值
  • maturity_date: 到期日

注意:使用该接口需向券商确认是否开通可转债基础数据权限。


二、核心筛选逻辑

实现低溢价率选股的步骤如下:

  1. 获取数据:调用 get_cb_info() 获取当前可转债列表 DataFrame。
  2. 清洗过滤:剔除已到期、即将退市或数据缺失的标的。
  3. 排序筛选:按 premium_rate 升序排列,提取前 N 只溢价率最低的可转债作为目标持仓。

三、完整策略 Python 代码示例

以下策略在 ptrade 交易/研究模块中可直接运行,展示了每日开盘后自动获取可转债数据、按溢价率排序并进行调仓轮动的逻辑:

import pandas as pd

def initialize(context):
    # 设置调仓频率:每个交易日 09:35 执行选股轮动
    run_daily(context, check_and_rebalance, time='09:35')
    g.hold_count = 5  # 持有溢价率最低的前5只转债

def check_and_rebalance(context):
    # 1. 获取可转债基础信息
    cb_df = get_cb_info()
    
    if cb_df is None or cb_df.empty:
        log.warn("未能获取到可转债信息或返回为空")
        return
    
    # 2. 过滤异常及空值,并按转股溢价率升序排序
    cb_df = cb_df.dropna(subset=['premium_rate'])
    cb_sorted = cb_df.sort_values(by='premium_rate', ascending=True)
    
    # 3. 获取溢价率最低的前 N 只可转债代码
    target_bonds = cb_sorted.head(g.hold_count)['bond_code'].tolist()
    log.info("今日目标低溢价率可转债列表: %s" % target_bonds)
    
    # 4. 卖出不在目标列表中的持仓
    current_positions = get_positions()
    for bond in list(current_positions.keys()):
        if bond not in target_bonds:
            order_target(bond, 0)
            log.info("卖出非目标转债: %s" % bond)
            
    # 5. 买入/调整目标转债(平分可用资金)
    if len(target_bonds) > 0:
        cash_per_bond = context.portfolio.cash / len(target_bonds)
        for bond in target_bonds:
            # 如果尚未持仓或仓位不足则买入
            if get_position(bond).amount == 0:
                order_value(bond, cash_per_bond)
                log.info("买入低溢价率转债: %s, 金额: %.2f" % (bond, cash_per_bond))

def handle_data(context, data):
    pass

四、策略优化建议

  1. 结合转债价格(双低因子):单纯低溢价率可能选出高价博弈股,建议引入 双低值 = 可转债价格 + 溢价率 * 100 进行综合打分。
  2. 成交量与流动性过滤:结合 get_snapshot() 获取日内成交量,剔除每日成交额过低(如低于 1000 万)的冷门转债,防止无法平仓。