From f789f3d4c1d109abbff6164752302726badc8046 Mon Sep 17 00:00:00 2001 From: DiTus Date: Sun, 1 Mar 2026 19:40:20 +0100 Subject: [PATCH] Fix: Restore calculateSummarySignal function --- .../static/js/ui/signals-calculator.js | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/src/api/dashboard/static/js/ui/signals-calculator.js b/src/api/dashboard/static/js/ui/signals-calculator.js index c54d093..fa75a33 100644 --- a/src/api/dashboard/static/js/ui/signals-calculator.js +++ b/src/api/dashboard/static/js/ui/signals-calculator.js @@ -24,6 +24,69 @@ function calculateIndicatorSignal(indicator, candles, indicatorValues) { return signalFunction(indicator, lastCandle, prevCandle, indicatorValues); } +/** + * Calculate aggregate summary signal from all indicators + */ +export function calculateSummarySignal(signals) { + console.log('[calculateSummarySignal] Input signals:', signals?.length); + + if (!signals || signals.length === 0) { + return { + signal: 'hold', + strength: 0, + reasoning: 'No active indicators', + buyCount: 0, + sellCount: 0, + holdCount: 0 + }; + } + + const buySignals = signals.filter(s => s.signal === 'buy'); + const sellSignals = signals.filter(s => s.signal === 'sell'); + const holdSignals = signals.filter(s => s.signal === 'hold'); + + const buyCount = buySignals.length; + const sellCount = sellSignals.length; + const holdCount = holdSignals.length; + const total = signals.length; + + console.log('[calculateSummarySignal] BUY:', buyCount, 'SELL:', sellCount, 'HOLD:', holdCount); + + const buyWeight = buySignals.reduce((sum, s) => sum + (s.strength || 0), 0); + const sellWeight = sellSignals.reduce((sum, s) => sum + (s.strength || 0), 0); + + let summarySignal, strength, reasoning; + + if (buyCount > sellCount && buyCount > holdCount) { + summarySignal = 'buy'; + const avgBuyStrength = buyWeight / buyCount; + strength = Math.round(avgBuyStrength * (buyCount / total)); + reasoning = `${buyCount} buy signals, ${sellCount} sell, ${holdCount} hold`; + } else if (sellCount > buyCount && sellCount > holdCount) { + summarySignal = 'sell'; + const avgSellStrength = sellWeight / sellCount; + strength = Math.round(avgSellStrength * (sellCount / total)); + reasoning = `${sellCount} sell signals, ${buyCount} buy, ${holdCount} hold`; + } else { + summarySignal = 'hold'; + strength = 30; + reasoning = `Mixed signals: ${buyCount} buy, ${sellCount} sell, ${holdCount} hold`; + } + + const result = { + signal: summarySignal, + strength: Math.min(Math.max(strength, 0), 100), + reasoning, + buyCount, + sellCount, + holdCount, + color: summarySignal === 'buy' ? '#26a69a' : summarySignal === 'sell' ? '#ef5350' : '#787b86' + }; + + console.log('[calculateSummarySignal] Result:', result); + return result; +} + /** * Calculate signals for all active indicators * @returns {Array} Array of indicator signals