diff --git a/static/index.html b/static/index.html index b95478b3..ab00b89f 100644 --- a/static/index.html +++ b/static/index.html @@ -2279,10 +2279,12 @@ async function loadEvolutionBox() { h += '
' + '
[B组 '+b.regime.replace('trend_','')+'] ' + b.hypothesis + ' ' + (b.trades_est||'?') + '样本 好果率' + (b.good_rate || b.ok_rate || b.big_rate || '?') + '%
' + - '
对照A组(' + b.regime.replace('trend_','') + '): ' + (aNames.join(', ') || '—') + '
'; + '
对照A组(' + b.regime.replace('trend_','') + '): ' + (aNames.join(', ') || '—') + '
' + + (b.status === 'verified' ? '' : '') + + ''; } } else { - h += '
暂无B组候选(由果及因扫描中,数据事实:震荡/下跌市因子区分度不足)
'; + h += '
暂无B组候选(挖掘中;通过模拟验证的候选可融合到A组)
'; } // ── 2026-08-16 策略资格概览(温区适应评估)── @@ -2358,6 +2360,17 @@ async function toggleAvail(version, checked) { loadStrategyList(); // 刷新(state 可能变化) } catch(e) { console.error('toggleAvail failed', e); } } +// 2026-08-16 AB融合:B组verified候选 → A组实施(需老莫确认) +async function mergeBGroup() { + if (!confirm('确认将B组候选融合到A组实施?融合后可手动启用/停用。')) return; + try { + const r = await fetch('/api/evolution/merge_b_group', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{}'}); + const d = await r.json(); + alert('融合结果: ' + JSON.stringify(d.merged || d.error || d)); + loadEvolutionBox(); + loadStrategyList(); + } catch(e) { alert('融合失败: ' + e.message); } +} async function batchAvail(rg, available) { const list = (window._strats || []) .filter(s => s.qualification && s.qualification[rg] && (s.market || 'all') !== 'hk')