可转债 ETF 申赎跟踪
Purpose
只通过 AkShare 调用公开数据源,对单只可转债 ETF(默认 511380.SH 转债ETF博时)生成可审计的日度申赎跟踪报告。把“申购/赎回”严格解释为交易所披露的 ETF 总份额的净变化,不把估算值表述为基金管理人披露的原始申购、赎回成交总额。
执行前必须阅读 references/methodology.md。
Data Sources
本 Skill 固定为 AkShare only。不要引入 Tushare、Wind、iFind 或网页手工拼接:
- 交易日历:
tool_trade_date_hist_sina - 上交所 ETF 份额:
fund_etf_scale_sse(date=...)(逐日调用) - 深交所 ETF 份额:
fund_scale_daily_szse(symbol="ETF")(一次覆盖窗口,仅当代码为 1xxxxx 时) - 日度收盘价估值:
fund_etf_hist_em(symbol=..., period="daily", adjust=""),失败时降级到fund_etf_hist_sina(symbol="sh511380") - 基金全称补充:
fund_etf_category_sina(symbol="ETF基金"),失败时尝试fund_etf_spot_em
所有底层站点均通过 AkShare 访问。报告必须同时披露 AkShare 版本、接口状态、返回行数、底层来源、实际交易日与失败原因。
Workflow
1. 确定标的与窗口
- 默认标的
511380(转债ETF博时,上交所)。用户指定其他转债 ETF 时用--code XXXXXX;5 开头走上交所接口,1 开头走深交所接口。 - 未指定日期时,窗口结束于当前上海日期之前最近的已完成 A 股交易日;用户指定时用
--trade-date YYYYMMDD,若不是交易日则停止并说明。 - 窗口长度默认 20 个交易日,用
--lookback N调整。不按自然日猜测,不把周末或节假日当成零流量日。 - 上交所份额接口只能逐日拉取,单日约 1–2 秒;脚本会把已取得的日度份额写入
cb_etf_flow_share_cache_{code}.csv,重复运行时只补新交易日。首次拉长窗口(如 60 日)需要几分钟,属于正常现象,可用后台方式执行。 - 需要强制重建全部历史时加
--refresh。
2. 运行确定性脚本
从本 Skill 目录运行:
python3 scripts/cb_etf_flow.py --output-dir /absolute/output/path
指定标的、日期或窗口时:
python3 scripts/cb_etf_flow.py \
--code 511380 \
--trade-date 20261017 \
--lookback 60 \
--output-dir /absolute/output/path
如果缺少 AkShare,先报告环境问题。只有用户要求升级时才执行包升级;不得静默改变其 Python 环境。
3. 执行强制质量门槛
- 交易日历、窗口内每一天的份额数据和价格数据都是必需组件;单日失败会自动重试一次,重试仍失败即停止,不发布有缺口的序列。
- 份额必须为正、日期必须逐日匹配;窗口首尾份额差必须等于逐日份额变化之和(对账不一致即停止)。
- 任一交易日缺少有效收盘价时停止汇总,不发布不完整流量。
- 逐项报告
components的status/error/rows/source;不因程序退出码为 0 就宣称数据完整。
4. 解释结果
依次输出:
- 标的代码与名称、数据日期、AkShare 版本与“仅使用 AkShare”的来源声明。
- 最近一个交易日的份额净变化(万份、百分比)与估算净流量(亿元)。
- 窗口累计净流量与方向(净申购/净赎回/申赎平衡),近 5 日与近 20 日分项。
- 净申购/净赎回/份额不变天数,单日最大净申购与净赎回及对应日期。
- 最近十个交易日明细表。
- 所有失败或重试组件,以及结果是否因此存在缺口。
输出文件固定为:
cb_etf_flow_{code}_YYYYMMDD.md:阅读版cb_etf_flow_{code}_YYYYMMDD.csv:窗口内逐日份额、变化、价格与估算流量cb_etf_flow_{code}_YYYYMMDD.json:结构化结果与接口健康状态cb_etf_flow_history_{code}.csv:按交易日去重累积的长期历史(可用--no-history关闭),cumulative_flow_yi按整个历史文件重算,用于跨期趋势与分位判断
5. 与全市场报告衔接
需要把转债 ETF 申赎放进市场背景时,先运行本 Skill 得到标的序列,再用 $china-etf-flow-premarket 对照全市场非货币 ETF 的同日净流量方向。单日大额净申购或净赎回不能独立证明转债市场见底或见顶。
China-Specific Considerations
- 代码统一为
XXXXXX.SH或XXXXXX.SZ,避免跨源合并时丢失交易所后缀。 - 份额统一为万份,金额统一为亿元人民币。
- 金额估算使用当日收盘价;转债 ETF 为债券型品种,市价与净值偏离通常很小,但收盘价的估溢价仍会带来误差,报告中必须保留这一口径说明。
- ETF 拆分、合并、上市或终止可能造成结构性份额变化;窗口内出现单日份额变化超过 50% 时必须单独提示,不能直接解释为主动资金方向。
- 结果只用于研究和仓位环境判断,不执行交易,不承诺方向。
Quality Checks
交付前确认:
- [ ] 窗口内每一天均来自 A 股交易日历,且窗口结束日不晚于最近已完成交易日。
- [ ] 数据调用全部通过 AkShare,输出与程序中不存在 Tushare 依赖。
- [ ] 窗口内每日份额与收盘价完整,无缺日、无重试后仍失败的组件。
- [ ] 首尾份额差与逐日变化之和对账一致。
- [ ] 份额变化与金额为正时称净申购,为负时称净赎回,符号方向没有写反。
- [ ] 历史文件按交易日去重后累积,未重复写入同一日期。
- [ ] 报告没有把份额净变化误称为原始申购赎回成交总额。