fix: 激活策略始终在列表中——默认2y周期下其他激活策略(s2_panic/v_lurk_v3/v_mr/v_mr4/v_mr_sel)无回测记录被过滤, 现用10y数据补全加入列表
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user