From e591ed8226a56bcd523599abe9ab44e33e0e4350 Mon Sep 17 00:00:00 2001 From: tinkle-community Date: Fri, 26 Dec 2025 04:13:34 +0800 Subject: [PATCH] fix: normalize symbol comparison to prevent duplicate data in AI input Use market.Normalize() for both position and candidate symbols to handle different formats (ETH vs ETHUSDT), ensuring positions are correctly excluded from candidate list. --- decision/engine.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/decision/engine.go b/decision/engine.go index 67ee3943..12c7305f 100644 --- a/decision/engine.go +++ b/decision/engine.go @@ -986,14 +986,17 @@ func (e *StrategyEngine) BuildUserPrompt(ctx *Context) string { // Candidate coins (exclude coins already in positions to avoid duplicate data) positionSymbols := make(map[string]bool) for _, pos := range ctx.Positions { - positionSymbols[pos.Symbol] = true + // Normalize symbol to handle both "ETH" and "ETHUSDT" formats + normalizedSymbol := market.Normalize(pos.Symbol) + positionSymbols[normalizedSymbol] = true } sb.WriteString(fmt.Sprintf("## Candidate Coins (%d coins)\n\n", len(ctx.MarketDataMap))) displayedCount := 0 for _, coin := range ctx.CandidateCoins { // Skip if this coin is already a position (data already shown in positions section) - if positionSymbols[coin.Symbol] { + normalizedCoinSymbol := market.Normalize(coin.Symbol) + if positionSymbols[normalizedCoinSymbol] { continue }