Back to skills
extension
Category: Data & AnalyticsNo API key required

rps-analyst

RPS 报告生成器 — 读取 rps_full_YYYYMMDD.json + 前一日 JSON,生成 Markdown + HTML 双版本完整排名报告

personAuthor: user_09cf1a59hubcommunity

功能说明

本 Skill 根据 RPS 引擎计算出的 JSON 数据,自动生成双版本排名报告(Markdown + HTML),包含:全量排名、市场宽度、跨期对比分析。

适用市场:美股(A股不支持) 适用品种:美国科技股/ETF(数字货币、期货、其他市场不在范围内) 前置要求:必须先运行过 rps_engine.py,确保 JSON 文件已生成


触发方式

以下任一说法均可激活本 Skill:

| 类型 | 示例 | |------|------| | 完整任务 | "运行 RPS 每日计算,生成完整报告" | | 报告生成 | "生成今天的 RPS 排名报告" | | 对比分析 | "RPS 对比昨日分析" / "生成 RPS 周报" | | 特定标的 | "查看英维克(002837.SZ)的 RPS 排名"(A股另走 AKShare 流程,不适用)|


工作流程

Step 1 — 确定日期

取最新日期 JSON(如 20260528),格式为 rps_full_{DATE}.json

Step 2 — 确认路径

JSON 文件必须位于:

{WORKSPACE}/rps-engine/scripts/rps_results/

常见错误:若提示"文件不存在",请检查:

  • 是否已运行 rps_engine.py 生成数据
  • 路径是否误写为 rps_results/(少了 scripts/

Step 3 — 读取模板

模板文件:{WORKSPACE}/rps_engine_tpl.html

Step 4 — 生成报告脚本

创建 generate_rps_report_{DATE}.py,必须包含:

  • SECTOR_MAP(板块 CSS class 映射)
  • 辅助函数:rank_class / score_class / yield_class / tag_class / html_escape / fmt / price_fmt
  • 全量排名 Markdown 表格(含板块列,不去持仓)
  • 市场宽度区块
  • 对比分析:Top50 升序/降序/升幅最大/跌幅最大/新晋前50/跌出前50/大幅变动

Step 5 — 执行

python generate_rps_report_{DATE}.py

Step 6 — 交付

调用 deliver_attachments 交付 .md.html 文件


关键数据结构

JSON 内各数据结构 tuple 格式:

score_changes (top50_up/down, max_rise/fall, big_movers):
  (diff: float, ticker_str: str, ct_dict: dict, old_r: int)

new_top50 / exited:
  (ticker_str: str, ct_dict: dict, old_r: int)

ct_dict 字段:ticker / composite_rank / rps_composite / category /
              rps_20 / rps_50 / rps_90 / rps_120 / rps_250 /
              yield_250d / price

常见 Bug 预警

| 错误现象 | 原因 | 正确写法 | |---------|------|---------| | fmt() TypeError | fmt(v, '+.2f', '%') decimals 传了字符串 | f"{v:+.2f}%" | | 'NoneType' object has no attribute 'ticker' | t[1]["ticker"] — t[1] 是 ticker 字符串不是 dict | t[2]["ticker"] | | KeyError: breadth__20d | .replace("breadth","breadth_") 产生了双下划线 | key + "_above" | | 变量名报错 top rise_t | 变量名里有空格 | toprise_t | | JSON FileNotFoundError | 路径写了 rps_results/ | rps-engine/scripts/rps_results/ |


错误处理对照表

| 报错关键词 | 含义 | 解决步骤 | |-----------|------|---------| | FileNotFoundError: rps_full_...json | JSON 不存在 | ① 确认已运行 rps_engine.py ② 检查路径是否含 scripts/ | | KeyError: 'composite_rank' | JSON 结构不匹配 | 确认 JSON 是本 Skill 输出的格式,非其他来源 | | IndexError: tuple index out of range | 数据解析格式错误 | 检查是否正确解包了 tuple(参考上方数据结构) | | pct_change() got NaT | 数据库缺少历史数据 | 目标股票上市不足250天,数据不足无法计算 | | 报告缺少某板块颜色 | SECTOR_MAP 未覆盖该板块关键词 | 对照模板文档添加新映射 | | HTML 占位符未替换 | 6 个 placeholder 有遗漏 | 确认模板6个占位符全部替换 |


能力边界

✅ 本 Skill 可以

  • 生成美股科技股(ETF/个股)5 周期 RPS 排名报告
  • 对比前后两个交易日排名变化
  • 输出 Markdown(纯文本)+ HTML(可视化)双版本
  • 计算市场宽度指标
  • 识别新晋/跌出 Top50 的标的

❌ 本 Skill 不能

  • 直接爬取实时价格(依赖 rps_engine.py 预先计算的 JSON)
  • 分析 A 股(数据格式和板块分类不同)
  • 分析数字货币、期货(不在覆盖范围内)
  • 自动运行 RPS 计算(需用户单独触发 rps_engine.py)
  • 上传腾讯文档(如需上传,请手动告知)

输出示例

Markdown 报告片段

| 排名 | 股票代码 | 板块 | RPS综合 | 20日 | 50日 | 90日 | 120日 | 250日 | 250日收益 |
|------|---------|------|--------|------|------|------|-------|-------|---------|
| 🥇 1 | MU | 半导体 | 99 | 99 | 98 | 97 | 99 | 99 | +38.5% |
| 🥈 2 | AVGO | 半导体 | 97 | 96 | 97 | 95 | 96 | 98 | +31.2% |

HTML 报告截图描述

  • 顶部:数据日期 + 4个统计数字(标的总数/大幅变动/新晋前50/跌出前50)
  • 中部:完整排名表格,带板块颜色标签(前3名金色/4-10银色/11-50铜色)
  • 底部:5个对比分析模块(Top50升序/降序/升幅最大/跌幅最大/新晋跌出)

FAQ

Q: 提示 JSON 文件不存在怎么办? A: 请按顺序执行:① 确认 tiger_market.db 已放在 rps-engine/scripts/ ② 运行 python rps_engine.py 生成数据 ③ 再要求生成报告

Q: 某个股票排名显示 NaN 或 None? A: 该股票历史数据不足250天,RPS 无法计算,属于正常现象

Q: 报告里板块颜色不对/没颜色? A: 该股票板块关键词未被 SECTOR_MAP 覆盖,可对照模板文档添加

Q: 可以分析 A 股吗? A: 目前不支持,A 股数据结构和板块分类与美股不同,需另走 AKShare 流程

Q: 数据哪天更新的? A: 取决于最近一次运行 rps_engine.py 的日期,报告内会显示数据截止日期


输出规范

  • Markdown:全量排名表(含板块列),不去持仓
  • HTML:用 rps_engine_tpl.html 模板,6 个 placeholder 全替换
  • 对比分析:Top50 升序/降序/升幅最大/跌幅最大/新晋前50/跌出前50/大幅变动(≥5)
  • 不上传腾讯文档