问题描述
解决方案
在PTrade中,获取所有可转债列表及其详细信息(包括溢价率),主要使用以下两个API接口:
get_cb_list(): 获取当前市场所有可转债的代码列表。get_cb_info(): 获取可转债的基础信息表,该表直接包含溢价率 (premium_rate)、转股价、到期日等详细字段。
代码实现
以下是一个完整的策略示例,展示如何在 before_trading_start 阶段获取并打印这些信息:
def initialize(context):
# 初始化设置,这里设置一个股票作为占位,防止回测报错
g.security = '600570.SS'
set_universe(g.security)
def before_trading_start(context, data):
# 1. 获取所有可转债代码列表
cb_codes = get_cb_list()
log.info("当前市场可转债总数: %s" % len(cb_codes))
# 2. 获取可转债详细信息(返回的是一个DataFrame)
# 注意:此函数依赖券商的数据权限,如无权限可能返回空DataFrame
cb_info_df = get_cb_info()
if cb_info_df is not None and not cb_info_df.empty:
# 打印前5行数据查看结构
log.info("可转债详细信息示例(前5条):")
log.info(cb_info_df.head())
# 3. 筛选或查看特定字段,例如:代码、名称、溢价率
# 选取溢价率(premium_rate)最低的5只可转债
# 注意:数据中的溢价率通常是百分比的小数形式或具体数值,需根据实际返回确认
if 'premium_rate' in cb_info_df.columns:
# 按溢价率升序排序
sorted_df = cb_info_df.sort_values(by='premium_rate', ascending=True)
log.info("溢价率最低的5只可转债:")
for index, row in sorted_df.head(5).iterrows():
log.info("代码: %s, 名称: %s, 溢价率: %s, 正股代码: %s" % (
row['bond_code'],
row['bond_name'],
row['premium_rate'],
row['stock_code']
))
else:
log.info("未获取到可转债详细信息,请检查数据权限。")
def handle_data(context, data):
pass
详细说明
1. get_cb_list()
- 功能: 返回包含当前所有可转债代码的列表(List)。
- 返回值示例:
['110033.SS', '113008.SS', ...]
2. get_cb_info()
- 功能: 返回一个
pandas.DataFrame,包含了可转债的静态和动态基础数据。 - 关键字段:
bond_code: 可转债代码bond_name: 可转债名称stock_code: 正股代码stock_name: 正股名称premium_rate: 溢价率 (这是您重点关注的字段)convert_price: 转股价格convert_value: 转股价值maturity_date: 到期日list_date: 上市日期
注意事项
- 数据权限:
get_cb_info()属于高级数据接口,部分券商环境可能需要开通特定的基础数据权限才能获取到非空数据。 - 数据更新: 该接口返回的数据通常是基于最近一个交易日收盘后的数据。如果在盘中需要实时计算溢价率,建议使用
get_snapshot获取可转债实时价格和正股实时价格,结合get_cb_info中的转股价自行计算(公式:转股价值 = 100 / 转股价 * 正股现价,溢价率 = (转债现价 - 转股价值) / 转股价值)。 - Python版本: 代码使用了
%s格式化字符串,兼容 Python 3.5 及以上版本(PTrade 常用环境)。
Q&A
Q: get_cb_info 返回的溢价率是实时的吗?
A: 通常情况下,get_cb_info 返回的是静态或日频更新的基础信息。如果在交易时间的盘中需要毫秒级的实时溢价率,建议通过 get_snapshot 获取转债和正股的实时 last_px,配合转股价手动计算。
Q: 为什么调用 get_cb_info 返回了空的 DataFrame?
A: 这通常是因为账号没有开通可转债基础数据的权限。请联系您的券商或管理员确认是否拥有该数据的访问权限。
Q: 如何获取可转债的实时买一、卖一价格?
A: 可以使用 get_snapshot(security_list) 函数,传入可转债代码列表,即可获取实时的盘口数据(如 bid_grp, offer_grp)。