【Python量化实战全攻略 #27】可转债双低策略手册:价格+溢价双低组合(附代码)
摘要:【Python量化实战全攻略 #27】可转债双低策略手册:价格+溢价双低组合(附代码) 手册定位:模块四第 3 篇。双低策略是转债最经典的「债底保护+低溢价」组合——价格低(债底厚)且溢价率低(股性强),攻守兼备。本
手册定位:模块四第 3 篇。双低策略是转债最经典的「债底保护+低溢价」组合——价格低(债底厚)且溢价率低(股性强),攻守兼备。本篇讲怎么用 #08 的比价表构建并定期轮动。
数据来源复用 #08 可转债比价表(/kzz/comparison含 双低 字段)。
1. 你将得到什么
- 用双低值(价格+溢价率) 选转债、等权构建组合的代码;
- 月度轮动(每月重排、剔除强赎)的写法;
- 组合收益 vs 持有的对比思路;
- 双低策略的 4 个坑(强赎条款、流动性、溢价率口径、规模)。
2. 取数约定(复用)
| 用途 | 来源端点 | 见 |
|---|---|---|
| 可转债比价表 | /kzz/comparison(含 双低/价格/转股溢价率) |
#08 |
| 实时行情 | /kzz/spot |
#08 |
3. 数据来源(复用,不重复罗列)
详见 #08 可转债与债券接口手册(/kzz/comparison、/kzz/spot)。
4. 核心模板函数(自包含可跑)
import pandas as pd
_MOCK = True
def build_double_low(df, top_n=20):
out = df.sort_values("双低").head(top_n).copy()
out["权重"] = 1.0 / top_n
return out
def rebalance_monthly(universe_by_month):
holds = {}
for m, df in universe_by_month.items():
holds[m] = build_double_low(df, top_n=20)["代码"].tolist()
return holds
def run_check():
df = pd.DataFrame([
{"代码": "113050", "名称": "某转债", "价格": 108.0, "转股溢价率": 0.12, "双低": 120.0},
{"代码": "113051", "名称": "另转债", "价格": 115.0, "转股溢价率": 0.20, "双低": 135.0},
{"代码": "113052", "名称": "三转债", "价格": 102.0, "转股溢价率": 0.08, "双低": 110.0},
])
port = build_double_low(df, top_n=2)
assert port["代码"].tolist() == ["113052", "113050"]
assert abs(port["权重"].sum() - 1) < 1e-9
print("校验通过 | 组合:", port["代码"].tolist(), "权重:", port["权重"].round(2).tolist())
return port
if __name__ == "__main__":
run_check()
5. 跑通示例
port = run_check()
print("双低组合前2:", port[["代码", "双低", "权重"]].to_dict("records"))
6. 坑与注意事项
- 强赎条款:双低榜常出现「即将强赎」的转债,要剔除已公告强赎标的。
- 流动性:部分小盘转债日成交不足百万,要设最小成交额阈值。
- 溢价率口径:转股溢价率有正负,统一符号后再算双低。
- 规模:双低常偏向小规模转债,组合要控制单券规模下限。
7. 小结与下一篇预告
可转债双低策略给「稳健+弹性」的组合。下一篇讲ETF 轮动策略——用动量在宽基/行业 ETF 间轮动。
下一篇预告:《【Python量化实战全攻略 #28】ETF 轮动策略手册:动量轮动宽基、行业ETF(附代码)》
8. 免责声明
本文为转债策略示例,演示数据为虚构,不构成投资建议。
关于数据来源:本文双低策略所需的可转债比价表接口来自智兔数服(www.zhituapi.com)官方文档(详见本系列 #08),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲 ETF 轮动。
想亲自试一下?免费获取证书