> Source: https://ashareapi.com/docs/guides/convertible-bond-alerts/  ·  Markdown version for LLMs / AI agents

教程

# 可转债强赎与双低怎么监控
 转债玩家最怕两件事：强赎公告没跑掉（溢价一夜归零）、买在高溢价。这两个风险，`/v1/bond` 一条请求都能提前看到 —— 下面给双低排序与强赎判断的代码。

## 先搞清两个数：双低值与溢价率
 **双低值**是转债圈最常用的"便宜程度"指标，业内通行算法是：

 双低值（通行算法）
```
双低值 = 转债价格 + 转股溢价率 × 100

# 例（sh113052 兴业转债，2026-09-25 实测）：
# 现价（/v1/quote） 112.23 元
# 纯债溢价率 26.35%
# 双低值 138.577 ← 接口直接给
# 双低越低 = 越"便宜"（跌得少、跟涨不差）
```

-
 **溢价率** = (转债价格 ÷ 转股价值 − 1) × 100% —— 衡量"比直接买正股贵多少"

-
 **转股价值** = 100 ÷ 转股价 × 正股价 —— 转债转成股票值多少钱

-
 **双低策略**：在同一时点把全市场转债按双低值排序，取最低的一批（传统是 20 只，轮动持有）

-
 ⚠️ **接口的「双低」口径**：实测 sh113052 = `138.577`，而现价 112.23 + 纯债溢价率 26.35% ≈ 138.58——**接口口径中的「溢价率」项与「纯债溢价率」不同**，不能简单相加。要严格自算，建议先拿原始字段核对一次口径

## 一条请求拿到全部条款

 Python（需要 Key）
```
import requests

KEY = "ct-你的Key"
r = requests.get("https://api.ashareapi.com/v1/bond",
 headers={"Authorization": "Bearer " + KEY},
 params={"code": "sh113052"}, timeout=30)
body = r.json()
print(body["data"][:400]) # ⚠️ 返回是 Markdown 文本，不是 JSON 数组
```

-
 **这是本接口最特别的地方**：`data` 是一段 **Markdown 表格文本**（含主条款 + 明细），不是结构化数组

-
 原样可直接渲染成表格；要程序化用，得先解析（下一节给代码）

-
 免费的 `quote` 也能查转债**现价**（代码同为 `sh113052` 形式）—— 条款用 `/v1/bond`，价格用 `/v1/quote`

## 把 Markdown 解析成字段
 主条款在第一个表格里，是标准的 `| 项目 | 内容 |` 两列结构，几行正则就能取出来。

 Python（可直接运行）
```
import re, requests

KEY = "ct-你的Key"
r = requests.get("https://api.ashareapi.com/v1/bond",
 headers={"Authorization": "Bearer " + KEY},
 params={"code": "sh113052"}, timeout=30)
md = r.json()["data"]

def parse_terms(md: str) -> dict:
 """把第一个 | 项目 | 内容 | 表格解析成 dict"""
 out = {}
 for line in md.splitlines():
 m = re.match(r"\|\s*([^|]+?)\s*\|\s*([^|]*?)\s*\|\s*$", line)
 if not m:
 continue
 k, v = m.group(1), m.group(2)
 if k in ("项目", "---") or set(k) <= {"-"}:
 continue
 out[k] = v
 return out

t = parse_terms(md)
print("双低值 ", t.get("双低"))
print("转股溢价率 ", t.get("纯债溢价率"))
print("转股价值 ", t.get("转股价值"))
print("强赎触发价 ", t.get("强赎触发价"))
print("正股代码 ", t.get("正股代码"))

# 实测输出（2026-09-25）：
# 双低值 138.577
# 纯债溢价率 26.35%
# 转股价值 88.823
# 强赎触发价 26.169 元
# 正股代码 601166
```

## 强赎风险怎么提前发现
 **强赎（强制赎回）是转债玩家最大的坑**：公司宣布按 ~100 元赎回，而转债市价可能是 130 元 —— 不跑就按 100 块被收走，**溢价瞬间归零**。
 判断逻辑很简单：**拿正股现价和强赎触发价比**。

 Python（需要 Key）
```
# 强赎触发条件（多数转债）：正股连续 15/30 个交易日收盘 ≥ 转股价 × 130%
# 接口给的「强赎触发价」就是这个阈值，直接和正股价比

trig = float(t["强赎触发价"].replace("元", "").strip()) # 26.169
stock = requests.get("https://api.ashareapi.com/v1/quote",
 params={"code": "sh601166"}).json()["data"][0]
price = float(stock["last"])

print(f"正股 {price} / 触发价 {trig} = {price / trig:.1%}")
if price >= trig:
 print("⚠️ 已超强赎触发价 —— 留意公司是否发强赎公告")
elif price >= trig * 0.95:
 print("⚡ 接近触发价（95%+）—— 进入观察区")
else:
 print("暂无强赎压力")
```

-
 **关键提醒**：达到触发价 ≠ 一定强赎 —— **公司可以选择不强赎**。触发价是"提醒你去看公告"，不是"必然发生"

-
 真正的信号是**公司公告**；接口的 `赎回条款详情` 表能看到历史赎回档位与起始日

-
 **高溢价 + 接近强赎** = 最危险组合：一旦公告，高溢价部分直接归零

## 双低排序：从一只到一篮子
 单只转债看双低没意义 —— **双低是排序指标**，要在一批标的里比。做法：先拿转债池（用代码列表或你自选的池子），逐个调接口，再排序。

 Python（需要 Key）
```
import time

codes = ["sh113052", "sz123138", "sh110043"] # 你的转债池
rows = []
for c in codes:
 try:
 b = requests.get("https://api.ashareapi.com/v1/bond",
 headers={"Authorization": "Bearer " + KEY},
 params={"code": c}, timeout=30).json()
 t = parse_terms(b["data"])
 rows.append((c, t.get("正股代码", ""), float(t.get("双低", 999)),
 t.get("纯债溢价率", "")))
 except Exception as e:
 print(c, "失败:", e)
 time.sleep(0.3) # 温和限流，别打太快

for c, stock, dl, prem in sorted(rows, key=lambda x: x[2]):
 print(f"{c} 正股 {stock} 双低 {dl:>7.2f} 溢价 {prem}")
```

-
 **我们不做全市场转债批量列表** —— 转债池要你自己准备（或用 `/v1/search?q=转债名` 逐个确认代码）

-
 **双低不是越低调越好**：小盘 + 低评级 + 临近到期的"便宜"可能是**信用风险**，不是机会

-
 **不要在盘中高频循环**：条款数据不需要秒级刷新，收盘后跑一遍就够

## 常见错误与边界

-
 **把 `data` 当 JSON 数组** → 它是 Markdown 字符串，要正则解析（见上）

-
 **以为双低是接口算的** → 接口**直接给了**「双低」字段（值 = 价格 + 溢价率×100），但转债池排序要你自己做

-
 **达到强赎触发价就慌着卖** → 触发 ≠ 强赎，**以公司公告为准**

-
 **忽略回票价** → 实测中兴业转债「回售触发价」为 `0 元`，意思是**该债当前不适用回售条款**，不是"回售价是 0"

-
 **单位** → 现值/触发价值带「元」，百分比带「%」，解析后转 float 记得剥掉

-
 **限流** → `/v1/bond` 是付费端点（需 Key）；匿名只能调 5 个免费端点

## 常见问题
 为什么 /v1/bond 返回的是 Markdown 而不是 JSON？
 条款表字段多且层级不同（主条款 + 利率变动 + 赎回条款 + 修正条款 + 现金流），Markdown 表格更贴近"给人看"的形态，也能直接渲染。要程序化用，按教程里的 `parse_terms()` 解析第一个表格即可。

 双低值是怎么算的？可以直接信吗？
 接口**直接返回**「双低」字段。业内通行口径是「转债价格 + 转股溢价率 × 100」，但**本接口的溢价率项与「纯债溢价率」字段不同**（实测 sh113052：双低 138.577，而现价 112.23 + 纯债溢价率 26.35% ≈ 138.58，数字接近但**不能直接相加得出**）。所以：**接口给的双低直接用**，要严格自算就先用原始字段核对一次口径。

 能批量拿全市场转债吗？
 **不能** —— 我们不提供全市场转债列表批量导出。做法是自备转债池（代码列表），逐个调 `/v1/bond`，再本地排序。想省事可以先用 `/v1/search?q=转债名` 确认代码。

 强赎触发价 26.169 是什么意思？
 这是"正股价达到多少会触发强赎条件"的阈值（通常是转股价的 130%）。实际规则是"**连续 15/30 个交易日**收盘价 ≥ 触发价"才构成强赎条件，且**公司可以选择不强赎**。所以它是个提醒信号，不是预测。

 转债的行情价怎么看？
 用 `/v1/quote?code=sh113052`（**免费**，无需 Key）—— 转债代码与股票同格式。`/v1/bond` 只管条款，价格用 quote。

 最后更新: 2026-09-25
 字段与取值取自线上真实返回（2026-09-25 实测 sh113052 兴业转债：双低 138.577 · 纯债溢价率 26.35% · 转股价值 88.823 · 强赎触发价 26.169 元 · 回售触发价 0 元 · 正股代码 601166；返回为 Markdown 表格文本，含 4 个明细表）。双低算法为业内通行口径，各平台细节可能不同；强赎规则以可转债募集说明书与公司公告为准。

 接着看

-
[端点文档（含 bond / quote / search）](/endpoints)

-
[从 AkShare 迁移（bond_zh_cov 对照）](/docs/guides/migrate-from-akshare)

-
[用数据量化 A股市场情绪（全免费端点）](/docs/guides/market-mood)

-
[错误码与限流](/docs/errors)

 [← 全部教程](/docs/guides)
