# OneChartLab「板块资金雷达」三个指标逻辑补充研究 > 调研日期:2026-09-01。对象:截图所示“涨跌幅、加权评分、波段流入率”。本文是对既有板块资金雷达报告的补充,不把后端未公开算法包装成可复现事实。 ## 结论先行 这三个指标处在不同计算层,不能用一个简单公式互相替代: | 指标 | 页面直接展示的字段 | 已确认逻辑 | 当前不可确认的部分 | | --- | --- | --- | --- | | 涨跌幅 | `pct_change` | 直接格式化为带符号的两位小数百分比;可在榜内单独排序 | 板块层如何由成员股 `daily.pct_chg` 聚合、是否等权/成交额加权、停牌和缺失样本处理 | | 加权评分 | `Swing_Score` 或 `Ratio_Score` | 后端预计算的综合加权值;Swing/Ratio 榜按 score 排名 | 特征列表、权重、标准化、截尾、缺失值规则;是否使用涨跌幅无法证明 | | 波段流入率 | `Swing_Ratio_Val` | 多日资金流入率特征,页面显示时乘 100;作者称为 3—10 日加权单日流入率 | 具体日窗口权重、流入率分母、先聚合后求比还是逐股求比、低流动性过滤和缺失规则 | 因此第一阶段用 Tushare 直接复刻失败并不意外:Tushare 能提供底层行情和资金流事实,但页面只公开结果字段和少量来源契约,没有公开 score 与波段指标的构建端参数。 ## 截图对应的页面结构 截图顶部选择的是“波段流入率”视角,页面把板块按类型排名池切成左右两榜:左侧“资金进攻榜 TOP 10%”,右侧“资金撤离榜 BOTTOM 10%”。每一行的主要列为:板块/排名、涨跌幅、加权评分、净额、在榜;中间镜像条显示波段流入与流出;右侧对应显示在榜、净额、加权评分、涨跌幅和板块名称。 这意味着同一行里的数值不是一组可互相换算的字段。以截图中“知识产权”为例,`+4.03%` 是 `pct_change`,`985.0` 是 `Swing_Score` 的一位小数展示,`+3.21%` 是 `Swing_Ratio_Val × 100`,`25.0 亿` 是金额字段。右侧“资金撤离榜”的 `-5.60%` 同样是波段流入率的负向展示,而不是涨跌幅列。 页面源码证据: 首页内联 Vue 模板中,`pct_change` 的格式化与排序位于当前 HTML 的 `731—744`、`836`、`963` 附近;score tooltip 和字段读取位于 `801—806`、`930—932`;波段流入率格式化位于 `809—810`、`936—937`。行号随页面发布版本变化,应以字段和原文为准。 ## 一、涨跌幅 `pct_change` ### 页面行为 无论当前视角是 `Swing`、`Ratio` 还是 `Amount`,表格都会读取同一条板块记录的 `pct_change`,以 `+4.03%`、`-0.15%` 形式显示,保留两位小数;非有限值显示 `-`。点击“涨跌幅”表头只改变当前榜一侧的排序,不改变该榜已经按 `RankPct` 筛出的候选集合。 ### 上游来源与合理候选 OneChartLab 成分排行 manifest 声明个股涨跌幅来源为 `tushare.daily.pct_chg`,多日窗口的成分结果使用 `compound_return`。因此可确认的最小事实是:板块涨跌幅最终与成员股日行情有关,而不是从 score 反推出来。 对板块层聚合,至少存在以下候选: ```text # 候选 A:成员等权的当日平均收益 board_return_t = mean_i(r_i,t) # 候选 B:按成交额/规模加权 board_return_t = sum_i(w_i,t * r_i,t), sum_i(w_i,t)=1 # 候选 C:先形成板块净值,再计算净值收益 board_return_t = NAV_t / NAV_{t-1} - 1 ``` 其中 `r_i,t = daily.pct_chg / 100`。公开 payload 没有成员逐股权重、板块净值、自由流通市值或完整 point-in-time 成员快照,因此无法在 A/B/C 中做确定选择。manifest 的 `compound_return` 能确认多日收益的复合语义,但不能单独证明板块单日横截面采用哪一种权重。 ### 为什么第一阶段容易“没有条件” 如果只有当前板块名称和一个最终涨跌幅,无法处理成员变更、停牌、上市生命周期、缺失行情和板块规模权重;如果用当前成员回填历史,会产生幸存者偏差。正确的复现输入至少要保存交易日级 `dc_member`、`stock_basic`、`suspend_d` 和 `daily`,并把无法确定的聚合公式作为独立实验版本。 ## 二、加权评分 `Swing_Score` / `Ratio_Score` ### 页面行为 在截图视角中,“加权评分”显示约 985.0、976.4 等数值。源码 tooltip 原文为“后端特征算法算出的综合加权值”,前端只做读取、保留一位小数、排序和展示,没有 score 计算函数。 普通榜先按类型分池,再以 `RankPct >= 90` 和 `RankPct <= 10` 选取前后 10%。`Swing` 榜默认键是 `Swing_Score`,`Ratio` 榜默认键是 `Ratio_Score`;`Amount` 榜默认按 `Amount_Raw_BN`,即使记录带有 `Amount_Score` 也不使用它。由此可知 score 是排序特征,不是排名百分位本身。 ### 数据证据:不是涨跌幅的简单变换 当前最新公开分片(`2026-08-31`,791 条记录,概念 414、行业 377)可重复观察到: | 板块 | `pct_change` | `Swing_Ratio_Val` | `Swing_Score` | `Ratio_Raw_Pct` | `Ratio_Score` | `Amount_Raw_BN` | | --- | ---: | ---: | ---: | ---: | ---: | ---: | | 知识产权 (概念) | 4.03 | 0.0320857 | 985.0391 | 0.1494700 | 988.6650 | 25.0232 | | 盲盒经济 (概念) | 4.04 | 0.0465369 | 899.3116 | 0.2279457 | 952.2123 | 16.0316 | | 元宇宙概念 (概念) | 2.83 | 0.0152171 | 976.3810 | 0.0695193 | 1032.4349 | 61.7966 | “盲盒经济”的波段流入率和单日流入率都高于“知识产权”,但其两个 score 反而更低;“元宇宙概念”的 `Ratio_Score` 高于二者而 raw 流入率不最高。这排除了“score 只是 raw 值乘固定倍数”这一解释。 按当前分片计算的相关性也只能说明共同变化,不能证明公式:`pct_change → Ratio_Score` 在概念/行业约为 `r=0.714/0.584`,`pct_change → Swing_Score` 约为 `r=0.392/0.259`。对应 raw 值与 score 的相关性更高,但 `R²` 仍不是 1,且存在板块类型差异。因此“加权评分由涨跌幅+资金字段构成”目前只能列为合理推断,不能列为已确认事实。 ### 可复现的最小替代策略 如果目标是先跑通系统而非伪装成原站,可定义独立版本,例如: ```python def independent_ratio_score(pct_change, ratio_raw, amount_raw): # 所有标准化参数必须按 trade_date + type 保存并版本化。 z_pct = winsorized_zscore(pct_change, group="type") z_ratio = winsorized_zscore(ratio_raw, group="type") z_amount = winsorized_zscore(amount_raw, group="type") return 500 + 100 * (0.30 * z_pct + 0.50 * z_ratio + 0.20 * z_amount) ``` 这里的权重只是替代策略示例,不是 OneChartLab 参数。生产结果必须命名为自建 `metric_version`,同时保留与原站 score 的排名重合率、Spearman 相关、覆盖率和低流动性样本分层误差。 ## 三、波段流入率 `Swing_Ratio_Val` ### 作者语义与页面字段 作者视频 `01:58—02:23` 将它解释为“统计 3—10 天加权的单日流入率并排名”,排名靠前意味着资金在板块内留存比例较高,后续行情延续性可能相对更好。这里的“可能”是使用启发式,不是收益保证。 页面显示时使用 `Swing_Ratio_Val * 100`。同一截图中左侧“流入 +3.21%”就是这一字段的百分比展示;右侧“流出 -5.60%”是负向榜板块的同一波段字段,不等于 `pct_change`。 ### 可确认的结构与不可确认的参数 可以写成如下抽象形式: ```text r_t = daily 主力净流入 / 当日成交额 # 作者口径;生产字段未确认 Swing_Ratio = Σ_{h∈H} w_h · aggregate(r_{t-h+1:t}), H ⊆ {3,...,10} ``` 作者口头给出窗口范围 `3—10`,但没有说明是选择一个窗口、多个窗口协同,还是对 3 到 10 日结果再加权;也没有披露 `w_h`、缺失日处理、成员变更、截尾和板块低流动性门槛。 在当前公开日期分片上,把连续日期的 `Ratio_Raw_Pct` 与板块匹配后,最近 3 日简单均值与 `Swing_Ratio_Val` 最接近:概念和行业可匹配样本的 `R²` 约为 0.886/0.882;但拟合有非零斜率和截距,4—10 日候选更弱。因此“接近 3 日均值”是验证实验结果,不是原站公式。 ### 为什么 Tushare 直接复现条件不足 Tushare 可提供 `moneyflow_dc.net_amount` 和 `daily.amount` 等候选字段,但还缺少原站精确的: 1. “主力流入”与“成交额”的字段口径和单位转换顺序; 2. 先逐股求比后聚合,还是先板块聚合后求比; 3. 3—10 日每个窗口的权重与窗口之间的协同方法; 4. 成员股停牌、缺失资金流、零分母、小样本和低流动性处理; 5. `Swing_Ratio_Val` 如何与 `Swing_Amount_Val` 合成为 `Swing_Score`。 ## 三个指标之间的正确关系 ```mermaid flowchart LR A[成员/行情/资金原始事实] --> B[pct_change:板块收益聚合] A --> C[Ratio_Raw_Pct:单日资金流入率候选] C --> D[Swing_Ratio_Val:3—10日加权波段特征] B --> E[后端综合评分候选特征] C --> E D --> E A --> E E --> F[Swing_Score / Ratio_Score] F --> G[按 type 分池、前后10%、排名百分位] ``` 图中从 `B/C/D` 到 `E` 的箭头是合理推断,不是页面代码已证实的 score 公式。页面真正确认的是:`F` 已在后端生成,`G` 的排序和榜单筛选逻辑公开;`B/C/D` 的部分字段在页面中展示,但构建过程不公开。 ## 可执行的验证实验 后续若能取得目标 Tushare 账号和连续数据,建议按以下顺序验证,而不是直接硬编码一个公式: 1. 对同一交易日、同一板块同时计算 `sum(net_amount)/sum(amount)`、板块级 `net_amount_rate`、逐股比例均值和成交额加权比例,与公开 `Ratio_Raw_Pct` 比较。 2. 保存至少 30 个连续交易日的 `Ratio_Raw_Pct`,比较 3、4、5、6…10 日候选窗口;用留出日期验证,不只做同日拟合。 3. 以 `pct_change`、单日流入率、波段流入率、净额、成员数量和流动性特征分别做消融实验,检查哪一组特征能解释 score 的横截面和时间序列变化。 4. 以概念/行业分开校准,并对小样本、停牌、零成交额和成员变更样本单独报告误差。 5. 用 Spearman 排名重合率而非只看 Pearson 相关,因为页面最终用途是排序;所有结果带 `metric_version`、`trade_date`、`type`、输入覆盖率和版本 hash。 ## 最终复现建议 - 若目标是页面一致性:直接保存 OneChartLab 的日期分片和 score/raw 字段;本地只复刻格式化、排序、前后 10% 和排名变化。 - 若目标是独立生产:先实现 `pct_change_v1`、`ratio_v1`、`swing_v1` 和 `score_v1` 等明确命名的替代策略,不要命名为“原站算法”;把 Tushare 原始响应、成员快照和参数版本全部落库。 - 若目标是研究原站算法:需要作者或后端提供 score 特征定义、3—10 日权重、板块涨跌幅聚合和异常值规则;仅凭截图、最终 JSON 和 Tushare 公共字段无法唯一反演。 本文只用于技术与产品逻辑研究,不构成投资建议,也不代表替代指标具有预测能力。 ## 主要证据 - [OneChartLab 首页](https://onechartlab.com/):当前表格模板、字段读取、格式化和排序逻辑。 - [`radar_manifest.json`](https://onechartlab.com/radar_manifest.json):日期分片入口和当前版本。 - [2026-08-31 日期分片](https://onechartlab.com/radar_data/dates/2026-08-31.c094ac3098c9.json):791 条记录与三个指标字段。 - [成分排行 manifest](https://onechartlab.com/sector_rankings/manifest.json):Tushare 字段来源、单位与 `compound_return` 契约。 - [作者视频](https://www.bilibili.com/video/BV16Hur6rEq2/):`01:36—02:23` 的单日流入率、波段流入率概念口径和限制说明。 - 既有板块资金雷达报告:本项目此前页面逻辑、排名和数据协议调研,仓库文件为 `docs/research/onechartlab-sector-capital-radar.md`。