diff --git a/static/index.html b/static/index.html
index 3f88f6fb..db4ff580 100644
--- a/static/index.html
+++ b/static/index.html
@@ -2195,11 +2195,14 @@ async function loadStrategyList() {
else if (mkt === 'a') strats = strats.filter(s => (s.market || 'all') !== 'hk');
// 2026-08-16 大盘基准(从任一策略 qualification 提取,供温区表头显示)
for (const s of strats) {
- if (s.qualification && s.qualification.bench_1y != null) {
- window._bench1y = s.qualification.bench_1y;
- window._bench2y = s.qualification.bench_2y;
- window._bench10y = s.qualification.bench_10y;
- break;
+ if (s.qualification) {
+ const anyQ = Object.values(s.qualification)[0];
+ if (anyQ && anyQ.bench_1y != null) {
+ window._bench1y = anyQ.bench_1y;
+ window._bench2y = anyQ.bench_2y;
+ window._bench10y = anyQ.bench_10y;
+ break;
+ }
}
}
renderStrategyTable(strats);
@@ -2314,7 +2317,7 @@ async function toggleAvail(version, checked) {
}
async function batchAvail(rg, available) {
const list = (window._strats || [])
- .filter(s => s.best_regime === rg && (s.market || 'all') !== 'hk')
+ .filter(s => s.qualification && s.qualification[rg] && (s.market || 'all') !== 'hk')
.map(s => s.version);
if (!list.length) return;
try {
@@ -2543,10 +2546,10 @@ function renderStrategyTable(strategies) {
'
' + s.version + (isActive ? ' 激活' : '') + ((s.market && s.market !== 'all') ? ' ' + (s.market === 'hk' ? '港' : 'A') + '' : '') + ' | ' +
'' + (s.name || '') + (smallSample ? ' ⚠️' : '') + ' | ' +
// 2026-08-16 资格列:长期/近期/当下 三项达标徽章
- '' + (s.qualification ? (
- '' + (s.qualification.long_ok ? '✅' : '❌') + '' +
- '' + (s.qualification.mid_ok ? '✅' : '❌') + '' +
- '' + (s.qualification.short_ok ? '✅' : '❌') + ''
+ ' | ' + (s.qualification && s.qualification[rg] ? (
+ '' + (s.qualification[rg].long_ok ? '✅' : '❌') + '' +
+ '' + (s.qualification[rg].mid_ok ? '✅' : '❌') + '' +
+ '' + (s.qualification[rg].short_ok ? '✅' : '❌') + ''
) : '—') +
(s.qual_warning ? ' ' + s.qual_warning + ' ' : '') +
' | ' +
@@ -2568,10 +2571,10 @@ function renderStrategyTable(strategies) {
' | ';
};
const renderRegimeTable = (strats, rg, isCur, marketLabel, tempHtml) => {
- // 2026-08-15 方案A:策略只在适应温区(best_regime)表显示一行——所有列都是该策略在适应温区的数据
- // 2026-08-16 温区感知排序:尊重 window._sortKey(点列头排序),字段从 regime_winrates[rg] 取
+ // 2026-08-16 温区表显示该温区下【资格达标】的策略(qualification[rg] 存在 = 有10y数据+长期合格)
+ // 策略可适应多个温区:在它达标的每个温区表都显示一行(不再局限单个 best_regime)
const metas = strats
- .filter(s => s.best_regime === rg && (s.regime_winrates || {})[rg] && (s.regime_winrates || {})[rg].trades != null);
+ .filter(s => s.qualification && s.qualification[rg] && (s.regime_winrates || {})[rg] && (s.regime_winrates || {})[rg].trades != null);
const regimeGet = (s, key) => {
const rw = (s.regime_winrates || {})[rg] || {};
const pf = rw.portfolio || {};