feat: 温区自适应前端横幅+router v5+overview API——概览页置顶显示温区/温度/激活策略, server.py /api/overview 返回 regime_weights, strategy_router v5 动态策略库

This commit is contained in:
hmo
2026-08-13 10:55:46 +08:00
parent 41bf9ffde9
commit dec30896c3
3 changed files with 114 additions and 81 deletions
+31 -1
View File
@@ -380,7 +380,37 @@ function renderOverview() {
</div>
`).join('') : '<div class="text-xs text-slate-500">暂无大幅异动</div>';
el.innerHTML = `
// ── 温区自适应横幅(2026-08-13 概览页置顶)──
let regimeHtml = '';
try {
const rw = d.regime_weights || null;
if (rw && rw.state) {
const regIcon = {trend_up:'📈', choppy:'〰️', trend_down:'📉'}[rw.state] || '🌐';
const regName = {trend_up:'趋势市', choppy:'震荡市', trend_down:'下跌市'}[rw.state] || rw.state;
const regColor = rw.state==='trend_up' ? 'text-emerald-400' : rw.state==='choppy' ? 'text-amber-400' : 'text-red-400';
const bandIcon = {panic:'🔴', fear:'🟠', neutral:'🟡', greed:'🟢', euphoria:'🔵'}[rw.temp_band] || '⚪';
const bandName = {panic:'恐慌', fear:'偏冷', neutral:'中性', greed:'偏热', euphoria:'亢奋'}[rw.temp_band] || rw.temp_band;
const activeList = (rw.active || []).slice(0, 6);
regimeHtml = '<div class="bg-indigo-900/25 border border-indigo-500/40 rounded-xl p-3 mb-4">' +
'<div class="flex items-center justify-between flex-wrap gap-2">' +
'<div class="flex items-center gap-2"><span class="text-lg">🌡️</span>' +
'<span class="font-bold ' + regColor + '">' + regIcon + ' ' + regName + '</span>' +
'<span class="text-xs text-slate-400">(平滑' + (rw.state_date||'') + ')</span></div>' +
'<div class="flex items-center gap-3 text-xs">' +
'<span>温度: <b>' + bandIcon + ' ' + bandName + '</b>' + (rw.temp_rsi ? ' <span class="text-slate-500">RSI=' + rw.temp_rsi + '</span>' : '') + '</span>' +
'</div>' +
'</div>' +
(activeList.length ? '<div class="flex flex-wrap gap-1.5 mt-2">' + activeList.map(n => {
const w = rw.weights && rw.weights[n];
const wr = w && w.best_win_rate != null ? ' ' + w.best_win_rate + '%' : '';
return '<span class="text-[11px] bg-emerald-500/15 text-emerald-300 border border-emerald-500/30 rounded px-2 py-0.5"><span class="font-mono font-bold">' + n + '</span>' + wr + '</span>';
}).join('') + '</div>' : '') +
'<div class="text-[11px] text-slate-500 mt-1.5">策略按当前温区自动激活(strategy_weights.json),选股/买卖/重评已温区感知</div>' +
'</div>';
}
} catch(e) {}
el.innerHTML = regimeHtml + `
<div class="grid grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
${statCard('总资产', formatMoney(d.total_assets), '💰')}
${statCard('股票市值', formatMoney(d.stock_value), '📈')}