⚠ 当前为 演示数据 · 所有时间线、价格、回测结果均为模拟生成,仅用于展示交互逻辑 · 可在数据源面板导入替换
多指数环境过滤 · ETF择时评估工具

市场四象限
可配置参数的回测评估工具

支持本地数据导入、参数可调(MA周期 / 动量周期 / 仓位矩阵 / 共识算法), 前端自动计算 MA20、20 日动量与四象限,折线图背景标注象限区域与切换点,全视图实时联动。

5个
跟踪指数
175天
交易日
—
连续区间
模拟
数据来源
Data Source

数据源与导入

支持导入真实日线数据(CSV / JSON),前端自动计算 MA、动量与四象限。也可继续使用内置演示数据。

数据状态:演示数据

导入时间段 ~ 认标的顺序:文件里的 code 列 → name 列 → {中文名}_kline.csv 文件名;整份 tencent_data.json 一次灌 51 只
· 至少需要 MA周期 + 动量周期 个交易日才能计算完整指标
· 日期格式:YYYY-MM-DD 或 MM/DD · 建议使用前复权数据
Configuration

参数配置

调整计算参数与策略设置,点击 「应用配置」 后全视图自动重算。所有参数保存在浏览器本地。

起始日
→
结束日
共 280 个交易日 · 2025-08-04 ~ 2026-09-24
日
5 ~ 120 · 默认 20
日
5 ~ 120 · 默认 20
日
1 ~ 60 · 回测用
%
0 ~ 1 · 含佣金+冲击
日
1 ~ 10 · 旧映射兜底用,状态机看下方
%
0 ~ 20 · 旧映射兜底用,状态机看下方
仓位状态机(单指数回测 / 图内仓位带)
日
1 ~ 10 · 转 TRIAL 需连续 bull 天数
%
0 ~ 5 · 建仓需超 MA+b,硬清仓需破 MA−b
%
0 ~ 5 · bull 转 TRIAL 的动量要求
%
5 ~ 100 · 首次建仓比例,其后一步满仓(v6 起)
日
1 ~ 10 · pullback/bear 连续 N 日才清(1=旧口径)
%
1 ~ 30 · 自持仓峰值回撤即清仓
×
0.5 ~ 10 · 峰值回撤超 N×ATR 即清仓
日
0 ~ 30 · 清仓后 N 个交易日不建仓
%
0 = 关闭 · 实际仓位 = 状态机仓位 × min(1, 目标/ATR 隐含波动)
%
0 ~ 50 · 缩放目标与当前仓位差在此内不交易(进出场不受带宽限制)
默认关闭 · 开启后仅在短期 MA 高于长期 MA 时建仓(长 MA 建议 180~250)
%
默认 6(设 0 = 关闭)· 持仓中动量跌破该值即减半
%
默认 0 = 关闭 · 开启后持仓中 5 日动量跌破 −该值即清仓。已样本外考过:三档全输默认档 ⇒ 保持关闭(见「方案评估 → 考试台账」,指纹 9361a1c3)
日
10 ~ 250 · 默认 180 · 需大于主 MA(用 60 会明显跑输)
共识算法
多数
≥ 半数指数处于同一象限即达成共识(默认)
加权
沪深300 权重 ×2,其余各 ×1,加权和过半即共识
保守
取最保守的象限(空头下行 > 下跌反弹 > 高位钝化 > 上升推进)
仓位矩阵(% · 行=沪深300,列=风格指数)
Core Framework

四象限计算口径

纵轴为价格相对 MA 的位置(结构),横轴为动量(动能)。卡片底部显示当前选中指数的实际天数。

价格 vs MA(结构轴)
动量(动能轴)
Timeline & Chart

多指数四象限时间线 + 价格图

折线图背景色块标注各象限区间,菱形标记标识象限切换点。叠加 MA 线与动量副图;单指数视图可切换叠加 5 / 10 日短动量线(固定周期、只服务读盘,不改「动量周期」参数,也不参与象限与回测)。开启 准入门标记 后,每只品种会按所选区间标出「在场日基准复合 − 空仓日基准复合」是否为正(R6 判据),同样只是标注:不改象限、不改仓位、不改回测 —— 它的事前考试结论(五门槛 2/5 未上线)在「方案评估 → 考试台账」。在多指数对比视图里它还顺手做减法:判为「剔除」的品种从折线图与时间线里整行隐藏(共识行仍按全宇宙计算),行尾折叠条或图例上的金色划线项可一键展开成淡出对照;单指数视图与重叠共识视图不受影响。

沪深300 · 价格 / MA / 动量归一化起点 = 100

短动量
准入门
SIMULATED
背景区域: 上升推进 高位钝化 下跌反弹 空头下行 ◆ 象限切换点

沪深300 · 000300.SH

—

上升推进 高位钝化 下跌反弹 空头下行
交易日 1175
Conflict Matrix

多指数冲突矩阵与仓位建议

行为沪深300总环境象限,列为风格指数象限,单元格为建议仓位。金色边框为 当前状态。 这是人工执行参考:矩阵只驱动本面板,不参与任何回测(回测仓位一律走上面的仓位状态机)。

仓位决策矩阵

总仓位由沪深300控制,风格指数只能收缩、不能扩张

当前:沪深300 — · 风格指数 —
Board Breadth

板块内部广度(申万二级)

把全部 申万二级板块拆到成分股层:每只板算上涨率、涨停数、等权/加权涨幅与 绑架度(绑架度 = 流通市值加权 − 等权:正 = 指数被权重扛着、多数股没涨; 负 = 小票普涨、权重在拖)。数据来自盘后成分股截面(腾讯现役名单 ∪ 申万官方科创板归属), 全部数值由数据侧一次算好,本面板只做投影、不另算一套指标。
跨日趋势迷你图需攒满 3 个盘后档才渲染,不足期间只显示当日截面; 本表不跟随顶部「分类显示/隐藏」筛选(与数据源卡片同类处理); 点板块名可把主图切到该板块(pt01 板块码)。

Board Detail

板块结构画像(成分股层)

把选中的板块再往下拆一层:前 5 大流通市值(含各自占板块市值的比例 —— 集中度的微观来源、「绑架度是谁贡献的」直接可读)、当日涨停名单与 当日最强 / 最弱个股。全部取自盘后成分股截面的预聚合投影, 本面板只做投影、不另算一套指标;前 5 市值占比合计恒等于广度表的 「前5集中」列(同一口径,两侧只差四舍五入)。
在这里换板块只影响本面板,不会切主图(要切就去上面的广度表点板块名); 本面板不跟随顶部「分类显示/隐藏」筛选。
「查看全部成分」按需加载当日全市场名单(约 5 千只,单独 JSON、不进页面本体)—— 文件缺失时按钮自动降级,不影响上面的结构画像。
持仓清单里点板块结构格的 ⤵ 会直接跳到本面板并选中该板块。

Holdings Ledger

当前可持仓清单与仓位

把全部品种在读数日的目标仓位摊成一张执行清单:主表只列仓位 > 0 的,其余收进下方折叠。 仓位一律取自 singleIndexPos() —— 与回测、图表仓位带、tooltip 同一个入口; 本面板不产生新信号,也不采用上面那张人工矩阵的仓位(矩阵只驱动它自己的面板、不参与任何回测)。 时序是 T+1:读数日的收盘信号由次日承担收益,所以这张表读的是 「下一个交易日开盘前该拿哪些、各拿多少」。
读数日随所选区间移动(默认「按年 · 当年」= 区间末日即最新交易日;把区间拖到历史段就是那段的末日); 若该日 bar 来自盘中刷新,信号尚未收盘确认,读数会继续变。 「合计目标仓位」是各指数独立口径相加、不是组合权重:超过 100% 意味着要杠杆才能全额执行, 等比铺平请按「各自仓位 ÷ 合计」折算。
最右「板块结构」列是申万二级行对应的盘后成分截面投影(集中度 / 涨停数 / 成分变动 / 当日龙头, 仅覆盖申万二级、不跟随顶部分类筛选):结构数值的 asof 以列头标签与画像页为准, 与读数日、detail 档可能不同日;点行内 ⤵ 跳到该板块的结构画像, 持仓板块的当日龙头(= 该板流通市值 top1)见本列「龙头」段,其历史表现见回测区「板块龙头组合回测」。

Backtest

回测框架与绩效面板

基于当前数据的简化回测,参数来自上方配置面板。信号在当日收盘确认、次一交易日承担收益(T+1),调仓成本记在信号日。回测结果为 示意性,实盘需完整样本外验证。
另提供板块龙头组合回测:每个申万二级板块买流通市值龙头(top1 × 124 板等权、月度调仓),基准为 124 板块指数等权—— 龙头身份为样本内口径(当前截面排名套历史,无数据源可消除该偏差),同面板的成交额龙头是全 PIT 干净对照线,两线之差即身份偏差的上限估计。

MODULE 01

象限计算引擎

前端自动计算 MA 与动量,按双轴划分四象限。

均线周期
20
动量周期
20
MODULE 02

仓位状态机 + ATR 风险缩放

四状态逐日推演基础仓位,再由 ATR 波动率缩放为实际仓位,仓位变动触发调仓。

状态数
4
基础仓位档位
0/30/60/100%
ATR 参与
缩放 / 减仓 / 清仓
实际仓位公式
基础 × min(1, 目标波动/ATR 波动)
MODULE 03

执行假设

逐日调仓,按仓位变动计算交易成本。

单边成本
0.15%
执行时点
收盘
MODULE 04

绩效归因

分象限统计收益,区分仓位择时与指数本身收益。

核心指标
夏普 / 回撤
超额
vs 指数买入持有
择时贡献
vs 同暴露无择时

绩效概览 (演示数据)

策略:仓位状态机择时 · 基准:当前指数买入持有

ⓘ 单指数回测由 EMPTY / TRIAL / HOLD / REDUCE 四状态机给出当日基础仓位 (试仓 30% → 一步满仓 → 减半 → 归零),再经 ATR 波动率缩放得到实际承担收益的仓位: 实际仓位 = 基础仓位 × min(1, 目标年化波动 / ATR 隐含年化波动),目标波动与免调带在上方「仓位状态机」区块配置(目标 0 = 关闭缩放),ATR 周期默认 14 日。ATR 同时参与减仓触发(单日跌幅 > 1.5×ATR)与清仓触发(自持仓峰值回撤 > 2.5×ATR),参数默认值在代码内,暂未在面板暴露。不受仓位矩阵影响;建仓需连续 2 日 bull 且动量达标,清仓另由「跌破 MA 缓冲+动量转负 / 象限转坏连续 3 日 / 峰值回撤 8%」触发,之后冷却 0 个交易日。参数在上方「仓位状态机」区块调整,图内底部金色面积即当前仓位带(已含 ATR 缩放)。 基准 = 当前选中指数的买入持有,切换指数时基准同步切换;上文仓位矩阵只驱动「多指数冲突矩阵与仓位建议」面板,不参与任何回测。 净值图另画一条同暴露无择时灰点线(恒定仓位 = 本指数的日均在场,全程不调仓、与买入持有同样不记成本): 它与金色线的差才是买卖点的功过,与蓝色满仓线的差里绝大部分只是「没在场」。 低暴露参数在「vs 买入持有」口径下必然被判成大负超额,请先看这条线再下结论。 另有动量绝对水平减仓(默认 6%,面板设 0 即关闭):持仓中动量跌破设定值即减半。 51 只实测它是唯一「更少在场、更少换手、收益与择时α同时更好」的改动 (均值总收益 4.25%→6.28%、择时α +3.56→+5.62pp、夏普 0.07→0.11、在场 16.7%→13.8%), 机理是「动量水平」在横截面上仍有预测力,而「价涨动量跌」的背离形态没有; v6 起阈值 4%→6%(申万二级 124 只全样本单参数夏普 +0.04,与试仓一步满仓并列最佳)。

另有一条默认关闭的实验分支「5 日快线离场」(面板设 0 = 关闭):持仓中 5 日动量跌破 −该值即清仓,与图上那条 5 日线同口径。加它的依据是持仓段实测(npm run report:mom)—— 段内 5 日首次转负比真清仓中位早 8 个交易日,20 日线只早 1 天、还有 46.2% 的段全程不转负; 但同一份记录里「转负就走」的中位收益 −0.98%(有利)、均值 +0.12%(被错过主升的右尾吃掉)。 它已经考过了:结论是不成立(npm run report:fastexit,指纹 9361a1c3)—— 0.5% / 2% / 4% 三档在拼接样本外的择时α 全输默认档(−1.78 / −0.93 / −0.82pp vs −0.55pp), 逐折α差平均全为负,连样本内都不如默认档。领先 ≠ 有增益。 所以默认关着,只在参数对比表里以三档扰动出现,供你手动试; 完整判定与出处见「方案评估 → 考试台账」。

净值曲线对比

策略 vs 当前指数买入持有 vs 同暴露无择时

基于当前选中指数区间

状态机择时 当前指数买入持有 同暴露无择时

持仓清单组合回测

把持仓清单的规则逐日重放:区间内每个交易日都按同一规则生成全部品种的目标仓位,等权聚合、T+1 复合。 基准 = 同清单等权买入持有;灰点线 = 同暴露无择时——它与金线的差才是调仓时点的功过,与蓝线的差绝大部分只是「没在场」。

口径 归一化
组合净值曲线

清单组合 vs 同清单等权买入持有 vs 同暴露无择时

基于当前区间

清单组合(T+1) 等权买入持有 同暴露无择时

清单宽度与合计暴露

每日目标仓位 > 0 的只数(面积)与合计目标仓位(折线)

板块龙头组合回测 样本内龙头口径

主线(闸门版):只在板块满足上升推进时才持有该板龙头——闸门与「持仓清单」同一入口(状态机仓位, 空仓 30% → 试仓 30% → 持仓 100% → 减仓 地板 20%);权重按在位板块归一化(满仓运作), 月度调仓、T+1、单边 0.15% 成本。
无闸门对照三线:A = 流通市值龙头全仓(top1 × 124 板等权,样本内口径)、B = 成交额龙头(全 PIT)、 基准 = 124 板块指数等权买入持有(不含成本)。闸门的可执行性边界(年化换手 / 区间成本)在指标卡与注记里。

净值曲线(月末对齐 · 粗线为主线、细线为对照)

A 市值龙头 vs B 成交额龙头 vs 基准(板块等权)

A 市值龙头(样本内口径) B 成交额龙头(全 PIT) 基准 · 板块指数等权

参数对比 · 稳健性扫描

在同一区间下把每个会被回测内核消费的参数单独扰动一档,重跑全部 175 只指数的状态机+回测, 看结论会不会翻。看的是盘面稳不稳(离散度、跑赢只数、分年度胜负), 不是找最漂亮的一行。跑完可导出 JSON / CSV 存档(带基线配置与结果指纹), 命令行侧 npm run report:pc 走同一套内核,产出的记录与这里逐位相同。

扫描口径: 未运行
Evaluation

方案评估

从逻辑严谨性、可执行性、数据可得性、抗过拟合、风险控制、流动性适配六个维度打分。

7.5/10
综合评分
结论:五道上线门槛至今没有一项改动跨过(最好 2/5)——先纸面跟踪,不实盘

逻辑扎实,参数可调,但过拟合与流动性仍需关注

方案的双层架构与参数化设计思路正确,冲突处理规则清晰,具备工程可实施性。 参数可调提升了抗过拟合能力,但仍需样本外滚动验证确认。 科创50择时效果存疑与流动性约束两项风险需在实盘前解决。

逻辑严谨性8.5
双轴分类与分层过滤逻辑自洽,冲突规则明确,命名修正后无歧义。
可执行性7.5
参数可调提升可执行性;多指数调仓仍需处理资金分配与最小交易单位。
数据可得性8.5
支持本地导入真实数据,参数可调,全前端计算,不依赖写死区间。
抗过拟合6.5
参数可调 + 稳健性测试入口,结果带指纹可留档,并按市场状态 / 品种属性分层看翻不翻号;仍是样本内,需样本外验证。
风险控制7.8
分层仓位 + 冲突保守优先 + 调仓缓冲,风控结构完整;滞后性盲区无解。
流动性适配6.2
科创50ETF日均成交额仅2.75~4.18亿,大资金进出冲击成本显著。

✓方案优势

  • 参数完全可调:MA/动量周期、仓位矩阵、共识算法均可配置
  • 双轴分类有效:MA位置与动量结合,能区分单动量无法识别的下跌反弹陷阱
  • 分层架构合理:总环境锚 + 风格卫星,避免风格指数各自为政
  • 冲突规则清晰:风格指数只能收缩不能扩张,取更保守者
  • 数据可导入可导出:CSV/JSON 双向,配置可保存复用
  • 参数稳健性可自测且可留档:回测区块内置「参数对比」,单参数扰动 + 成本压力一键跑完,结果带「区间 + 基线配置 + 指纹」导出成记录(JSON / CSV / 剪贴板),或 npm run report:pc 落盘复跑

!需要验证

  • 参数敏感性:换MA10~MA60、动量10~60,观察结论是否一致 —— 回测区块「参数对比」可直接跑,跑完导出带指纹的记录留档;但仍需人判断:面板只给盘面、不给结论,且稳健性只对单指数回测内核消费的 25 个参数成立 —— 共识算法与仓位矩阵属于共识层,组合回测移除后这条路径没有回测出口,扰动它们只会得到基线行的复制粘贴,要测得先重建共识层回测
  • 样本外滚动验证:至少覆盖3个完整市场周期
  • 共识算法选择:多数 / 加权 / 保守三种模式哪个更稳健
  • 仓位矩阵最优点:不同象限组合下的仓位比例最优值
  • 滚动贝塔分组:120日窗口的贝塔关系是否随时间稳定

×主要风险

  • 科创50择时效果弱:技术指标对科创50的择时夏普未能稳定超过指数自身
  • 流动性约束:科创50ETF规模超过日均成交额10%时,实际成交价显著偏离
  • 顶部反转盲区:MA与动量滞后5~8天,7月型顶部反转无解
  • 权重集中:科创50半导体权重超70%,前十大成分股占比近60%
  • 参数过拟合:可调参数越多,越容易过度拟合历史

▤考试台账 · 结论与出处(不只留在脚本里)

这一轮把四个想法各自考了一遍。判据、折切分、成本倍率全部走页面自己的内核 (pcWalkScan + pcWfGatesOf,五条上线门槛事前写死), 所以这里的数字与面板「参数对比 → 样本外滚动验证」同源。 日线每天在长,绝对值会漂 —— 引用时请连指纹一起记,指纹变了就是数变了。

✗ 已证伪
不进默认
「5 日快线离场」:5 日动量翻负就清仓

读数层它确实领先:持仓段内 5 日首次转负比真清仓中位早 8 个交易日, 10 日早 3 天,20 日只早 1 天,且 46.2% 的段 20 日线全程不转负; 清仓那天 20 日动量还为正占 56.9%。但把它写成规则(阈值 0.5% / 2% / 4% 三档), 拼接样本外择时α −1.78 / −0.93 / −0.82pp,全输默认档的 −0.55pp, 逐折相对默认的α差平均 −0.35 / −0.14 / −0.05pp,连样本内都不如默认档; 换手 722%→906%、在场 13.8%→9.7%。 教训:领先 ≠ 有增益。参数 smFastMomExit 默认 0 = 关闭 (回归钉着「默认配置下零触发、仓位与现网逐位一致」的惰性合同),面板上仍可手动开。

复跑 npm run report:mom 指纹 4d68277b · npm run report:fastexit 指纹 9361a1c3
只作读盘
不作信号
5 / 10 日短动量叠加 与 三条动量组合状态

图上那两条线(右上「短动量」开关)只进显示层:不进 config、不碰象限与状态机 (开关前后回测净值逐位相同,有回归断言)。把它们正负拼成 8 种组合状态, 在 60,027 个「指数·交易日」观测上看有没有预测力:描述侧极干净 —— 三周期同正的日子持仓率 81.2%、三负只有 1.0%,1,276 次建仓 88% 落在三同上, 清仓事件后 10 日 −0.36%(说明卖点方向是对的)。但预测侧基本是空的: 持仓语境里可比的 12 个格子,前后对半同号的只有 2 个(17%), 而纯噪声下这个比例本就接近一半。 ⇒ 组合状态用来解释买卖点,不用来生成买卖点。

复跑 npm run report:combo 指纹 149d673c
候选
2/5 未上线
品种准入 R6「不倒挂」:换宇宙,冻结名单

先验来自 §评估区那条老判断 —— α 的正负写在品种属性里(与基准年化波动相关 +0.571), 所以该修的是准入不是参数。事前检验(属性只允许用考核窗之前的数据、8 条规则事前写死) 里 7 条规则的样本外α增益为正,但只有 R6「在场日基准复合 − 空仓日基准复合 > 0」 同时满足三块同号 + 反向成立 + 名单稳定(相邻复核重叠 85%~90%)。 五门槛考试(名单工坊窗冻结、38/51 只):样本外α从 −0.55pp 收窄到 −0.15pp,成本 2× 由 −0.22% 翻正到 +0.09%,回撤 −3.53%→−2.71%; 但 G1(样本外正α)与 G2(不输买入持有)仍不过,门槛通过数 2/5。 代价在表外:被剔的 13 只(红利、银行、煤炭、石化、军工…)同期被动年化 7.39%, 高于保留组 5.87% —— 这是拿 −1.52pp 的 beta 换 α 改善。 另外别拿样本内那个 +11.33pp 说事:它是"低波动品种拖累"的构成效应,不是新增信息。

复跑 npm run report:admit 指纹 f5e10bb4 · npm run report:admit:oos 指纹 36e70eb5
候选
2/5 未上线
同一准入改为「每 21 日滚动复核」:再考一次

现实里清单要复核,所以把 R6 改成每 21 交易日用「复核日之前」的数据重算 (51 槽位等权、未准入品种当日置零为现金,三档走同一个 pcWalkScan)。 结果更好一点但没跨过门槛:样本外α −0.55pp → 冻结 −0.15pp → 滚动 −0.02pp, 2× 成本 +0.20%,逐折Δα平均 +0.31pp(3/4 为正),而复核扰动极小 (23 次复核、名单进出合计 28 人次)。门槛通过数仍 2/5。 复核周期敏感性 5 / 21 / 63 / 120 日 → α −0.27 / −0.02 / −0.05 / +0.01pp: 周复核最差(追噪声);120 日那档 G1 擦线转正是同一块 OOS 上挑最优,不算结论。

复跑 npm run report:admit:roll(可 REVIEW=5|21|63|120)指纹 5c6685cc
把四场考试合起来读:加动量规则(✗ 全输)、加动量组合信号(✗ 无增量)、 换品种宇宙(△ α 从 −0.55pp 修到 −0.02pp、成本翻倍转正,但门槛仍 2/5)。 α 已经被准入修到接近 0,可样本外组合年化只有 1.05%,同宇宙被动持有 6.39% —— 剩下那 5.34pp 的缺口不在"时点踩得准不准",而在"平均在场只有 13%"。 所以下一站是暴露(在场时长 / 仓位上限 / 波动目标那一组), 而不是继续挑品种、也不再继续加动量类规则。默认参数与默认宇宙一律不动,纸面跟踪继续。
Roadmap

实施路线

五阶段推进,每阶段有明确产出与验收标准。

1
统一计算口径 已完成

修正象限命名、明确复权方式、定义边界与unknown处理规则。

2
前端计算引擎 已完成

MA、动量、四象限、连续区间全部由前端自动计算。

3
参数配置与导出 已完成

参数面板可调,共识算法可切换,配置与数据支持导入导出。

4
参数稳健性测试 已完成

回测区块已内置「参数对比」:单参数扰动 + 成本 1×/2×/3× 压力测试, 输出 175 只等权聚合的离散度与跑赢只数(在完整样本上直接可用)。 区间不足约 3 年时拒绝运行,避免在短样本上产出参数结论。 结果现在能沉淀成记录:面板导出 JSON / CSV / 剪贴板,命令行 npm run report:pc 落盘同一份,每条记录带「区间 + 基线配置 + 指纹」, 同指纹=可复现,DIFF=存档 可逐组比对。 扰动集本身也补齐了盲区:现在覆盖单指数内核消费的全部 25 个参数 (止盈 / 减仓地板 / 动量回落 / 波动免调带 / 量能条件 / MA 斜率 …), 并由回归与 npm run probe:pc 盯着两件事 —— 不许有「与基线逐位相同」的死扰动,不许把共识层的字段当被扰过。 最后一块也补上了:同一批仓位按市场状态(宽基锚 MA120 切的牛 / 震荡 / 熊段, 尺子固定不参与扰动)和品种属性(基准年化波动二分高 / 低两组)两条正交轴重算, 直接量化「换种行情还成不成立」—— 实测 45 个扰动档里 32 档至少在一种行情里与全样本反号, 而低波动组 α 在 45/45 档全为负(高波动组 0/45 为负)。 剩下的样本外滚动属于第 5 阶段。

5
样本外滚动验证与上线决策 已完成

训练窗 3 年 → 检验窗半年滚动 4 折(选择只看训练窗,拼接 OOS 467 个交易日), 成本 1×/2×/3× 各测一遍,五条门槛事前写死。 实测 2/5 通过 —— 未达上线门槛:默认参数在样本外 α −0.55pp(样本内是 +5.67pp), 跑输同段买入持有 5.42pp,成本翻倍后 OOS 年化转为 −0.22%。 结论是「不上、继续纸面跟踪」,而不是再调一档参数。