agentsclimarketplace

Chain radar

Skill ivanyinjc-blip/industry-chain-research/chain-radar

产业链研究第 0 段 · 行业雷达扫描。激活时机:用户问"研究哪个行业最有价值"、"选赛道"、"板块轮动"。从本地 Tushare DuckDB(1,561 只被动指数型 ETF)出发,用「景气 × 趋势 × 拥挤度」三轴评分筛出值得深入研究的行业 Top 列表。借鉴 invest 多因子 + 三角定位法,与 chain-idea 衔接形成"先选行业 → 再立项"的工作流。From its SKILL.md

Install
npx -y skills add ivanyinjc-blip/industry-chain-research --skill chain-radar

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 10 stars10 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

9.1 KB, ~3.8k tokens by cl100k_base, as published. Nobody here has run it


📋 SKILL 契约(6 字段 · agent 调用入口)

完整的 行业雷达(可选入口) 段契约。Claude/Codex 调用本段时,只需读这一节。

🎯 触发条件

  • 用户问"研究哪个行业/板块最有价值"
  • 用户问"还有什么行业值得看" / "赛道轮动"
  • 周一定时扫描
  • ❌ 不触发:用户已明确具体行业(直接进 chain-idea)

📥 输入文件

  • 无必填(从 Tushare DuckDB 自动扫所有 L 状态被动指数型 ETF)
  • 可选:TUSHARE_DB_PATH 环境变量

📤 输出文件

  • radar.md(行业扫描报告)
  • radar_scores.json(14 行业 × 3 轴评分)

🔑 必填字段

  • 每个行业:{景气分, 趋势分, 拥挤度分, 综合分, 排名}
  • 三轴定义见 chain-radar/SKILL.md

✅ 验收清单

  • 扫描 1,561 只 ETF,覆盖 ≥ 10 个行业
  • 三轴评分有明确区间(0-100)和权重
  • Top 4-6 行业有"为什么入选"说明
  • 输出 markdown 表格,人类可读

⚠️ 失败处理

  • 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
# 跑完后会打印 [DuckDB-AUDIT] 本次发起 6245 个 SELECT,无可写操作

Step 2: 评分

python3 scripts/calc_radar_score.py /tmp/radar_raw.json /tmp/radar_scores.json
# 输出:14 个行业雷达分排序 + 4 类分组

Step 3: 报告

python3 scripts/gen_radar_report.py /tmp/radar_scores.json /tmp/radar.md
# 输出: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

🔗 与上下游的契约

上游

  • :本段是研究流程的第 0 段,直接面对用户提问

下游

  • 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 强烈推荐:

  1. 光伏(8.71) - 12M +48% 但 1M -10%(超跌机会)
  2. AI(8.30) - 12M +44% + 6M +31%(加速)
  3. 储能/碳中和(8.18) - 12M +35% 但 1M -4%(回调充分)
  4. 机器人/智造(7.96) - 12M +45% + 6M +30%(加速,但 1M +9.5% 已开始拥挤)

推荐:

  • 新能源车(7.31)· 周期资源(6.65)

中性 / 规避:军工 / 半导体 / 金融 / 地产 / 医药 / 农业 / TMT / 消费

对齐人工直觉:✅ 与 2026 上半年 A 股主线高度吻合(AI + 机器人 + 储能为强主线)


📚 借鉴 + 独创

来源借鉴内容类型
harrischen/invest多因子评分借鉴
本 skill 三角定位法三轴交叉 + 评级映射独创
Tushare DuckDBETF 雷达数据源集成
关键词规则分类14 个重点行业分类本段独创

What ships with it: 6 files

651.7 KB alongside SKILL.md, 3 of them executable

scripts/

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.