chore(task): archive 08-27-onechartlab-research
This commit is contained in:
+43
@@ -0,0 +1,43 @@
|
||||
# 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 的服务端构造公式。
|
||||
Reference in New Issue
Block a user