// ==================== 动态指标卡片渲染 ==================== function renderDynamicIndicatorCard(symbol, data) { if (!data || data.error) { const errDiv = document.createElement('div'); errDiv.className = 'no-data error-margin-bottom'; errDiv.textContent = `⚠️ ${symbol} 指标加载失败: ${data?.error || '未知错误'}`; return errDiv; } // 检查字段定义是否已加载 if (!window.indicatorFields) { const errDiv = document.createElement('div'); errDiv.className = 'no-data error-margin-bottom'; errDiv.textContent = `⚠️ 指标字段定义未加载,请稍后刷新页面。`; return errDiv; } const { MACRO_ITEMS, CURRENT_ITEMS } = window.indicatorFields; const container = document.createElement('div'); container.className = 'dynamic-card'; const title = document.createElement('h3'); title.className = 'dynamic-card-title'; title.textContent = `📈 ${symbol} 实时指标 (基于最新K线)`; container.appendChild(title); const grid = document.createElement('div'); grid.className = 'dynamic-grid'; function addItem(key, label, unit, isBool) { let val = data[key]; if (val === undefined || val === null) return; let display; if (isBool) { display = val ? '是' : '否'; } else if (typeof val === 'number') { display = val.toFixed(2); if (unit) display += unit; } else { display = val; } const div = document.createElement('div'); div.innerHTML = `${label}: ${display}`; grid.appendChild(div); } for (let item of MACRO_ITEMS) addItem(item[0], item[1], item[2], false); for (let item of CURRENT_ITEMS) addItem(item[0], item[1], item[2], item[3] === 'bool'); container.appendChild(grid); return container; } function renderAllDynamicIndicators(dynamicDataMap) { if (!dynamicDataMap || Object.keys(dynamicDataMap).length === 0) { const div = document.createElement('div'); div.className = 'no-data'; div.textContent = '【实时指标】暂无数据,请先点击MEXC或Binance按钮获取K线数据。'; return div; } const container = document.createElement('div'); let hasValidData = false; for (let sym of Object.keys(dynamicDataMap)) { const data = dynamicDataMap[sym]; if (!data || data.error) continue; const card = renderDynamicIndicatorCard(sym, data); container.appendChild(card); hasValidData = true; } if (!hasValidData) { const div = document.createElement('div'); div.className = 'no-data'; div.textContent = '【实时指标】暂无数据,请先点击MEXC或Binance按钮获取K线数据。'; return div; } return container; }