指数顶底区域仪表盘(Index Zone Dashboard)
Overview
为任意 A 股宽基/行业指数生成“顶底区域 × 趋势方向”三联仪表盘,回答两个问题:现在处于历史什么区域(RS 水平 5 年滚动分位的极端带)与趋势方向如何(MA200 闸门 + 年化斜率)。支持两种参照系:
- 底层尺模式(bottom):RS = 指数/中证全债(H11001),回答“股债轮动到哪了”,所有指数横向可比
- 风格尺模式(style):RS = 指数A/指数B,回答“风格轮动到哪了”(如 500/300 大小盘、科创50/创业板指 硬科技内部、国证成长/国证价值 成长价值)
三联结构:① 主图(价格月K或RS比值 + MA200 + 区域底色 + 事后大顶大底▲▼)② RS分位温度计 ③ MA200 年化斜率。
定位声明:观察分析框架,非交易信号;所有输出须带“非投资建议”性质标注。
工作流(五步)
1. 确认指数与参照系
- 用户只给指数名 → 默认底层尺(vs 中证全债),保证与历史各版本横向可比
- 用户问“谁比谁强/轮动” → 风格尺;选尺原则见
references/interpretation.md(问什么用什么尺、尺与被测物要有差异、换尺后阈值须重测) - 已验证指数的 TDX 代码、历史可靠性与已知问题 → 查
references/workflow.md的代码表
2. TDX 取数(多分页)
- 需要连接 tdx-connector;用
tdx_kline,参数period=4, tqFlag=0, wantNum=700,从startxh=0开始按 700 递增翻页直到取尽 - 每页结果可能超 token 自动落盘为 txt(记录文件名即可,无需在对话中读取)
- 指数代码与 setcode 对照表、各指数历史可靠性分级 →
references/workflow.md
3. 解析合并 + 数据校验
python <skill>/scripts/parse_tdx_pages.py --dir <落盘目录> --out <code>_daily.csv
校验四点:根数是否约等于年数×243、首日收盘是否符合基日(如 000905 基日 2004-12-31=1000)、末日是否为最近交易日、是否含合成回溯数据(见代码表标注)。
4. 生成仪表盘
# 底层尺(需要 H11001,首次先运行 fetch_bond_index.py)
python <skill>/scripts/fetch_bond_index.py --out raw_index_daily.csv
python <skill>/scripts/plot_zone_dashboard.py --mode bottom \
--num-csv <code>_daily.csv --num-name <中文名> \
--bond-csv raw_index_daily.csv --bond-col H11001 \
--fig-tag <唯一标识> --title "<中文名>版:顶底区域 × 趋势方向 仪表盘(<有效区间>,5年分位预热后)——观察框架,非交易信号" \
[--note "<样本警示或结构特征说明>"]
# 风格尺
python <skill>/scripts/plot_zone_dashboard.py --mode style \
--num-csv <A>_daily.csv --num-name <A名> \
--den-csv <B>_daily.csv --den-name <B名> \
--fig-tag <唯一标识> --title "..." [--note "..."]
# 风格尺实例:成长价值轮动(国证成长399370 / 国证价值399371,setcode=0)
python <skill>/scripts/plot_zone_dashboard.py --mode style \
--num-csv gzgrow_daily.csv --num-name 国证成长 \
--den-csv gzvalue_daily.csv --den-name 国证价值 \
--fig-tag fig18_style_grow_value \
--title "风格尺版:国证成长/国证价值 成长价值轮动仪表盘(2015-03 ~ 2026-10,5年分位预热后)——观察框架,非交易信号" \
--note "<必须含极端带实测占比;底带>25%时注明降级原因>"
脚本会打印关键校验量:有效样本数、<10%/>90% 实测占比、当前 RS/分位/闸门状态/斜率。
5. 解读与交付
- 先看脚本打印的实测分布:双尾(<10% 与 >90% 均有触发)→ 阈值可用;单尾缺失(如 <10% 从未触发)→ 对应区域不可用,解读时如实说明
- 信号分层解读 + 区域×方向组合矩阵 + 样本可靠性分级 →
references/interpretation.md - 用 present_files 交付图片(取数分析任务不调用 tdx_present_research_ui),说明中必须包含样本量与口径限制
- Python 用隔离环境路径(如
/home/KH/.workbuddy/binaries/python/envs/default/bin/python);需 pandas + matplotlib,中文字体优先 Noto Sans CJK SC
硬性口径(违反则历史读数不可比)
- RS 分位 = RS 水平(比值)的 1250 日 rank,不是
rs.pct_change()的 rank——两种口径读数差异巨大,校验时最易踩 - 斜率 = (ma200/ma200.shift(21)-1)×100×12(月度×12),不是 ×252
- 区域阈值固定 10%/90%,但每次都须用实测分布确认
- H11001 官网数据滞后数日 → 底层尺 RS 末端止于全债最后日期属正常;风格尺不依赖全债,数据可更新至最近交易日
- 极端带实测占比 >25% 即降级:该带区域信号视为"结构特征"而非稀有事件(如国证成长/价值底带 32.2%);双尾之一为 0 或 >50% 则分位整体不可用(如科创50/300 顶带 52.2%)
定时更新(如需做成周期任务)
- 风格尺可当日盘后更新(15:00 后 TDX 即有当日 K 线,不依赖全债);底层尺受 H11001 滞后 T+2~T+4 限制,宜周更
- 推荐周更(周五盘后):分位日间变动中位仅 0.6~0.8pp,周更几乎不损失信息;闸门穿越平均 1.3~4.8 个月一次,日更全图多为重复,若日更建议只监控"闸门状态位是否变化"
- 更新流程 = 增量取数(每尺只拉 startxh=0/700 两页)→
merge_recent.py并入既有 CSV →fetch_bond_index.py刷新全债(写独立文件,勿覆盖多列原始表)→run_full_set.py两套配置重跑 → 对比上次读数只报告变化
周更/定时更新专用脚本
# 增量合并:新拉的 TDX 分页并入已有 CSV(新页优先、Code 校验防串仓、坏页跳过)
python <skill>/scripts/merge_recent.py --csv <目标>.csv --dir <落盘目录> \
--pattern "mcp-tdx-connector-tdx_kline-<本次时间戳>*.txt" --code <代码> --out <目标>.csv
# 也可 --files "a.txt,b.txt" 显式列文件;重要:raw_decode 不跳前导空白(已修复,勿回退)
- 增量只需 2 页/尺(wantNum=700 覆盖约 2.8 年,远超 1250 日窗口所需)
--pattern是全名 glob,必须含完整前缀mcp-tdx-connector-tdx_kline-;同批取多个指数时用--code过滤防串仓- 全债写独立文件(如
bond_h11001.csv),不要覆盖历史多列的raw_index_daily.csv - 合并后核对三点:末日是否为最近交易日、总根数只增不减、收盘价与行情快照一致
标准交付 = 一张总图 + 每条尺一套三联详图(一键成套)
python <skill>/scripts/run_full_set.py --config <board配置>.json --outdir <输出根目录>
- 输出
<outdir>/<set_tag>/board.png(综合板,结论前置)+ 每条尺一张s{i}_{名}_dashboard.png三联详图(编号与总图行号一致) - 单尺详图自动生成标题/警示行:区间取分位预热后有效段、警示行写实测双尾占比、极端带>25% 自动加降级标注、底层尺附全债滞后说明
- 分位不可用的尺自动跳过单尺图(如中证A500),趋势结论只保留在总图行内——不要为凑图放宽窗口或掺入合成数据
- 两份已验证配置:
board_config.example.json(风格三尺)、board_config_bond.example.json(底层四尺)
多尺综合仪表板(结论前置版,用户要"一眼看明白"时用)
python <skill>/scripts/plot_multi_style_board.py --config board_config.json --outdir .
- 配置 JSON:
pairs数组(每项 label/role/num_csv/num_name/den_csv/den_name),role 可选growth_main/growth_aux/size,用于跨尺一致性核对 - 支持两种模式(按 pair 的
mode字段):style(默认,RS=指数/指数)与bottom(RS=指数/全债,需bond_csv/bond_col,闸门作用于指数价格MA200)——底层尺模式下综合结论自动输出"股债相对位置排序"(分位越低越接近底部区) - 回溯合成数据防线:pair 加
real_start字段即剔除合成段,真实样本不足5年自动判"分位不可用"(温度计灰显、区域不指认、只给趋势结论)——中证A500 必须设real_start: 2024-09-20 - 输出:每尺一行(主序列+MA200+区域底色 | 分位温度计),行标题即结论短语,顶部横幅为跨尺综合结论,结论同时打印到 stdout
- 已验证配置:①风格三尺(国证成长/价值 主 + 创业板/300 辅 + 500/300 大小盘);②底层三尺(沪深300、中证A500、创业板指 vs H11001,全债滞后 T+2~T+4 须在标题注明数据截至日)
- 结论规则:趋势=闸门×斜率四象限;区域=分位五档(<10极弱/<25偏弱/25~75中性/>75偏强/>90极强);极端带实测占比>25% 自动加"结构特征"降级标注
Resources
scripts/plot_zone_dashboard.py— 参数化三联仪表盘(bottom/style 双模式),完整口径注释scripts/plot_multi_style_board.py— 多尺综合仪表板(结论前置、主辅尺一致性核对),配置 JSON 驱动scripts/run_full_set.py— 一键成套:总图 + 每条尺一张三联详图(标准交付入口)scripts/merge_recent.py— 周更增量合并(新页并入既有 CSV,Code 校验、坏页跳过)scripts/board_config.example.json/scripts/board_config_bond.example.json— 风格套 / 底层套配置模板scripts/parse_tdx_pages.py— TDX 落盘 txt 解析合并(含去重与首末日校验输出)scripts/fetch_bond_index.py— 中证官网拉取 H11001(底层尺参照系)references/workflow.md— 指数代码表、TDX 取数参数细节、数据可靠性分级、已知坑清单references/interpretation.md— 信号分层、区域×方向组合解读、参照系选择原则、话术模板