如何筛出发布了强赎公告的可转债
由bq70a209创建,最终由bq70a209 被浏览 1 用户
最近运行可转债三低策略时,发现策略有时候会选中刚刚发布了强赎公告的可转债,这种可转债刚开始下跌,一般跌的比较狠,但正好符合三低策略,会被选中,买入后大概率亏损。所以我想在策略里加入筛选发布了强赎公告的代码,但是看了数据平台中关于可转债的所有表,似乎只有\n可转债信息里的cn_cbond_redemption表有相关的字段,但是我用下面的代码取出这个表里的内容看了下,似乎无法区分发了强赎公告和没发强赎公告的可转债。比如我读取永22转债(3月份刚发布了强赎公告)和华翔转债(正常没有发布强赎公告)这两个转债的这个表的内容 。从读取结果看,两只转债的「赎回公告日」都显示为「无数据」,而date这个字段是判断是否发布强赎公告的核心依据。现有数据仅展示了可转债的基础赎回条款规则(比如触发条件、到期赎回价),而非「是否实际发布过强赎公告」。
所以请问老师,我该如何筛除发布了强赎公告的可转债?
代码如下:
from bigquant import bigtrader, dai import pandas as pd import numpy as np
# 目标转债配置(补充113054完整代码为113054.SH,华翔转债) BOND_CONFIGS = [ {"code": "113653.SH", "name": "永22转债"}, {"code": "113054.SH", "name": "华翔转债"} ]
def initialize(context): context.logger.info("===== 双可转债赎回条款数据对比 =====")
# 1. 通用查询函数:获取单只转债的所有赎回条款数据
def query_bond_redemption(bond_code):
"""读取单只转债在cn_cbond_redemption表的全部记录"""
sql = f"""
SELECT \*
FROM cn_cbond_redemption
WHERE instrument = '{bond_code}'
ORDER BY date DESC
"""
df = dai.query(sql).df()
# 格式化日期字段
date_fields = \[
"date", "cndtn_redemption_sd", "cndtn_redemption_ed",
"redemption_stop_redemption_date", "redemption_stop_transfer_date",
"redemption_audit_ad"
\]
for field in date_fields:
if field in df.columns:
df\[field\] = pd.to_datetime(df\[field\], errors='coerce').dt.strftime("%Y-%m-%d")
df\[field\] = df\[field\].fillna("无数据")
# 空值统一替换
df = df.fillna("无数据")
return df
# 2. 结构化展示单只转债数据
def display_bond_data(bond_code, bond_name, df):
context.logger.info("\\n" + "="\*180)
context.logger.info(f"📋 {bond_name}({bond_code}) 赎回条款完整数据")
context.logger.info("="\*180)
if df.empty:
context.logger.info(f"⚠️ 未查询到 {bond_name}({bond_code}) 的任何赎回条款数据")
return
# 打印数据概览
context.logger.info(f"📊 数据概览:")
context.logger.info(f" 记录数:{len(df)} 条 | 字段数:{len(df.columns)} 个")
# 逐记录展示核心字段(重点对比项)
core_fields = \[
"date", "redemption_clause", "maturity_redemption_price",
"redemption_trigger_price", "redemption_trigger_ratio",
"cndtn_redemption_sd", "cndtn_redemption_ed"
\]
for idx, row in df.iterrows():
context.logger.info(f"\\n--- 第 {idx+1} 条记录(核心字段)---")
for field in core_fields:
if field in df.columns:
# 字段名中文映射,方便对比
field_cn = {
"date": "赎回公告日",
"redemption_clause": "赎回条款文本",
"maturity_redemption_price": "到期赎回价",
"redemption_trigger_price": "强赎触发价",
"redemption_trigger_ratio": "强赎触发比例(%)",
"cndtn_redemption_sd": "条件赎回开始日",
"cndtn_redemption_ed": "条件赎回结束日"
}.get(field, field)
context.logger.info(f" {field_cn}: {row\[field\]}")
# 可选:打印所有字段(如需看完整细节,取消注释)
# context.logger.info(f"\\n--- 第 {idx+1} 条记录(所有字段)---")
# for field in df.columns:
# context.logger.info(f" {field}: {row\[field\]}")
# 3. 执行查询并展示每只转债
for bond in BOND_CONFIGS:
bond_code = bond\["code"\]
bond_name = bond\["name"\]
redemption_df = query_bond_redemption(bond_code)
display_bond_data(bond_code, bond_name, redemption_df)
# 4. 核心对比总结
context.logger.info("\\n" + "="\*180)
context.logger.info("🔍 双转债核心字段对比总结")
context.logger.info("="\*180)
compare_data = \[\]
for bond in BOND_CONFIGS:
df = query_bond_redemption(bond\["code"\])
if not df.empty:
row = df.iloc\[0\]
compare_data.append({
"转债名称": bond\["name"\],
"转债代码": bond\["code"\],
"到期赎回价": row\["maturity_redemption_price"\],
"强赎触发价": row\["redemption_trigger_price"\],
"强赎触发比例": f"{row\['redemption_trigger_ratio'\]}%",
"最近公告日": row\["date"\]
})
else:
compare_data.append({
"转债名称": bond\["name"\],
"转债代码": bond\["code"\],
"到期赎回价": "无数据",
"强赎触发价": "无数据",
"强赎触发比例": "无数据",
"最近公告日": "无数据"
})
# 打印对比表格
compare_df = pd.DataFrame(compare_data)
context.logger.info(compare_df.to_string(index=False))
def handle_data(context, data): pass
# 运行代码 performance = bigtrader.run( market=bigtrader.Market.CN_CBOND, frequency=bigtrader.Frequency.DAILY, start_date="2026-03-01", # 不影响转债查询,仅满足bigtrader运行要求 end_date="2026-03-31", capital_base=200000, initialize=initialize, handle_data=handle_data)
performance.render()
读取的结果:
- [2026-03-23 15:10:48] INFO: ===== 双可转债赎回条款数据对比 =====
- [2026-03-23 15:10:48] [info ]
- ====================================================================================================================================================================================
- [2026-03-23 15:10:48] INFO: 📋 永22转债(113653.SH) 赎回条款完整数据
- [2026-03-23 15:10:48] INFO: ====================================================================================================================================================================================
- [2026-03-23 15:10:48] INFO: 📊 数据概览:
- [2026-03-23 15:10:48] INFO: 记录数:1 条 | 字段数:25 个
- [2026-03-23 15:10:48] [info ]
- --- 第 1 条记录(核心字段)---
- [2026-03-23 15:10:48] INFO: 赎回公告日: 无数据
- [2026-03-23 15:10:48] INFO: 赎回条款文本: 1、到期赎回条款在本次发行的可转债期满后五个交易日内,公司将以本次发行的可转债票面面值的115%(含最后一期利息)的价格赎回全部未转股的可转债。
- 2、有条件赎回条款在本次发行的可转换公司债券转股期内,当下述两种情形的任意一种出现时,公司有权决定按照债券面值加当期应计利息的价格赎回全部或部分未转股的可转换公司债券:
- (1)在本次发行的可转换公司债券转股期内,如果公司股票连续三十个交易日中至少有十五个交易日的收盘价格不低于当期转股价格的130%(含130%)。
- (2)当本次发行的可转换公司债券未转股余额不足3,000万元时。当期应计利息的计算公式为:IA=B×i×t/365其中:IA为当期应计利息;B为本次发行的可转换公司债券持有人持有的将赎回的可转换公司债券票面总金额;i为可转换公司债券当年票面利率;t为计息天数,即从上一个付息日起至本计息年度赎回日止的实际日历天数(算头不算尾)。
- 若在前述三十个交易日内发生过转股价格调整的情形,则在调整前的交易日按调整前的转股价格和收盘价格计算,调整后的交易日按调整后的转股价格和收盘价格计算。
- [2026-03-23 15:10:48] INFO: 到期赎回价: 115.0
- [2026-03-23 15:10:48] INFO: 强赎触发价: 21.45
- [2026-03-23 15:10:48] INFO: 强赎触发比例(%): 130.0
- [2026-03-23 15:10:48] INFO: 条件赎回开始日: 2023-02-03
- [2026-03-23 15:10:48] INFO: 条件赎回结束日: 2028-07-27
- [2026-03-23 15:10:48] [info ]
- ====================================================================================================================================================================================
- [2026-03-23 15:10:48] INFO: 📋 华翔转债(113054.SH) 赎回条款完整数据
- [2026-03-23 15:10:48] INFO: ====================================================================================================================================================================================
- [2026-03-23 15:10:48] INFO: 📊 数据概览:
- [2026-03-23 15:10:48] INFO: 记录数:1 条 | 字段数:25 个
- [2026-03-23 15:10:48] [info ]
- --- 第 1 条记录(核心字段)---
- [2026-03-23 15:10:48] INFO: 赎回公告日: 无数据
- [2026-03-23 15:10:48] INFO: 赎回条款文本: 转股期内,当下述两种情形的任意一种出现时,公司有权决定按照债券面值加当期应计利息的价格赎回全部或部分未转股的可转换公司债券:
- ①在本次发行的可转债转股期内,如果公司A股股票连续三十个交易日中至少有十五个交易日的收盘价不低于当期转股价格的130%(含130%);
- ②本次发行的可转债未转股余额不足人民币3,000万元时。
- 当期应计利息的计算公式为:IA=B×i×t/365IA:指当期应计利息;
- B:指本次发行的可转债持有人持有的可转债票面总金额;
- i:指可转债当年票面利率;
- t:指计息天数,即从上一个付息日起至本计息年度赎回日止的实际日历天数(算头不算尾)。
- 若在前述三十个交易日内发生过转股价格调整的情形,则在调整前的交易日按调整前的转股价格和收盘价计算,在调整后的交易日按调整后的转股价格和收盘价计算。
- [2026-03-23 15:10:48] INFO: 到期赎回价: 109.0
- [2026-03-23 15:10:48] INFO: 强赎触发价: 11.557
- [2026-03-23 15:10:48] INFO: 强赎触发比例(%): 130.0
- [2026-03-23 15:10:48] INFO: 条件赎回开始日: 2022-09-05
- [2026-03-23 15:10:48] INFO: 条件赎回结束日: 2028-02-24
- [2026-03-23 15:10:48] [info ]
- ====================================================================================================================================================================================
- [2026-03-23 15:10:48] INFO: 🔍 双转债核心字段对比总结
- [2026-03-23 15:10:48] INFO: ====================================================================================================================================================================================
- [2026-03-23 15:10:48] INFO: 转债名称 转债代码 到期赎回价 强赎触发价 强赎触发比例 最近公告日
- 永22转债 113653.SH 115.0 21.450 130.0% 无数据
- 华翔转债 113054.SH 109.0 11.557 130.0% 无数据
- [2026-03-23 15:10:48] INFO: bigtrader run ..
- [2026-03-23 15:10:48] INFO: bigtrader.run done.
\