🚀 AI 一键生成 ptrade 策略代码

如何在Ptrade与QMT中获取可转债基础数据(溢价率、剩余规模、双低策略)?

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

问题描述

Ptrade与QMT 获取可转债基础数据,溢价率,剩余规模,评级,双低,是否强赎

/

解决方案

在可转债量化交易中,获取准确的基础数据(如溢价率、剩余规模、评级、强赎状态等)是构建“双低策略”等经典策略的核心。以下将以 Ptrade 平台为主(结合文档提供的扩展方法),为您详细解答如何获取这些关键数据。

1. Ptrade 原生 API 获取可转债基础数据

Ptrade 提供了专门的 API get_cb_info() 来获取可转债的基础信息。该接口返回一个 DataFrame,包含以下关键字段:

  • bond_code: 可转债代码
  • bond_name: 可转债名称
  • stock_code: 正股代码
  • premium_rate: 溢价率
  • convert_price: 转股价格
  • convert_value: 转股价值

示例代码:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 获取可转债基础信息
    cb_df = get_cb_info()
    if not cb_df.empty:
        log.info(cb_df.head())

2. 获取进阶数据:剩余规模、评级与强赎状态

Ptrade 原生 API 可能不包含剩余规模和评级等深度数据。根据 Ptrade 进阶用法,可以通过自定义类结合第三方数据源(或券商提供的扩展接口)来获取。例如,通过 HTTP 请求获取完整的可转债特征数据:

  • 剩余规模:对应字段 curr_iss_amt(单位:亿)
  • 评级:对应字段 rating_cd
  • 是否强赎:通常可以通过 year_left(剩余年限)是否为 null 来判断是否已公布强赎。

示例代码(扩展获取):

import requests
import pandas as pd

class Bond:
    def modify_code(self, x):
        return x + '.SZ' if x.startswith('12') else x + '.SS'
    
    def get_bond_advanced_data(self):
        # 假设 API_HOST 为有效的数据接口
        # resp = requests.post(url=API_HOST, data={'sign': SIGN})
        # bond_data = resp.json()
        # df = pd.DataFrame(bond_data['data'])
        # df['bond_id'] = df['bond_id'].map(self.modify_code)
        # return df
        pass

3. 计算“双低”指标

双低指标 = 可转债价格 + 溢价率 * 100。
双低策略是可转债最经典的防守反击策略。在 Ptrade 中,我们可以结合 get_price(或 get_snapshot)获取最新价格,结合 get_cb_info 获取溢价率来计算双低值。

双低计算示例:

def get_double_low_bonds(context):
    # 1. 获取基础信息(包含溢价率)
    cb_info = get_cb_info()
    if cb_info.empty:
        return []
    
    # 2. 获取当前可交易的可转债列表
    cb_list = get_cb_list()
    
    # 3. 获取最新价格
    snapshots = get_snapshot(cb_list)
    
    double_low_list = []
    for index, row in cb_info.iterrows():
        code = row['bond_code']
        premium = row['premium_rate']
        
        if code in snapshots and snapshots[code].get('trade_status') == 'TRADE':
            price = snapshots[code]['last_px']
            # 计算双低值:价格 + 溢价率 * 100
            double_low_score = price + premium * 100
            double_low_list.append({
                'code': code,
                'price': price,
                'premium': premium,
                'score': double_low_score
            })
            
    # 按双低分数从小到大排序
    double_low_list.sort(key=lambda x: x['score'])
    return double_low_list[:10] # 返回双低前10名

4. QMT 平台的差异说明

虽然上述代码基于 Ptrade,但在 QMT(迅投极速交易系统)中,逻辑是相似的:

  1. 基础数据:QMT 使用 get_stock_list('CB') 获取转债列表,使用 get_instrument_detail() 获取转债详情。
  2. 行情数据:使用 get_full_tick() 获取最新价格。
  3. 溢价率与强赎:QMT 的原生接口中转债字段较为基础,通常需要借助 QMT 内置的 ContextInfo.get_financial_data() 或外接数据源(如 Tushare、聚宽)来补充剩余规模、评级和强赎公告数据。

总结:在量化平台中开发可转债策略,Ptrade 提供了便捷的 get_cb_info() 满足基础需求;对于剩余规模、评级和强赎等高阶字段,建议结合 Python 的 requests 模块对接外部专业数据源,以确保“双低策略”和“防强赎机制”的稳定运行。