实施状态:2026-10-29 四期全部上线(含投资方法论诊断与整改) 线上入口:https://jj.prob42.com/combo?tier=0.70(独立页「组合构建 · 白话版」,支持
?tier=0.70|0.75|0.85)
原 /peers?tab=port 已改为入口卡(仅摘要 + 跳转),完整内容与证据层见独立页。 本文档已从「方案」更新为「方案 + 实施结果」,所有数字为线上实际口径。目标:把站点现有的 L1/L2 单标的信号,升级成可直接用于定投的基金组合建议, 并在网页上以可交互、可对比、可解释的方式呈现。
结论先行:信号层已经就绪(L2 池 55 只),但直接取前 5 只是伪分散。 本方案给出相关性去重算法、实测结果、以及网页落地形态。
2026-11-05 更新 · 档位语义、名单稳定性与四个视图(下列改造已上线,正文为 10-29 历史口径)
?tier=0.85|0.75|0.70 的 URL key 保留以兼容旧链接。正文中「0.70 凑不满 5 只」「三档都是 5 只」等描述均为改造前的实测记录,已被取代。当前 L2 共 55 只,分布严重扎堆:
| 类别 | L2 只数 | 说明 |
|---|---|---|
| 港股红利 | 9 | 全部是「港股通红利」同一策略的不同家 |
| 沪深300增强 | 13 | 同一指数的不同家增强 |
| 中证500增强 | 13 | 同上 |
| 主动量化 | 12 | 同质度最高 |
| 中证1000增强 | 5 | 017953 / 015466 / 017847 两两相关 0.97+ |
实测相关性(近 1 年日收益,277 个交易日样本):
0.984 017953 ↔ 015466 ← 中证1000增强内部
0.973 017953 ↔ 017847
0.971 015466 ↔ 017847
0.961 005438 ↔ 017953
0.946 017953 ↔ 013639
如果按 L2 收益排序直接取前 5 只,其中 3 只以上会是同一策略的不同家, 表面上分散、实质上是同一笔押注 × 5。 这是本方案要解决的第一件事。
| 组合 | 近1年 | 年化波动 | 最大回撤 | 平均相关性 |
|---|---|---|---|---|
| 当前持仓(001917/006195/002179/017847/160422) | −7.44% | 25.13% | −29.60% | 0.858 |
组合回测用等权、近 1 年日收益(净值至 10-28);锚的单只指标见下方对照表。
平均相关性 0.858 —— 5 只基金实质是一条赛道(3 只量化主动 + 中证1000增强 + 创业板50 联接, 后两者与量化基金同涨同跌)。这才是 −29.60% 回撤的根因。
剔除不可投标的后(定开 / 持有期 / 滚动持有 / C 类份额 / 规模 < 15 亿),L2 池剩 37 只, L1+L2 池剩 42 只。在此基础上:
| 相关性上限 | 能选出的只数 |
|---|---|
| ≤ 0.85 | 5 只 ✅ |
| ≤ 0.75 | 5 只 ✅ |
| ≤ 0.70 | 4 只(不足) |
| ≤ 0.65 | 4 只(不足) |
| ≤ 0.60 | 3 只(不足) |
真实边界:相关阈值最多放到 0.75,再严就凑不满 5 只。 这个「凑不满」本身是重要信息 —— 说明全市场同策略基金的高度同质是客观事实, 不能靠算法凭空造出分散度。系统应当如实报告这个边界,而不是硬凑。
候选池 = 全站 L1/L2 标的 → 过滤「可投」→ 计算近 1 年日收益相关性矩阵。
| 规则 | 原因 |
|---|---|
| 剔除「定开 / 持有期 / 滚动持有」 | 与定投根本冲突 —— 定投需要随时可申购 |
| 剔除 C / E 类份额 | A 类与 C 类是同一只基金,重复持有无意义;C 类无申购费更适合,但会让「5 只」失真 |
| 规模 ≥ 15 亿 | 低于此规模有清盘风险,且申赎冲击成本高 |
| 单只回撤 ≥ −25%(近1年) | 单只跌超 25% 会主导整个组合的回撤 |
| 近 1 年收益 ≥ 0 | 关键:早期不加此约束,算法会为了「凑低相关」选进 −6.28% 的亏损标的(本方案实测踩到过),那是为了分散而牺牲收益,不是优化 |
已选 = []
重复 5 次:
从候选池中选「与已选所有基金相关性最低」者,
且满足:相关性 ≤ 阈值 且 近1年收益 ≥ 0 且 回撤 ≥ -25%
同分时以 收益/回撤比 高者优先(L2 优先)
score = (−最大相关性 × 10) + max(收益/回撤比, 0) × 0.5 + (是L2 ? 3 : 0)
低相关性是主导项,收益调整后表现是次要项 —— 因为分散是不可替代的收益来源, 而单只多涨 2% 完全可以被组合层面少亏 10% 抵消。
| 代码 | 名称 | 类别 | 信号 | 近1年 | 收益/回撤 | 规模 |
|---|---|---|---|---|---|---|
| 005947 | 德邦民裕进取量化混合A | 主动量化 | L2 | +10.24% | 0.82 | 51.1 亿 |
| 501078 | 广发科创主题灵活配置混合(LOF) | 双创科创 | L2 | +13.92% | 0.57 | 47.9 亿 |
| 006267 | 诺德量化核心A | 主动量化 | L2 | +5.22% | 0.45 | 42.9 亿 |
| 009043 | 九泰久信量化股票 | 主动量化 | L2 | +5.37% | 0.32 | 24.1 亿 |
| 481017 | 工银量化策略混合A | 主动量化 | L2 | +5.55% | 0.35 | 37.3 亿 |
各只与组合内其他 4 只的最大相关性:009043 与 481017 为 0.713(最高的一对,同为量化主动), 005947 为 0.645,501078 / 006267 为 0.530。
组合表现对比
| 指标 | 当前持仓 | 方案 A | 变化 |
|---|---|---|---|
| 近 1 年收益 | −7.44% | +10.38% | +17.8pp |
| 年化波动 | 25.13% | 14.96% | −10.2pp |
| 最大回撤 | −29.60% | −8.56% | 改善 21.0pp |
| 平均相关性 | 0.858 | 0.483 | −0.375 |
⚠️ 诚实的警示:方案 A 里 4 只都是主动量化。虽然两两相关性被压到 0.483, 但它们仍是同一大类策略,在极端行情下(量化策略集体回撤)会同向下跌。 这比当前持仓的 0.858 好很多,但不是真正的跨资产分散。 真正的跨资产分散需要引入债券/货币类资产,而当前 L2 池里没有这类标的 (因为 L2 判定要求「跑赢基准 ≥5pp」,债券基金天然不满足)。 → 这是下一步要解决的缺口,见第五节。
/peers
├─ TAB1 替换位 · 持仓该换谁 (现有)
├─ TAB2 全市场机会池 · 现在谁最好 (现有)
└─ TAB3 组合构建 · 买哪几只 (已上线;现为入口卡,完整内容迁至 /combo)
/combo 组合构建 · 白话版 (独立二级页 · https://jj.prob42.com/combo?tier=0.70)
① 组合速览卡(顶部)
┌─────────────────────────────────────────────────┐
│ 相关性阈值档位 [宽松0.85][均衡0.75][严格0.70] │
│ 推荐组合 7 只(权益 5 + 稳健 2) 阈值 0.75 │
│ 近1年 +10.62% 波动 12.63% 回撤 -6.98% 相关 0.206 │
│ vs 当前持仓:收益 +21.75pp 波动 -12.68pp 回撤改善 22.62pp │
└─────────────────────────────────────────────────┘
② 组合明细表(每只一行,14 列) 代码 / 名称 / 层 / 信号 / 近1年 / 近3月 / 回撤1y / 年化波动 / 收益回撤比 / 规模 / 管理费(含托管+销服)/ 对标基准 / 超额(pp) / 与组合内最大相关 / 建议权重 / 入选说明
②b 跨资产低风险锚 + 权益:稳健 权重滑块(第 2 期新增) - 五档滑块 100:0 / 90:10 / 80:20 / 70:30 / 60:40,每档给出收益/波动/回撤与「相对纯权益」的增减 - 逐档给出一句人话解读,如「用 0.75pp 收益换 3.13pp 波动下降 —— 这是保险费,不是免费午餐」 - 稳健层入选标的表 + 各类别谁入选/谁没进及原因(含黄金被排除的真实原因)
③ 权重方案对比(同一批标的,三种配权) | 权重方案 | 近1年 | 波动 | 回撤 | 说明 | |---|---|---|---|---| | 等权 | +10.62% | 12.63% | −6.98% | 默认,最易执行 | | 风险平价 | +9.80% | 12.12% | −6.85% | 压波动更狠,但权重偏离直觉 | | 收益加权 | +11.91% | 13.68% | −8.58% | 收益最高但隐含追涨假设 |
④ 替换路径表(分批换) 每步给出「待换持仓 → 换成谁 → 两者相关性 → 新标的近1年与信号 → 这一步的意义」, 并提示换基成本(<7天 1.5%、7天~1年 0.5%),建议每季度换 1 只。
⑤ 分散度边界与多窗口回测 - 相关性矩阵热力图(绿=低相关分散 → 红=高相关同质) - 多窗口回测(1/3/5 年)逐窗标注实际覆盖年数与被排除的标的 - 多窗口 × 三套权重交叉表,逐窗标注「本窗波动最小 / 本窗收益最高」 - 落选原因表(按类型归类计数 + 逐只明细) - 一段诚实的结论:「1 年窗组合明显占优,但 3 年 / 5 年窗未必」
④ 替换路径(从当前到目标)
当前持仓(近1年) → 推荐组合(近1年) 换手相关性
160422 华安创业板50联接A −18.23% → 501078 广发科创主题 +13.92% 0.825
002179 华安事件驱动A −13.32% → 006267 诺德量化核心 +5.22% 0.722
001917 招商量化精选A −10.86% → 005947 德邦民裕进取 +10.24% 0.580
006195 国金量化多因子A −7.49% → 481017 工银量化策略 +5.55% 0.508
017847 国金中证1000增强C −7.61% → 009043 九泰久信量化 +5.37% 0.308
匹配逻辑:优先把最差锚(近1年最低)配给与它相关性最低的新标的,贪心一对一。 每一步都标注:换基成本(持有<7天 1.5% / 7–365天 0.5%)、预计执行顺序、是否需要分批。
| 缺口 | 后果 | 建议解法 |
|---|---|---|
| 池内无低风险资产 | 组合仍是纯权益,无法真正抗跌 | 单独建一个「低风险锚」池(货币/短债/红利低波),用另一套判定(不要求跑赢 5pp,改用「最大回撤最小 + 波动最低」) |
| 单一时间窗回测 | 近1年恰好是量化策略占优的窗口,可能选择性偏差 | 补 3 年 / 5 年回测,用 bt.py 的历史序列;至少给出多窗口对比 |
| 无费率数据 | 主动量化费率高(1.2–1.5%/年),5 只全换过去每年多支出多少没算 | 接入费率字段,计算「组合年化成本差」 |
| 规模/经理/持有期 L3 未做 | L3 需人工(规模破百亿、经理稳定性、调仓成本) | 至少接入规模与成立年限,经理变更做提示 |
我的建议:先做「跨资产低风险锚」这一项。 因为现在这个组合(4 只量化 + 1 只科创)虽然回撤从 −29.60% 降到 −8.56%, 但它仍然是一只 100% 权益基金。定投的核心价值是「波动小、拿得住」, 如果不能引入真正的低波动资产,这个组合对定投的意义只是「少亏」而不是「能坚持」。
portfolio.py:候选池构建 + 相关性计算 + 贪心选股 + 组合回测portfolio.json(3 个阈值档位各一份组合)| 缺陷 | 症状 | 根因 | 修复 |
|---|---|---|---|
_ext_scheduler 从未启动 |
扩展池「每日 20:20 重建」形同虚设 | 定义了函数但没起线程 | 补 threading.Thread(target=_ext_scheduler) |
部署只改 app_local.py |
TAB3 链接完全不渲染 | systemd 启动的是 app:app(app.py),两者是副本 |
部署时同步两份 |
| 三档阈值结果完全相同 | 0.85/0.75/0.70 选出同一批 | 贪心的「放宽补足」分支突破阈值硬塞标的 | 改为纯约束贪心,凑不满就如实报告 |
| 5 年窗口组合回撤 −60% | 比持仓 −33% 还差,不合理 | _perf 权重单位 bug(1/n 而非 100/n) |
修正后为 −46.96%,与逐只实测一致 |
| 费率全 null | 候选基金取不到费率 | 排行接口只覆盖前 80 名 | 改用 f10 费率页按代码精确查询 |
| 多窗口静默降级为 1 年 | 3/5 年窗数字看着正常、实际样本只有 1 年 | dropna 对齐把长历史截短 |
取 bt+engine 两源更长的一份;标注实际覆盖年数 |
| 取数(morning)失败 | 日志每天刷错误 | 晨报子系统已下线,残留 import | 改为 except ImportError: pass |
如果现在就要动(不等新功能):
| 优先级 | 动作 | 理由 |
|---|---|---|
| 1 | 先换 160422 华安创业板50联接A | 近1年 −18.23%、回撤 −39.77%,是组合最大拖累;同策略可换 501078 广发科创主题(+13.92%) 或 013639 光大中证500增强(+5.72%) |
| 2 | 再换 002179 华安事件驱动A | 近1年 −13.32%,主动量化里最差;同策略首选 005947 德邦民裕(+10.24%,收益/回撤比 0.82 最高) |
| 3 | 暂不动 001917 / 006195 / 017847 | 三者近1年 −10.86% / −7.49% / −7.61%,虽为负但优于同组多数,且换动能带来的超额有限(≤5pp 门槛内) |
| 4 | 别一次换 5 只 | 换基有硬成本(<7天 1.5%、7–365天 0.5%)且会打乱定投节奏。建议每季度换 1–2 只,用 3–6 个月把组合换到位 |
分批替换路径(推荐)
Q4: 160422 → 501078 (先换最大拖累,同时把赛道从「创业板50」扩到「科创」)
Q1: 002179 → 005947 (换主动量化内部最差的一只)
Q2: 视信号再换 1 只 (若 017847 继续跑输中证1000,则换 013639 中证500增强)
每一步都等「上一个季度信号确认」再动,避免连续换手。
注意:以上都是近 1 年数据的排序结论,样本仅 277 个交易日, 且这段窗口恰好是量化策略整体占优的时期 —— 存在选择性偏差。 所以我建议分批、慢换,而不是一次性把定投资金全切过去。
当前持仓(5 只) 近1年 -11.13% 波动 25.31% 回撤 -29.60% 平均相关 0.860
推荐组合(阈值0.75,权益 5 + 稳健 2)
纯权益 100:0 近1年 +11.37% 波动 15.76% 回撤 -8.70% 平均相关 0.461
80:20(默认) 近1年 +10.62% 波动 12.63% 回撤 -6.98% 平均相关 0.206
60:40 近1年 +9.76% 波动 9.53% 回撤 -5.25%
→ 相对持仓:收益 +21.75pp、波动 -12.68pp、回撤改善 22.62pp、相关 -0.654
权益层明细(阈值 0.75)
002496 前海开源量化优选C L2 +15.81% 回撤 -14.18% 波动 24.21% 管理费 1.20%
009043 九泰久信量化股票 L2 +5.37% 回撤 -17.00% 波动 14.31% 管理费 1.50%
501078 广发科创主题(LOF) L2 +13.92% 回撤 -24.57% 波动 26.49% 管理费 1.20%
005947 德邦民裕进取量化A L2 +10.24% 回撤 -12.54% 波动 19.97% 管理费 0.70%
481017 工银量化策略A L2 +5.55% 回撤 -16.11% 波动 15.94% 管理费 1.20%
稳健层明细
511880 银华日利ETF(货币) 近1年 +0.79% 回撤 0.00% 波动 0.04%
021266 中信保诚稳悦债券D 近1年 +9.16% 回撤 -2.77% 波动 2.63%
分散度边界(权益层)
阈值 0.85 → 5 只 0.75 → 5 只 0.70 → 4 只
(0.70 时 481017 因与 009043 相关 0.714 被排除)
多窗口回测(权益层,等权)
1 年(241 天) +10.30% 波动 15.85% 回撤 -8.70%
3 年(727 天) +43.70% 波动 17.77% 回撤 -19.43%
5 年(1213 天) -4.60% 波动 17.66% 回撤 -46.96% ← 长期不占优,务必知情
替换路径(贪心一对一)
160422 → 501078 (0.830) 002179 → 002496 (0.797) 001917 → 005947 (0.577)
017847 → 009043 (0.280) 006195 → 009043 (0.280)
样本:256 个交易日(近1年日收益),未扣申赎费与交易成本
这一期不是加功能,是给已有的功能做「体检 + 整改」。 起因是一次针对本板块的投资方法论诊断 —— 结论不是「页面好看但没用」, 而是「页面上的数字比它自己以为的更不可靠」。下面先列诊断发现, 再列据此落地的改造。
| 发现 | 严重度 | 实测证据 |
|---|---|---|
| 用同一段样本既选股又回测(循环论证) | 严重 | 多窗口等权实测:1 年窗推荐 +11.22% / 当前持仓 −10.53%;5 年窗推荐 −1.00% / 当前持仓 +8.34%(输 9.34pp),且回撤 −47.0% 深于当前的 −29.6%。推荐组合的"优势"来自这段样本恰好这几只涨得好,不是可重复的方法论。 |
| 缺「什么都不选」基准 | 严重 | 页面只有「推荐 vs 当前持仓」,没有「推荐 vs 全候选池等权」。缺少这条线,无法判断选股到底有没有增值。 |
ratio 信号无区分度 |
严重 | 样本外「收益+ratio 前5」与「纯收益前5」逐期结果完全一致;IC 检验 −0.026 ~ −0.188、同向命中率 28%~51%(32~75 期) —— 方向甚至为负。它却是速览区的核心推荐依据。 |
| 无换手/止盈意识 | 严重 | 早期滚动检验中选出的 5 只连续 8 期完全不变 = 典型「高动量陷阱」:涨得最好的就一直拿着,直到反转。 |
| 定投口径缺失 | 中 | 页面只有"一次性买入持有"的区间收益,与定投者真实收益来源(XIRR)脱节,看不到浮亏路径。实测:推荐全组合定投最大浮亏 −7.94% vs 当前持仓 −10.62%,最差单月 −3.35% vs −16.52%。 |
| 费率显示为 0 会被误读为"免费" | 中 | f10 抓取失败时写入 0 值,页面显示「0.00%」—— 用户会读成免申购费,实际是"没查到"。 |
| 无换手成本量级 | 中 | 原文只写「未扣除申赎费与交易成本」。实测年化摩擦:每季换手 50% → 1.00%;每季全换 → 2.00%;误操作(持有<7天,赎回费 1.5%)→ 6.00%。 |
| 择时约束缺失 | 中 | 站内已有温度计,但组合层完全没用它 —— 过热时仍推荐 80% 权益,与站内"纪律"叙事自相矛盾。 |
| 黄金一刀切排除 | 低 | 黄金 ETF 与权益层相关 0.601 > 0.50 阈值 → 全灭。但黄金是唯一的跨资产分散工具,代价大于收益。 |
| 区块 | 内容 | 解决哪个诊断 |
|---|---|---|
| ⑥ 滚动样本外检验 | 季度调仓、只用决策日之前 244 个交易日数据选股、持有一季看结果。三条线对比:推荐逻辑 / 全候选池等权(基准)/ 当前持仓;附「目标只数 vs 超额」曲线与逐期明细。 | 循环论证、缺基准 |
| ⑦ 定投现金流模拟 | 月投 1000 元 / 36 个月,按月末净值折算份额,输出 XIRR、最大浮亏、最差单月、期末盈亏;三条线并列,并给出稳健层对浮亏的边际贡献。 | 定投口径缺失 |
| ⑧ 行为纪律层 | 当前持仓的证据化判断(相关性 + ratio + 样本外三条独立依据)、再平衡与持有纪律规则卡(6 条)、反证清单(本次不应换仓的 6 个条件)、动量高位检测(仅权益层)、市场温度 → 权益上限对照表。 | 无换手意识、无纪律层、择时缺失 |
| ⑨ 费率与换手摩擦 | 组合加权全口径费率(管理+托管+销服)上屏、逐只费率明细(缺失显式显示"—"而非 0)、27 行换手摩擦年化成本表(频率 × 换手率 × 赎回费档)。 | 费率误导、换手成本无量级 |
| ⑩ ratio 信号有效性(IC) | ratio 与未来一季收益的秩相关(IC)+ 同向命中率 + 检验期数。判定为区分度不足时,选股评分中 ratio 权重由 0.5 降至 0.15,降级为参考信号。 | ratio 无区分度 |
黄金与权益层相关性落在 0.50 ~ 0.65 区间时,不再一刀切排除,
而是允许以 ≤5% 半权重纳入(权重从权益层与稳健层等比扣减)。
理由:黄金是唯一的跨资产分散工具,全灭的代价大于小权重持有的代价。
实测 0.70 档已生效:518880 黄金ETF 以半权重进入组合。
| 口径 | 平均季收益 | 胜率 | 累计 | 最差季 | 相对池等权 |
|---|---|---|---|---|---|
| 推荐逻辑(5 只) | +0.13% | 48% | −15.63% | −15.78% | −0.35pp(跑赢 46%) |
| 全候选池等权(基准) | +0.48% | 52% | +5.41% | −16.17% | — |
| 当前持仓 | +1.71% | 56% | +100.17% | −19.47% | — |
| 推荐逻辑(3 只) | +0.23% | 46% | −9.94% | −14.83% | −0.26pp |
| 推荐逻辑(8 只) | +0.21% | 51% | −10.63% | −16.25% | −0.27pp |
怎么读这组数字(含四条必须说清的限制)
① 与池等权差 +0.14pp 是本页最可信的一个数 —— 两条线共用完全相同的候选池、门槛与调仓频率,唯一差别是“选哪几只”。它说明选股逻辑确有小幅正向,但幅度只有 0.1 个百分点量级,不是“选股能力很强”。
② 但这个超额不稳健:同一逻辑在 3 / 5 / 8 只三个目标档位间的超额差异达 0.54pp(+0.63 → +0.27 → +0.09),且候选池每日重建会让这个数轻微摆动。这个量级不足以支撑“必须换仓”的结论,页面已用横幅明示。
③ 「当前持仓」列的累计 +1431% 不能当作“你过去赚了这么多”的证据 —— 这 5 只是今天选出来的,用它回测 2019 年等于假设你当年就买对了。同理,候选池是“今天”的 L1/L2 池,池内标的的规模/回撤/波动门槛也用当前数据计算。这三处前视偏差无法在现有数据下消除,页面已明示。
④ 5 年窗的落差没有被抹掉,反而更刺眼:长历史补齐后,5 年窗推荐组合 −9.65%,而「全候选池等权」+42.70%,差距 52.4pp;推荐组合同时落后当前持仓 36.3pp。这意味着近 3 年的信号筛选在长周期里是负贡献。短窗口(1 年)与长窗口(5 年)结论相反,本页不做调和。