研究框架 · 口径说明

轮动框架口径说明:三条轴、资金流算法、卫星条件

这一页解释站上反复出现却没地方说明的几个口径:两条风格轴(加二期的 A/H 轴)各用什么指数和什么工具、ETF 净流入是怎么算出来的、卫星仓要同时满足哪三个条件。每条规则背后的回测证据在回测证据台账,实时读数在风格罗盘轮动方案

先说定位。这个站做的是「证据台账 + 决策辅助」,不是信号机。风格轮动的价值在于决策少、不长期站错边,不在于每次踩准拐点。下面所有阈值都写在 pipeline/config.json → rotation 里,页面上的读数由同一份代码(pipeline/rules_lib.py)算出来,改阈值不用改页面。

一、三条轴(骨架)

骨架是风格轮动,不是行业轮动。理由是结构性的,不是回测出来的:行业有 31 个决策对象、每天都在换领涨,一半以上没有流动的 ETF,而且申万行业指数是 2021 版分类的回填;风格只有两条轴、一年切换一两次,宏观变量可推理,工具是日成交几亿到几十亿的宽基。

信号指数(全收益)交易工具状态
开关 · 权益 vs 现金中证全指全收益 CSIH00985,宽度池 = 申万 31 行业总敞口 E只展示,不进仓位。两档版本回测年化 3.42% vs 满仓 5.64%,最大回撤还没变浅
轴 1 · 大 vs 小沪深300全收益 CSIH00300 / 中证1000全收益 CSIH00852510300 沪深300ETF ↔ 512100 中证1000ETF待定:单独开这条轴过去 15 年是负贡献,页面如实显示
轴 2 · 成长 vs 价值创业板R SZ399606 / 中证红利低波全收益 CSIH20269159915 创业板ETF ↔ 512890 红利低波ETF保留:tilt 的超额基本都来自这条轴
轴 3 · A vs H沪深300 / 恒生510300 ↔ 159920 / 513180二期:跨境 ETF 的折溢价(可达 5–10%)与限购还没处理,页面上是一张空卡

为什么比值一律用全收益

价格指数每年少算价值边 4–5% 的股息(中证红利价格 5568 点 vs 全收益 12070 点),用它做比值会系统性偏向成长边。所以两条轴的比值一律走全收益序列;全收益发布日之前的区间,用价格指数 × 代理分红因子的形状向前拼接(rules_lib.extend_tr),并在页面上标出真实起点——小盘 2014-10、价值 2013-12 之前都是拼接段,那几段的结论要打折。

tilt 怎么算出来

每条轴的档位 tilt ∈ {−2,−1,0,+1,+2},每档把 12.5% 从一边挪到另一边(±2 档 = 50% / 0%):

  1. 主项:工具比值的 120 日与 250 日相对动量同向 → ±1;若 20 日也同向(加速)→ ±2;不同向 → 0。(回测里 tilt 的全部正贡献都来自 ±2 档。)
  2. 否决:对比值的两个方向各跑一次状态模型,倾斜目标边的 P(破位) ≥ 0.5 → tilt 归 0。保留它的理由是结构性的(不在已经破位的一边加满档),不是回测——回测上它是噪声。
  3. 压回:目标边估值差(PE 之比)的 60 个月滚动分位 ≥ 90% → 压回一档。
  4. 资金差只展示、不压回:按 20 日资金差与动量矛盾就压回,2019 年起年化从 13.0% 掉到 11.5%、回撤从 −28% 深到 −35%。比值动量最强的时候资金往往还在流出滞后边,压回等于砍掉最好的时段。
  5. 换手约束:每条轴每 28 天最多变一档(从 −2 走到 +2 至少 4 个月,是有意的慢速设计)、每周最多动一条轴、核心仓单周总变动 ≤ 25%。

指令在每周最后一个交易日(按真实交易日历,不是「周五」——2026 年有 6 个周五是节假日)收盘后生成,纸面成交价 = 下一交易日的 ETF 后复权收盘,单边成本宽基 0.1%、行业 0.15%。

二、ETF 资金流是怎么算的

资金流页与首页「热点 + 资金验证」用的是同一个口径:净流入 = Δ总份额 × 前一日单位净值。份额数据来自基金份额变动表,有三道防护:

① 分红 / 拆分 / 折算日

当「单位净值日变动」与「复权净值日变动」之差超过 0.5%,判为事件日,该日净流入置 0。512890 在 2021-10-22 有一次 1:2 拆分,不处理会算出相当于规模 49% 的假流入。

② 上市后 5 个交易日不计

募集份额不是资金流。

③ 份额停更的不参与聚合

每只 ETF 带一个「份额截至」,比全市场最新日晚 3 个交易日以上的不进桶,页面上单独标「停更」。

两件事要记住:

ETF 按标的指数自动归类到桶:宽基(大/中/小/微)、风格(成长 / 价值 / 红利 / 低波 / 质量)、行业主题(带申万一级归属)、跨境(港 / 美 / 其他)、商品、债券、货币。权益资金流只汇总宽基 / 风格 / 行业三类;商品、债券、货币、跨境各单独一行,当避险与出海的信号看。行业桶的申万归属是人判断的事,规则只给起点,映射表里带 _review 的条目等人工审核,审过的下次刷新不会被规则覆盖。

三、卫星仓的三个条件

行业/主题是受约束的卫星仓,不是第二套框架。一个行业要进卫星,必须同时满足:

  1. 自身有资格:120 日动量为正,且 P(破位) 低于阈值(状态裁决不能是「破位」或「脱离破位·脆弱」;「趋势·延伸」允许进但权重减半);
  2. 有钱跟:对应行业/主题 ETF 近 20 日净流入为正(这就是「资金验证」);
  3. 所属风格边没破位:它归到的那条风格边(成长 / 价值)当前 P(破位) < 0.5。

最多 3 个,合计占权益敞口 30%,按 20 日净流入占规模比排序,至少持有 4 周除非转「破位」;不够的份额回核心仓。

卫星仓目前是关闭的。回测里加 30% 卫星后年化从 9.11% 掉到 7.49%、回撤更深。但那次测的其实是个「按动量选行业」的退化版——条件 2 和排序要的 ETF 资金流数据当时还没有。等资金流攒够历史,用同一个脚本把条件 2 与排序补齐重测,达标才打开。在那之前核心仓占 100%。

四、还有几件要说清楚的事

本页仅为个人研究记录,不构成任何投资建议。规则的回测证据见回测证据台账(每月第一个交易日重跑一次);阈值与裁决的唯一来源是 pipeline/config.json → rotation