Files
zhixing-system/.trellis/tasks/08-27-onechartlab-research/research/sector-capital-radar-evidence.md
T

44 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OneChartLab「板块资金雷达」公开实现证据
核查日期:2026-08-27。范围是无需登录的 `https://onechartlab.com/` HTML、其公开 JSON 静态资源和前端内嵌 JavaScript;没有绕过访问控制,也未保存 cookie/token/个人数据。
## 已确认
1. **用户目标与主界面。** 页面 title/description 是“板块资金雷达”和“观察板块资金流向、强弱变化与市场主线”;正文副标题为“识别主线资金流向与趋势,对比板块强弱”。页面可选数据日期、概念/行业类型、搜索板块名称或代码,并支持“波段流入率、单日流入率、单日净额、排名变化”四种排序指标(`https://onechartlab.com/`,HTML `file:line`:`:6-7`, `:641-671`)。
2. **公开数据协议与粒度。** 首页首先只读请求 `radar_manifest.json`,校验 `schema_version===1`、`AVAILABLE_DATES`、日期 shard 路径,再请求 `radar_data/dates/2026-08-26.f49c721846fb.json`(manifest 当前文件名来自 `https://onechartlab.com/radar_manifest.json`)。manifest 给出 `LATEST_DATE=2026-08-26`,可用日期为 2026-07-16 至 2026-08-26 的 30 个交易日;最新 shard 实测为 JSON 数组 791 条,概念板块 414、行业板块 377。实现证据:HTML `:1894-1972`;响应字段/路径证据:`https://onechartlab.com/radar_manifest.json` 的 `AVAILABLE_DATES`、`LATEST_DATE`、`files.dates`,最新 shard URL 上述路径。
3. **单条板块字段。** 最新 shard 的记录含 `trade_date`, `type`, `index_name`, `ts_code`, `lead_stock`, `pct_change`, `pct_change_stock`,以及 `Swing/Ratio/Amount` 三类的 raw 值、分数、排名位置、排名百分位、近 30 日在榜计数和 1/2/3 日排名变化字段:如 `Swing_Ratio_Val`, `Swing_Amount_Val`, `Swing_Score`, `Swing_RankPos`, `Swing_RankPct`, `Swing_Top30d`, `Swing_Bot30d`,对应 `Ratio_*`、`Amount_*`。实测示例 `2026一季报扭亏 (概念)`(ts_code `BK1682.DC`)在 2026-08-26 的 `Amount_Raw_BN=-5.59969136`, `Amount_RankPos=353`, `Ratio_Raw_Pct=-0.06896072719626979`, `Swing_Ratio_Val=-0.03308411781204722`。来源:`https://onechartlab.com/radar_data/dates/2026-08-26.f49c721846fb.json`,响应记录键集合。
4. **榜单筛选和排名。** 非“排名变化”时,前榜取 `activeTab_RankPct >= 90`,后榜取 `<= 10`;默认前榜按 `Amount_Raw_BN`(单日净额)或相应 `*_Score` 降序,后榜升序。“排名变化”时按所选基准 `Swing/Ratio/Amount` 的 `*_Rank_Chg` 排序,各取 `ceil(板块数*0.1)` 且至少 1 条。代码还明确页面文案为 `TOP 10%` / `BOTTOM 10%`。HTML `:1292-1314`, `:695-718`。
5. **排名变化的时间窗口。** 排名变化基准可选波段率、单日率、单日额;统计天数 UI 提供近 1 至近 5 天。1–3 天直接读取记录中的 `Swing/Ratio/Amount_Rank_Chg_1d/2d/3d`;超过 3 天时读取 rank-history,并以 `pastRank - currRank` 计算变化,过去日期超出范围时钳制到最早可用日期。HTML `:676-691`, `:1260-1289`。
6. **数值显示与单位映射。** `Swing_Ratio_Val` 和 `Ratio_Raw_Pct` 在显示时乘 100 并格式化为百分比;`Amount_Raw_BN` 直接按亿元显示;分数显示 1 位小数,净额显示 1 位小数,排名变化显示整数。HTML `:1453-1467`, `:1482-1500`;详情文字也明确“波段均值”“占比”“主力净流入 … 亿”,`:1072-1092`。
7. **历史轨迹和详情交互。** 榜单的“在榜”按钮读取公开 `radar_data/rank_history.3674d0a1cecf.json`,结构为 `Amount`, `Ratio`, `Swing` 三个 map,每个包含约 799 个板块名到日期→排名的映射;详情图使用可用日期反转后的 30 个点,缺失历史排名以总池大小代替,并把排名限制到 `[1,maxRank]`。HTML `:1522-1539`, `:1564-1571`, `:1794-1815`;资源 URL:`https://onechartlab.com/radar_data/rank_history.3674d0a1cecf.json`。
8. **成分股数据、字段和异常边界。** 详情通过 `sector_rankings/manifest.json`(schema `onechart_sector_stock_rankings_v2`)定位日期文档 `sector_rankings/radar/dates/20260826.bacc5d9e1581.json`,再按 `sectors[ts_code]['1']` 读取 `metrics.pct_change/main_net_amount/active_buy_net_amount` 的 `top`、`bottom`、`sample_size`、`status` 和 `value`。实测日期文档含 `date=20260826`, `system=radar`, `sectors` 791 个板块;示例 `BK0420.DC` 的三指标均为 `status=available`, `sample_size=13`。HTML `:1667-1704`;资源 URL:`https://onechartlab.com/sector_rankings/manifest.json`、`https://onechartlab.com/sector_rankings/radar/dates/20260826.bacc5d9e1581.json`。
9. **数据源、口径和更新时点(页面公开原文)。** 页脚写明“数据源: Tushare + 东财板块日线资金流数据”“更新频率: 交易日 17:00 ~ 17:30 自动同步”“参数说明: 波段周期取 3-10 个交易日多周期协同加权”。页面也提示“本日板块数据由个股本地聚合计算,涨跌幅暂不显示(\"-\")”。HTML `:636-639`, `:1028-1035`。`radar_manifest.json` 当前 `DATA_SOURCE` 为空,因此“本地聚合”提示在当前公开 payload 不会因该字段自动出现;提示逻辑为 HTML `:1187`。
10. **前后端计算边界和失败处理。** 公开 JSON 已提供 raw、score、rank 等派生字段,浏览器端只做筛选、排序、格式化、排名变化(超过 3 日)、Jaccard 近似板块计算和 SVG 轨迹绘制;manifest/日期 shard/rank-history 请求失败会回退到 `radar_data_latest.json`,仍失败则显示“数据加载失败”和“重新加载”按钮。HTML `:1905-1972`, `:1771-1792`。旧接口是 `https://onechartlab.com/radar_data_latest.json`,实测可公开读取但约 20 MB,含 `RADAR_DATA`, `AVAILABLE_DATES`, `LATEST_DATE`, `RANK_HISTORY_MAP`, `CONSTITUENT_MAP`。
## 合理推断
- **“波段”口径是服务端预计算的多周期指标。** 依据:页脚原文称“3-10 个交易日多周期协同加权”,记录同时暴露 `Swing_Ratio_Val`、`Swing_Amount_Val` 与 `Swing_Score`,但前端没有生成这些字段的公式。置信度:高(页面口径明确),具体权重未知。
- **榜单主数据主要在服务端生成。** 依据:前端直接消费 `*_Score`, `*_RankPct`, `*_RankPos`, `*_Rank_Chg_1d..3d`,只在 4/5 日排名变化时用公开历史 map 做差;因此原始资金聚合、打分、排名应已在静态数据发布前完成。置信度:高;无法据此确定后端具体语言或作业实现。
- **排名池是东财板块宇宙,当前 791 个板块。** 依据:`sector_rankings/manifest.json` 的 radar `universe_id="eastmoney-dc-v1"`, `sector_count=791`,与最新日期 shard 数量一致。置信度:高。
- **近似板块“重合度”是 Jaccard。** 依据:浏览器端计算 `intersection / (setA.size + codes.length - intersection)`,排序取前 4(HTML `:1781-1792`);不是后端评分。置信度:高。
## 无法确认 / 证据缺口
- 未在公开 HTML/JS/JSON 找到 `Swing_Score`、`Ratio_Score`、`Amount_Score` 的具体公式、权重、标准化方式、并列排名规则,也无法从响应反推出“TOP 10%”之外的完整排序 universe 计算细节。
- 页脚只给出 Tushare 与东财来源名;未公开 API token、抓取 SQL、任务代码、实际同步失败重试策略或时区说明。`sector_rankings/manifest.json` 的 contract 能确认 radar 输入字段映射:`tushare.moneyflow.net_mf_amount`, `tushare.moneyflow_dc.net_amount`, `tushare.dc_member`, `tushare.daily.pct_chg` 等,但不能证明上游响应在本次发布中的每一行具体值。
- “本日板块数据由个股本地聚合计算”是页面条件提示文本;当前 `radar_manifest.json` 的 `DATA_SOURCE` 为空,实际页面是否显示该提示取决于运行时 payload/旧回退数据,未用交互浏览器截图确认。
- 未分析视频;未访问需要登录、验证码、付费或绕过反爬的资源。对不存在的后端 API,实际仅检索 HTML 中 `fetch(`/api`/axios` 等关键词和内嵌请求路径;发现的公开请求路径限于 `radar_manifest.json`、日期 shard、`radar_data/rank_history...json`、`radar_data_latest.json` 和 `sector_rankings/...`,未发现 XHR API。
## 主会话复核补充
主会话对 2026-08-26 全部 791 条记录复算确认:概念和行业两个排名池内,`Swing_RankPos` 与 `Swing_Score` 降序、`Ratio_RankPos` 与 `Ratio_Score` 降序、`Amount_RankPos` 与 `Amount_Raw_BN` 降序均为零不匹配;三个 `RankPct` 字段均满足 `100 * (N - RankPos + 1) / N`,最大浮点误差约 `1.42e-14`。这使排名外层逻辑可以精确复现,但不能反推出三个 score 的服务端构造公式。