| name | chain-radar |
| description | 产业链研究第 0 段 · 行业雷达扫描。激活时机:用户问"研究哪个行业最有价值"、"选赛道"、"板块轮动"。从本地 Tushare DuckDB(1,561 只被动指数型 ETF)出发,用「景气 × 趋势 × 拥挤度」三轴评分筛出值得深入研究的行业 Top 列表。借鉴 invest 多因子 + 三角定位法,与 chain-idea 衔接形成"先选行业 → 再立项"的工作流。 |
📋 SKILL 契约(6 字段 · agent 调用入口)
完整的 行业雷达(可选入口) 段契约。Claude/Codex 调用本段时,只需读这一节。
🎯 触发条件
- 用户问"研究哪个行业/板块最有价值"
- 用户问"还有什么行业值得看" / "赛道轮动"
- 周一定时扫描
- ❌ 不触发:用户已明确具体行业(直接进 chain-idea)
📥 输入文件
- 无必填(从 Tushare DuckDB 自动扫所有 L 状态被动指数型 ETF)
- 可选:
TUSHARE_DB_PATH 环境变量
📤 输出文件
radar.md(行业扫描报告)
radar_scores.json(14 行业 × 3 轴评分)
🔑 必填字段
✅ 验收清单
⚠️ 失败处理
- DB 不存在:
TUSHARE_DB_PATH 未设置 → 清晰提示
- 数据陈旧:近 5 个交易日数据缺失 → 跳过该 ETF
- 三轴全 0:标记为"待观察",不出现在 Top 列表
chain-radar · 行业雷达段(2026-07-06 v4 P1 新增)
灵感:invest 多因子评分 + 三角定位法
产物:radar.md(行业扫描报告)
输入:无(从 Tushare DuckDB 直接扫描所有 L 状态被动指数型 ETF)
输出:行业雷达评分 + Top 行业建议
🎯 这个 skill 干什么
回答用户原话:
"该选择什么行业或者板块研究,有什么标准?"
传统产业链研究的盲点:立项时就已经锁定行业(用户问啥就研究啥),不做横向对比。
chain-radar 解法:在 chain-idea 之前插入一个全行业扫描层,用「景气 × 趋势 × 拥挤度」三轴交叉,从 14 个重点行业里筛出 Top 4-6 个最值得立项的行业。
激活时机:
- ✅ 用户问"研究哪个行业最有价值"、"选赛道"、"板块轮动"
- ✅ 用户问"还有什么行业值得看"(横向扫一遍)
- ✅ 周一定时扫描(自动跟踪主线变化)
- ❌ 用户已明确具体行业(直接进 chain-idea,不跑雷达)
🧠 核心方法论:「景气 × 趋势 × 拥挤度」三角筛选
三轴定义
| 轴 | 指标 | 评分区间 | 含义 |
|---|
| 景气 | 12M 涨幅 | [-25%, +25%] → [0, 10] | 行业过去一年的整体表现 |
| 趋势 | 6M 涨幅(绝对值) | [-25%, +25%] → [0, 10] | 行业近期半年趋势 |
| 拥挤反向 | 1M 涨幅反向 | ≤-10% → 10, ≥+20% → 0 | 短期是否已被充分交易 |
权重与综合
雷达分 R = 0.4 × 景气 + 0.3 × 趋势 + 0.3 × 拥挤反向
评级映射
| 评级 | 阈值 | 含义 |
|---|
| ★★★★★ 强烈推荐 | R ≥ 7.5 且 12M > 5% | 强景气 + 趋势正 + 短期有空间 |
| ★★★★ 推荐 | R ≥ 6.5 | 可立项研究 |
| ★★★ 中性 | R ≥ 5.0 | 不主动立项,特定催化时跟进 |
| ★★ 规避 | R < 5.0 或 12M < -10% | 暂不研究 |
为什么用 ETF 而不是直接用行业指数?
| 维度 | 行业指数 | 行业 ETF |
|---|
| 数据获取 | 部分指数需要付费(中证 / 国证) | ETF 价格免费可得 |
| 实时性 | 日线收盘后 T+1 | 同上 |
| 代表性 | 100% 准确跟踪 | 跟踪误差 0.1-0.5%,可接受 |
| 样本量 | 通常 1 个指数 | 多只 ETF,可用中位数抗噪 |
| 可获取性 | Tushare 部分覆盖 | Tushare DuckDB 完整覆盖 1,561 只 |
→ 用 ETF 中位数作为行业代理,可获取性 + 抗噪性最优。
📐 工作流(可执行版)
1. fetch_radar_data.py
扫 fund_basic L 状态被动指数型 → 1,561 只
拉每只最近 250 个交易日收盘价 → 算 1M/3M/6M/12M 涨幅
按 name + benchmark 关键词 → 行业分类
输出 radar_raw.json
2. calc_radar_score.py
按行业聚合,取中位数(抗噪)
三轴评分 → 雷达分 → 评级
输出 radar_scores.json
3. gen_radar_report.py
出 Markdown 报告
输出 radar.md
🛠 工作流详解
Step 1: 数据采集(全量扫描)
python3 scripts/fetch_radar_data.py /tmp/radar_raw.json
Step 2: 评分
python3 scripts/calc_radar_score.py /tmp/radar_raw.json /tmp/radar_scores.json
Step 3: 报告
python3 scripts/gen_radar_report.py /tmp/radar_scores.json /tmp/radar.md
📊 雷达重点行业(14 个)
RADAR_FOCUS_SECTORS = {
"AI", "半导体/科技", "机器人/智造", "新能源车", "光伏",
"储能/碳中和", "医药生物", "军工", "消费", "金融",
"地产基建", "周期资源", "TMT/传媒", "农业",
}
剔除范围:
- 宽基 ETF(沪深 300 / 中证 500 / 红利 / 央企)
- 债券 ETF
- 商品期货 ETF
- 海外 / 港股 ETF
- 其它主题 ETF(分散主题,无明确行业归属)
📁 scripts/ 目录
chain-radar/
├── scripts/
│ ├── fetch_radar_data.py # 数据采集(DuckDB 只读,1,561 只 ETF 全扫描)
│ ├── calc_radar_score.py # 三轴评分 + 4 类分组
│ └── gen_radar_report.py # Markdown 报告
└── examples/
└── radar-2026-07-06/
├── radar_raw.json
├── radar_scores.json
└── radar.md
🚦 何时启用
| 场景 | 是否启用 | 后续动作 |
|---|
| "研究哪个行业最有价值" | ✅ 必跑 | 选 Top 1-2 行业 → chain-idea |
| "还有什么行业值得看" | ✅ 必跑 | 给用户行业清单,等待选择 |
| "AI 产业链怎么看" | ❌ 跳过 | 直接进 chain-idea |
| "机器人 12M 涨幅多少" | ❌ 跳过 | 用 settlement 阶段处理 |
| 周日 22:00 自动跑 | ✅ 定时 | 飞书推送雷达变化 Top 3 |
🔗 与上下游的契约
上游
下游
- chain-idea:雷达筛出的 Top 行业 → 进入 chain-idea 立项(口径拆分 + 周期/政策前置)
- chain-data:行业研究的环境描述(已在雷达层完成)
- chain-stockmap + chain-settlement:最终选股落地
与 chain-cycle 的关系
- 雷达的"景气轴"本质是价格层面的周期位置
- 但不含产能/库存/价格的完整周期判断
- 强周期行业(光伏 / 储能 / 周期资源)在 chain-idea 后仍必跑 chain-cycle
⚠️ 红线
- ❌ 不要跳过雷达直接给"研究 AI"(虽然雷达结果也是这样,但需先跑出来证明)
- ❌ 不要把"宽基"和"行业 ETF"混合计算基准 — 用行业 ETF 子集算隐含基准
- ❌ 不要把 1M 涨幅直接当"热度"评分 — 短期过热应该扣分,反向
- ❌ 不要把 6M/12M 比率当趋势分 — 当 12M 为负时比率反向,语义错误
- ❌ 不要省略雷达审计日志 —
[DuckDB-AUDIT] 必须每次打印
🆕 算法演进历史
v1(已废弃)
- 趋势分用 6M/12M 比率 → 12M 为负时反向上分,语义错误
- 例:医药 -2% / -5.85% → 比率 2.84 → 趋势分 8.5 → 反排第一
v2(2026-07-06 当前)
- 趋势分改为 6M 涨幅绝对值
- 拥挤反向用 1M 涨幅的分段反向评分(更精细)
- 强烈推荐加 "12M > 5%" 双重约束(避免超跌行业被误判)
🔒 数据访问约束(沿用 chain-settlement 加固)
fetch_radar_data.py 中的 _ReadOnlyDuckDB 类:
- 强制
duckdb.connect(DB_PATH, read_only=True)
- 审计 每次 exit 打印
[DuckDB-AUDIT] 本次发起 N 个 SELECT,无可写操作
- fallback DB 失败立即终止,不写回(雷达场景不像 settlement 有东财可回退)
🧪 验证(2026-07-06 首次扫描结果)
输入:1,561 只被动指数型 ETF(L 状态)
输出:14 个行业雷达评分
Top 4 强烈推荐:
- 光伏(8.71) - 12M +48% 但 1M -10%(超跌机会)
- AI(8.30) - 12M +44% + 6M +31%(加速)
- 储能/碳中和(8.18) - 12M +35% 但 1M -4%(回调充分)
- 机器人/智造(7.96) - 12M +45% + 6M +30%(加速,但 1M +9.5% 已开始拥挤)
推荐:
中性 / 规避:军工 / 半导体 / 金融 / 地产 / 医药 / 农业 / TMT / 消费
对齐人工直觉:✅ 与 2026 上半年 A 股主线高度吻合(AI + 机器人 + 储能为强主线)
📚 借鉴 + 独创
| 来源 | 借鉴内容 | 类型 |
|---|
| harrischen/invest | 多因子评分 | 借鉴 |
| 本 skill 三角定位法 | 三轴交叉 + 评级映射 | 独创 |
| Tushare DuckDB | ETF 雷达数据源 | 集成 |
| 关键词规则分类 | 14 个重点行业分类 | 本段独创 |