fix: 激活策略始终在列表中——默认2y周期下其他激活策略(s2_panic/v_lurk_v3/v_mr/v_mr4/v_mr_sel)无回测记录被过滤, 现用10y数据补全加入列表

This commit is contained in:
hmo
2026-08-13 12:44:39 +08:00
parent 0859c6b133
commit 7972f6031e
+22
View File
@@ -569,6 +569,28 @@ def api_research_strategies():
s['regime_winrates'] = _regime_winrates.get(s['version'], {})
# current = 当前温区激活(替代旧的 CURRENT_VERSIONS 硬编码)
s['current'] = s['version'] in _active_set
# 2026-08-13 关键修复:激活策略必须始终在列表中(即使该 period 无回测记录)
# 否则 2y 等默认周期下激活策略缺失(只显示 v_oversold)。
# 缺失的激活策略用 10y 数据补全 summary_stats + regime_winrates。
_existing = {s['version'] for s in strats}
_missing_active = sorted(_active_set - _existing)
if _missing_active:
try:
_s10 = list_strategies(period_tag='10y')
_by10 = {s['version']: s for s in _s10}
except Exception:
_by10 = {}
for _mv in _missing_active:
_s10 = _by10.get(_mv)
if not _s10:
continue
_entry = dict(_s10)
_entry['description'] = STRATEGY_DESCRIPTIONS.get(_mv, {})
_entry['regime_winrates'] = _regime_winrates.get(_mv, {})
_entry['current'] = True
_entry['note'] = f"({pt or '当前周期'}无回测记录,显示10y数据)"
strats.append(_entry)
return jsonify({'strategies': strats, 'regime_active': sorted(_active_set)})
except Exception as e:
return jsonify({'error': str(e)}), 500