问题描述
/
解决方案
在可转债量化交易中,获取准确的基础数据(如溢价率、剩余规模、评级、强赎状态等)是构建“双低策略”等经典策略的核心。以下将以 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(迅投极速交易系统)中,逻辑是相似的:
- 基础数据:QMT 使用
get_stock_list('CB')获取转债列表,使用get_instrument_detail()获取转债详情。 - 行情数据:使用
get_full_tick()获取最新价格。 - 溢价率与强赎:QMT 的原生接口中转债字段较为基础,通常需要借助 QMT 内置的
ContextInfo.get_financial_data()或外接数据源(如 Tushare、聚宽)来补充剩余规模、评级和强赎公告数据。
总结:在量化平台中开发可转债策略,Ptrade 提供了便捷的 get_cb_info() 满足基础需求;对于剩余规模、评级和强赎等高阶字段,建议结合 Python 的 requests 模块对接外部专业数据源,以确保“双低策略”和“防强赎机制”的稳定运行。