From 43cd98f2d588118da0439a7e7023ae4cdbce09c1 Mon Sep 17 00:00:00 2001 From: dekun Date: Mon, 6 Jul 2026 03:32:26 +0800 Subject: [PATCH] feat: add EMA144 as separate market chart indicator Optional EMA144 line on hub K-line main chart, independent from EMA 21/55 cross. Co-authored-by: Cursor --- manual_trading_hub/static/chart.js | 21 ++++++++++++++++++--- manual_trading_hub/static/index.html | 3 ++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/manual_trading_hub/static/chart.js b/manual_trading_hub/static/chart.js index b71f31f..263249f 100644 --- a/manual_trading_hub/static/chart.js +++ b/manual_trading_hub/static/chart.js @@ -191,6 +191,7 @@ const elFsBtn = document.getElementById("market-chart-fullscreen"); const elFsExit = document.getElementById("market-chart-fs-exit"); const elIndEma = document.getElementById("market-ind-ema"); + const elIndEma144 = document.getElementById("market-ind-ema144"); const elIndMacd = document.getElementById("market-ind-macd"); const elIndRsi = document.getElementById("market-ind-rsi"); const elPrevCloseLine = document.getElementById("market-prev-close-line"); @@ -210,12 +211,14 @@ const HUB_MARKET_POS_CTX_KEY = "hubMarketPosContext"; const EMA_FAST = 21; const EMA_SLOW = 55; + const EMA_TREND = 144; let chartFullscreen = false; - const indicatorState = { ema: false, macd: false, rsi: false }; + const indicatorState = { ema: false, ema144: false, macd: false, rsi: false }; const indSeries = { ema21: null, ema55: null, + ema144: null, macdLine: null, macdSignal: null, macdHist: null, @@ -505,6 +508,7 @@ function readIndicatorState() { indicatorState.ema = !!(elIndEma && elIndEma.checked); + indicatorState.ema144 = !!(elIndEma144 && elIndEma144.checked); indicatorState.macd = !!(elIndMacd && elIndMacd.checked); indicatorState.rsi = !!(elIndRsi && elIndRsi.checked); } @@ -896,6 +900,17 @@ if (indSeries.ema55) indSeries.ema55.setData(buildEmaSeries(lastCandles, EMA_SLOW)); } + if (indicatorState.ema144) { + const pf144 = tickToPriceFormat(priceTick); + indSeries.ema144 = createLineSeries({ + color: "#5ce0b8", + title: "EMA144", + priceScaleId: "right", + priceFormat: pf144, + }); + if (indSeries.ema144) indSeries.ema144.setData(buildEmaSeries(lastCandles, EMA_TREND)); + } + let rsiDiv = []; let macdDiv = []; @@ -2515,7 +2530,7 @@ lastCandles = merged; indexCandles(lastCandles); readIndicatorState(); - if (indicatorState.ema || indicatorState.macd || indicatorState.rsi) { + if (indicatorState.ema || indicatorState.ema144 || indicatorState.macd || indicatorState.rsi) { try { updateIndicators(); } catch (indErr) {} @@ -3272,7 +3287,7 @@ setChartFullscreen(false); }); } - [elIndEma, elIndMacd, elIndRsi].forEach(function (el) { + [elIndEma, elIndEma144, elIndMacd, elIndRsi].forEach(function (el) { if (!el) return; el.addEventListener("change", function () { updateIndicators(); diff --git a/manual_trading_hub/static/index.html b/manual_trading_hub/static/index.html index 395e6ae..d80ffa8 100644 --- a/manual_trading_hub/static/index.html +++ b/manual_trading_hub/static/index.html @@ -316,6 +316,7 @@ 技术指标
+
@@ -1147,7 +1148,7 @@
- +