From 0a316c1daeae5a9bd7dabd63fe4134c855f5ccd1 Mon Sep 17 00:00:00 2001 From: xxm Date: Sat, 15 Aug 2026 22:31:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=97=A0=E4=BB=B7=E5=80=BC=E7=AD=96?= =?UTF-8?q?=E7=95=A5=E6=B7=98=E6=B1=B0=E2=80=94=E2=80=942y+10y=E6=B8=A9?= =?UTF-8?q?=E5=8C=BA=E5=B9=B4=E5=8C=96=E9=83=BD=E8=B7=91=E4=B8=8D=E8=B5=A2?= =?UTF-8?q?=E5=A4=A7=E7=9B=98=E2=86=92=E5=8E=86=E5=8F=B2(unavailable),?= =?UTF-8?q?=E5=9F=BA=E5=87=86=3Dmarket=5Fregime=E6=8C=87=E6=95=B0=E5=B9=B4?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.py | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/server.py b/server.py index ff0c4182..8ab62aa2 100644 --- a/server.py +++ b/server.py @@ -832,8 +832,36 @@ def api_research_strategies(): s['state'] = 'unavailable' s['state_reason'] = '已证伪: ' + str(s['deprecated'])[:80] elif s['version'] in _candidate_pool: - s['state'] = 'available' - s['state_reason'] = '候选池内,当前温区未激活(温区切换即可激活)' + # ── 2026-08-15 无价值淘汰:2y+10y 温区年化都跑不赢大盘 → 历史 ── + # 只在 2y/10y 请求时判定;用当次数据(2y) + 缓存(10y),避免额外重算 + _elim_reason = None + try: + _b2, _b10 = _get_benchmarks() + if _b2 is not None and _b10 is not None and pt in ('2y', '10y'): + _r2 = _regime_winrates if pt == '2y' else None + _r10 = _regime_winrates if pt == '10y' else None + # 缓存里拿另一周期(命中才判定,未命中本轮跳过) + _slots_c = _regime_winrates_cache.get("slots") or {} + if _r2 is None and ('2y' in _slots_c): + _r2 = _slots_c['2y'][1] + if _r10 is None and ('10y' in _slots_c): + _r10 = _slots_c['10y'][1] + if _r2 is not None and _r10 is not None: + _v2 = _r2.get(s['version']) or {} + _v10 = _r10.get(s['version']) or {} + if _v2 and _v10: + _best2 = max(r.get('cagr_pct') or -999 for r in _v2.values()) + _best10 = max(r.get('cagr_pct') or -999 for r in _v10.values()) + if _best2 < _b2 and _best10 < _b10: + _elim_reason = f'2y年化{round(_best2,1)}%<大盘{_b2}% 且 10y年化{round(_best10,1)}%<大盘{_b10}%' + except Exception: + _elim_reason = None + if _elim_reason: + s['state'] = 'unavailable' + s['state_reason'] = '跑不赢大盘已淘汰: ' + _elim_reason + else: + s['state'] = 'available' + s['state_reason'] = '候选池内,当前温区未激活(温区切换即可激活)' else: s['state'] = 'unavailable' s['state_reason'] = '不在候选池(历史版本,路由不会选中)'