Fix: Restore calculateSummarySignal function
This commit is contained in:
@ -24,6 +24,69 @@ function calculateIndicatorSignal(indicator, candles, indicatorValues) {
|
|||||||
return signalFunction(indicator, lastCandle, prevCandle, 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
|
* Calculate signals for all active indicators
|
||||||
* @returns {Array} Array of indicator signals
|
* @returns {Array} Array of indicator signals
|
||||||
|
|||||||
Reference in New Issue
Block a user