diff --git a/server.py b/server.py index e6b5aac1..85be48e2 100644 --- a/server.py +++ b/server.py @@ -850,6 +850,8 @@ def api_research_strategies(): 'evidence': '', } _entry['regime_winrates'] = _regime_winrates.get(_mv, {}) + # 2026-08-16 补全条目必须设 best_regime——否则前端按 best_regime 分表时被踢出所有温区表 + _entry['best_regime'] = _best_regime_map.get(_mv) _entry['current'] = True _entry['state'] = 'active' _entry['state_reason'] = '当前温区路由激活' diff --git a/strategy_lab.py b/strategy_lab.py index 2fc67738..6fdfccdd 100644 --- a/strategy_lab.py +++ b/strategy_lab.py @@ -2104,7 +2104,16 @@ def list_strategies(period_tag=None): days = PERIOD_SLICE_DAYS[period_tag] have_period = {r['version'] for r in rows} from datetime import datetime as _dt, timedelta as _td - for v in list(STRATEGIES.keys()) + [x for x in STRATEGY_DESCRIPTIONS.keys() if x not in STRATEGIES]: + # 2026-08-16 切窗版本集扩展:静态字典 + DB 里所有有回测记录的版本 + # (原版只遍历 STRATEGIES+STRATEGY_DESCRIPTIONS,导致 s2_panic/v_lurk_*/v_mr* 等 + # DB-only 策略在 1m/6m 周期整体消失) + _slice_versions = set(STRATEGIES.keys()) | set(STRATEGY_DESCRIPTIONS.keys()) + try: + _slice_versions |= {r[0] for r in conn.execute( + "SELECT DISTINCT version FROM strategy_research WHERE COALESCE(market,'a')='a'").fetchall()} + except Exception: + pass + for v in sorted(_slice_versions): if v in have_period: continue # 已有该 period 记录,不用切 row = conn.execute(