From 4aebe70611d97acaa7e8dc86e41b5e0fe0b3f608 Mon Sep 17 00:00:00 2001 From: dekun Date: Fri, 26 Jun 2026 19:41:17 +0800 Subject: [PATCH] Fix hub market chart live K-line updates in manual follow mode. Co-authored-by: Cursor --- manual_trading_hub/static/chart.js | 35 +++++++++++++++++++++------- manual_trading_hub/static/index.html | 2 +- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/manual_trading_hub/static/chart.js b/manual_trading_hub/static/chart.js index 1230d0a..1cc2bad 100644 --- a/manual_trading_hub/static/chart.js +++ b/manual_trading_hub/static/chart.js @@ -2486,6 +2486,7 @@ const aligned = alignCandlesToTick(incoming); const prevLen = lastCandles.length; const oldestTime = prevLen ? lastCandles[0].time : null; + const prevLastTime = prevLen ? lastCandles[prevLen - 1].time : null; const merged = mergeCandles(lastCandles, aligned, { prepend: false }); if ( prevLen > 0 && @@ -2495,16 +2496,21 @@ ) { return false; } - aligned.forEach(function (bar) { - candleSeries.update(bar); - volumeSeries.update(buildVolumeBar(bar)); - }); - if (merged.length > prevLen) { - for (let i = prevLen; i < merged.length; i++) { + let patchStart = 0; + if (prevLastTime != null) { + patchStart = merged.findIndex(function (b) { + return b.time >= prevLastTime; + }); + if (patchStart < 0) return false; + } + try { + for (let i = patchStart; i < merged.length; i++) { const bar = merged[i]; candleSeries.update(bar); volumeSeries.update(buildVolumeBar(bar)); } + } catch (_) { + return false; } lastCandles = merged; indexCandles(lastCandles); @@ -2639,7 +2645,15 @@ } } const aligned = alignCandlesToTick(incoming); - if (!autoFollow && applyTailCandlePatch(aligned)) { + let tailPatched = false; + if (!autoFollow) { + try { + tailPatched = applyTailCandlePatch(aligned); + } catch (_) { + tailPatched = false; + } + } + if (!autoFollow && tailPatched) { /* 手动模式:增量 update,不触碰时间轴 */ } else { const merged = mergeCandles(lastCandles, aligned, { prepend: false }); @@ -2862,7 +2876,12 @@ } if (posContext) updateLivePosPnl(); const ver = Number(st.chart_version) || 0; - if (ver && ver !== localChartVersion) localChartVersion = ver; + if (ver && ver !== localChartVersion) { + localChartVersion = ver; + if (lastCandles.length && vKey === lastViewKey && !chartDataLoading) { + void refreshChartTail(); + } + } } function connectChartStream() { diff --git a/manual_trading_hub/static/index.html b/manual_trading_hub/static/index.html index 0b9c653..ee67d42 100644 --- a/manual_trading_hub/static/index.html +++ b/manual_trading_hub/static/index.html @@ -1046,7 +1046,7 @@
- +