feat: 进化中心界面——假设归纳(方向一)+B组候选(方向二)+策略温区资格概览可视化

This commit is contained in:
xxm
2026-08-16 13:25:13 +08:00
parent eda5180396
commit c9facb5149
+40
View File
@@ -2257,6 +2257,46 @@ async function loadEvolutionBox() {
}
}
// ── 2026-08-16 假设归纳(方向一:数据驱动的优化假设)──
if (d.hypotheses && d.hypotheses.length > 0) {
h += '<div class="text-sm text-slate-400 mt-2 mb-1">🧪 数据归纳优化假设(方向一,基于最新交易数据):</div>';
for (const hp of d.hypotheses.slice(0,6)) {
const ex = hp.excess_pp != null ? ' <span class="text-amber-400 text-xs">Δ'+hp.excess_pp+'pp</span>' : '';
h += '<div class="text-sm text-slate-300 mb-1 bg-slate-900/40 rounded px-2 py-1">' +
'<span class="font-mono font-bold text-blue-300">'+hp.strategy+'</span> ' + hp.hypothesis + ex +
'<div class="text-[10px] text-slate-500">证据: ' + (hp.evidence || '') + '</div></div>';
}
} else {
h += '<div class="text-sm text-slate-600 mt-2 mb-1">🧪 假设归纳: 暂无显著假设(交易样本不足或特征均匀)</div>';
}
// ── 2026-08-16 B组候选(方向二:由果及因挖掘,AB对照)──
h += '<div class="text-sm text-slate-400 mt-2 mb-1">🔬 B组候选挖掘(方向二,由果及因 vs A组对照):</div>';
if (d.b_group && d.b_group.length > 0) {
for (const b of d.b_group.slice(0,6)) {
h += '<div class="text-sm text-slate-300 mb-1 bg-slate-900/40 rounded px-2 py-1">' +
'<span class="text-emerald-400 font-bold">['+b.regime+']</span> ' + b.hypothesis +
' <span class="text-slate-500 text-xs">' + (b.trades_est||'?') + '样本 反弹率' + (b.ok_rate||b.big_rate) + '%</span></div>';
}
} else {
h += '<div class="text-sm text-slate-600 mb-1">暂无B组候选(全市场单/双因子区分度不足——数据事实,需多因子叠加或更细温区)</div>';
}
// ── 2026-08-16 策略资格概览(温区适应评估)──
if (d.qual_overview && d.qual_overview.length > 0) {
h += '<div class="text-sm text-slate-400 mt-2 mb-1">📊 策略温区资格(长期/近期/当下):</div><div class="grid grid-cols-2 gap-1.5">';
for (const qo of d.qual_overview) {
const q = qo.qualification || {};
const rgTxt = Object.entries(q).map(([rg, v]) =>
'<span class="text-slate-500">'+rg.replace('trend_','')+'</span>' +
(v.long_ok?'✅':'❌')+(v.mid_ok?'✅':'❌')+(v.short_ok?'✅':'❌')).join(' ');
h += '<div class="bg-slate-900/40 rounded px-2 py-1 text-xs">' +
'<span class="font-mono font-bold text-blue-300">'+qo.strategy+'</span> ' +
'<span class="text-slate-500">'+qo.market+'</span><div class="text-[10px]">'+rgTxt+'</div></div>';
}
h += '</div>';
}
box.innerHTML = h;
} catch (e) { box.innerHTML = '<div class="text-sm text-red-400">进化模块加载失败: '+e.message+'</div>'; }
}