全市场存续可转债的静态基础信息快照 (semi-static fields),由 TermsBundle 维护。
runtime 会优先从此文件读转债基础信息,避免每次启动都打 Wind 接口。
{
"_bundle_meta": {
"updated_at": "2026-04-27T15:30:00",
"source": "Wind",
"n_bonds": 532
},
"128009.SZ": {
"sec_name": "...",
"underlying_code": "002...",
"issue_date": "2020-07-30",
"listing_date": "2020-08-17",
"tradable_date": "2020-08-17",
"is_tradable": true,
"trading_status": "tradable",
"maturity_date": "2026-07-30",
"conversion_price": 52.77,
"redemption_price": 107.0,
"coupon_rates": [0.003, 0.004, ...],
...
"_meta": {"fetched_at": "...", "source": "wind"}
},
...
}| 场景 | 命令 |
|---|---|
| 月初定期 (新债/退市/下修) | python -m convertible_bond.cli.sync_tradable |
| 每日状态字段 (停牌/强赎/ST/成交额等) | python -m convertible_bond.cli.sync_admission_status |
| 公告事件 (下修/强赎/回售等) | python -m convertible_bond.cli.sync_events --apply |
| 查看公开交易主池报告 | python -m convertible_bond.cli.screen_pool |
| 单只债的事件后 | GUI 顶部 🔄 按钮 |
| 仅查看当前状态 | python -m convertible_bond.cli.sync_tradable --info |
- 转债基础信息: 固定由 WindPy 获取并写入
cb_data.json,覆盖下修/强赎/回售触发比例、回售观察期、完整付息计划等 akshare 缺失字段。 - 动态行情/股息率/利率: GUI 和批量定价中可选择 Wind 或 akshare。正股股息率会按行情源实时获取,取不到时模型参数
q回退为 0;akshare 无法返回无风险利率时,程序放弃接口获取并保留界面/参数中的手工值。
listing_date: 数据源返回的上市/挂牌日期;没有显式字段时可能与issue_date相同tradable_date: 进入可交易或关注窗口的日期;定向/非标准代码段若无明确字段,默认用上市/发行后 6 个月估算is_tradable: 同步日视角是否已进入可交易日期trading_status:tradable/pending/private_pending/private_tradable/private_unknownsuspension_status: 停牌/暂停交易等补充状态call_status,call_announce_date,call_redemption_date: 强赎公告和执行状态down_reset_trigger_pct,call_trigger_pct,put_trigger_pct: 下修 / 强赎 / 回售触发比例,单位为%K。下修触发缺失时, 定价层显式使用85%K作为模型默认。last_trading_date,delisting_date: 最后交易日 / 摘牌日;已过最后交易日或已摘牌时从主池剔除underlying_name,underlying_status: 正股名称与风险状态,用于识别 ST / 退市风险bond_turnover_amount: 转债成交额,口径由数据源决定;用于风险标签和复核,不作为默认硬剔除
这些字段由 convertible_bond.admission_status 做增量刷新。刷新时只会写入数据源明确返回的非空值;
如果 Wind 某个候选字段不可用,不会清空本地已有值或人工维护值。
批量定价主池只硬剔除转债本身不能公开交易的标的:
- 不可交易或尚未进入可交易窗口
- 停牌 / 暂停交易
- 已过最后交易日、已摘牌或已到期
- 非沪深普通公募代码段,或名称明确为定向 / 非公开交易转债
强赎、临近摘牌、正股 ST / 停牌、低成交额、小余额、低评级等不再硬剔除; 这些信息进入风险标签、复核视图或单债提示,避免把仍可公开交易的债误杀。
这些字段不会由 Wind 自动同步,适合记录“不下修”等公告事件:
down_reset_block_until: 该日期前不计下修博弈;无cb_events/down_reset_overrides.json时作为 fallbackdown_reset_p_scale: 单债下修强度事件乘数,作用于基础p_down;0表示完全不计下修博弈,0.25表示按基础强度的 25%down_reset_note: 覆盖原因或公告摘要
- 此文件是 git 跟踪的,提交前可
git diff检查变化是否合理 (例如下修后只该影响一只债) - 下修事件之后,建议手动 🔄 刷新对应债 而不是等月度全量同步,避免短期定价偏差
- 读取
cb_data命中时不会请求 Wind;正股价格、历史波动率、股息率、Shibor 等动态字段仍会按选择的行情源请求
结构化公告事件表。它和 cb_data.json 解耦,用于记录有时间属性的公告:
down_reset_proposed: 提议下修down_reset_approved: 下修通过 / 转股价格调整down_reset_rejected: 不下修conversion_price_adjusted: 权益分派等导致的转股价格调整call_redemption: 公告强赎call_no_redemption: 公告不强赎putback: 回售rating_change: 评级调整delisting: 摘牌 / 最后交易日suspension: 停牌
文件结构:
{
"_meta": {"updated_at": "2026-04-28T18:00:00"},
"events": [
{
"bond_code": "118006.SH",
"event_date": "2026-04-15",
"event_type": "call_redemption",
"raw_title": "关于实施赎回暨摘牌的公告",
"effective_start": "2026-04-27",
"effective_end": "2026-05-06",
"parsed_status": "已公告强赎",
"source": "Wind"
}
]
}同步命令:
python -m convertible_bond.cli.sync_events --limit 50
python -m convertible_bond.cli.sync_events --codes 118006.SH --apply--apply 会把事件表应用回 cb_data.json 的状态字段,例如强赎公告会写入
call_status / call_announce_date / call_redemption_date,不强赎公告会写入
call_no_redemption_until,不下修公告会写入 down_reset_block_until / down_reset_note。
定价时以 down_reset_overrides.json 和 cb_events.json 中的最新公告为准,避免旧
cb_data 字段挡住后续事件。
会改变模型输入的公告还会生成 cb_terms_patches.json。例如“转股价格调整”
公告会解析调整前/调整后转股价和生效日,写成 conversion_price patch;
明确披露债项信用等级的评级公告会写成 credit_rating patch。
单只和批量定价会先读取 cb_data.json,再按估值日应用这些 patch 和事件状态。
策略回测会通过 HistoricalBondDataProvider 尽量按估值日重建当时可见信息:
- 先从
cb_data_history/YYYY-MM-DD.json选择不晚于估值日的最近一份完整条款快照。 - 再应用
cb_terms_patches.json中effective_date <= 估值日的条款变更。 - 最后应用
cb_events.json中event_date <= 估值日的公告事件。
cb_terms_patches.json 用于记录会直接改变模型参数的字段,尤其是下修后的
conversion_price、评级、余额等。示例:
{
"patches": [
{
"bond_code": "113001.SH",
"effective_date": "2025-02-10",
"field": "conversion_price",
"value": 8.0,
"source": "announcement",
"note": "转股价格调整"
},
{
"bond_code": "113002.SH",
"effective_date": "2025-03-01",
"fields": {
"credit_rating": "AA",
"outstanding_balance": 6.5
}
}
]
}如果没有历史快照,回测会退回当前 cb_data 的静态字段,并清掉强赎、摘牌、
停牌、ST、不下修、成交额等日级/事件状态,再用事件表按日期重建;但当前转股价
等半静态字段仍可能带有未来信息。因此严肃回测应尽量补齐历史快照或条款 patch。