Skip to content

reskfa/cb_with_any_api

Repository files navigation

CB with Any API

A股可转债统一数据接口。对接多种数据源,输出统一的 Pandas DataFrame 格式,用于可转债的统计分析、量化研究和策略开发。 我们也提供了开源数据的历史实例,用户更新即可。

Unified data interface for A-share convertible bonds (可转债). Supports Wind, Tushare, akshare — outputs consistent Pandas DataFrames with auto-computed YTM, implied volatility, Greeks.We also have history data from opensource, users can just get start from update.

这个项目是干嘛的?—— 不要配数据库了。

A股可转债研究者面临一个现实问题:数据源要么贵,要么乱的满地都是,互相还不通用。各家 API 的字段名、单位、返回格式都不一样,还没开始做研究,配个数据库半条命就搭进去了。那么万一你有幸换一个数据源,重写的感觉跟好容易碰巧过了 boss 却没保存一样令人心旷神怡...

本项目将各数据源的差异封装在 reader 层,上层分析代码只需要面对统一的 cb_data 对象。

你,用户,本项目的大爷(二声,表尊敬的那种),直接得到 DataFrame,直接开始你的研究。

数据源支持

数据源 状态 说明
Wind ✅ 完成 全字段支持,需要 Wind 终端
Tushare ✅ 完成 需要 pro api,自行申请,性价比高,本项目将自行计算ts没有的字段,如 ytm、隐波
akshare ✅ 完成 免费开源数据源
jqdata ✅ 完成 聚宽数据

data文件夹

里面有经验证的历史数据,可以做示例,也可以直接用

核心数据结构

from cb_with_any_api import cb_data

obj = cb_data()
obj.loadData("data/newt")         # 加载历史数据,data 是放数据的文件夹,newt 是我自己随便加的一个前缀
obj.update("2026-02-13", method="tushare")  # 增量更新,wind|tushare|akshare 均可

# obj.DB — 字典,每个 key 是一个 DataFrame (index=日期, columns=券代码)
# 但你也可以直接引用下面字段,效果一样
obj.DB['Close']       # 收盘价,或者直接 obj.Close,效果相同
obj.DB['Amt']         # 成交额
obj.DB['ConvV']       # 转股价值
obj.DB['ConvPrem']    # 转股溢价率
obj.DB['Strb']        # 纯债价值
obj.DB['StrbPrem']    # 纯债溢价率
obj.DB['Outstanding'] # 剩余规模
obj.DB['YTM']         # 到期收益率
obj.DB['Ptm']         # 剩余期限(年)
obj.DB['ImpliedVol']  # 隐含波动率

# obj.panel — 静态信息 DataFrame (index=券代码)
obj.panel             # 券名、正股代码、行业、赎回价、条款参数等

# 常用属性
obj.date              # 数据最新日期
obj.codes             # 全部券代码
obj.codes_active      # 当日有交易的券
obj.matNormal         # 过滤异常券后的有效矩阵

快速开始

1. 安装依赖

pip install pandas numpy scipy tushare akshare
# 可选: WindPy (需 Wind 终端), jqdatasdk

2. 配置 API 凭证

编辑 const.py:

wind_available = False            # 没有 Wind 设为 False
ts_token = 'your_tushare_token'
jqdata_username = ''
jqdata_password = ''

3. 使用

from cb_with_any_api import cb_data

obj = cb_data(file_type="csv")
obj.loadData("data/newt")
obj.update("2026-02-13", method="tushare")

# 当日活跃券的转股溢价率
prem = obj.ConvPrem.loc[obj.date, obj.codes_active]
print(prem.describe())

项目结构

cb_with_any_api.py   # 核心类 cb_data,统一接口层
wind_reader.py        # Wind 数据适配器
tushare_reader.py     # Tushare 数据适配器(含 YTM/Ptm/ImpliedVol 计算引擎)
greeks.py             # 希腊字母计算(Delta/Gamma/Theta/Vega,考虑退市风险)
const.py              # API 凭证配置(不要提交到 git)
参数.xlsx              # 字段映射表(Wind/Tushare/同花顺 字段对照)

Tushare 字段对接细节

直接从 cb_daily 获取的:Amt, Close, ConvV, ConvPrem, Strb, StrbPrem

自行计算的:

  • YTM — 从 cb_rate (票息) + cb_basic (赎回价) 构建现金流日历,Newton 法求解,结果缓存至 cb_cashflow_calendar.pkl
  • Ptm — 从 cb_basic.maturity_date 计算,全量缓存至内存
  • ImpliedVol — BS 定价模型 + 二分法反推,跨日期x跨券全矢量化
  • Outstanding — 从 cb_share.remain_size 获取变动记录,ffill 到交易日

已知的数据源差异(详见 test_0224.md):

  • Tushare close 为全价,Wind 为净价,差异 = 应计利息
  • Ptm 对已公告强赎的券使用原始到期日(Wind 用强赎日)

Roadmap

  • Wind 全字段对接
  • Tushare 全字段对接 + 自计算引擎
  • 静态面板数据 (panel) Tushare 支持
  • jqdata 适配器
  • akshare 适配器
  • Agent-readable 版本 — 将转债数据库封装为 AI Agent 可调用的 Skill

License

MIT

Stars

如果有用,求个 Star 呗~

About

A 股可转债统一接口,适应各种常见 api,用户直接操作 DataFrame,免去查字典、配置、统一化麻烦。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages