diff --git a/static/index.html b/static/index.html
index 80595079..66427c73 100644
--- a/static/index.html
+++ b/static/index.html
@@ -2016,7 +2016,12 @@ function renderStrategyTable(strategies) {
const sh = Math.min(Math.max(st.sharpe_ratio || 0, 0), 20) / 20 * 20;
const pfc = Math.min(st.profit_factor || 0, 5) / 5 * 15;
const dd = (1 - Math.min(pff.portfolio_max_dd_pct || 0, 50) / 50) * 15;
- s._composite = Math.round(ret + wr + sh + pfc + dd);
+ // 置信系数:样本量(<40笔递减) × 普适月份(<6月递减)——小样本/单窗口策略的可信度打折
+ const n = st.total_trades || 0;
+ const months = (st.universality || {}).months || 0;
+ const conf = Math.min(1, n / 40) * (months > 0 ? Math.min(1, months / 6) : 1);
+ s._confidence = conf;
+ s._composite = Math.round((ret + wr + sh + pfc + dd) * conf);
}
// 保存数据用于列排序
window._strats = strategies;
@@ -2107,7 +2112,7 @@ function renderStrategyTable(strategies) {
'
' + s.version + (isCurrent ? ' 当前' : '') + ((s.market && s.market !== 'all') ? ' ' + (s.market === 'hk' ? '港' : 'A') + '' : '') + ' | ' +
'' + (s.name || '') + (smallSample ? ' ⚠️' : '') + ' | ' +
'' + (st.sizing_slots ? st.sizing_slots + '仓' : '10仓') + ' | ' +
- cell('composite', s._composite, v => v, 'font-bold text-amber-300') +
+ cell('composite', s._composite, v => v + (s._confidence != null && s._confidence < 1 ? '×' + s._confidence.toFixed(2) + '' : ''), 'font-bold text-amber-300') +
cell('universality_score', (st.universality || {}).score, v => v + '/' + (st.universality || {}).months + '月') +
cell('full_return_pct', (st.portfolio_full || {}).total_return_pct, v => v + '%' + ((st.portfolio_full||{}).std ? '±' + (st.portfolio_full||{}).std + '' : ''), 'font-bold text-amber-300') +
cell('capital_final', (st.portfolio_full||pf).capital_final, v => '¥' + (v/10000).toFixed(0) + '万') +