diff --git a/src/PolyTrader.Modules.CopyTrading/Services/CopyTradingEngine.cs b/src/PolyTrader.Modules.CopyTrading/Services/CopyTradingEngine.cs index 785b620..448520b 100644 --- a/src/PolyTrader.Modules.CopyTrading/Services/CopyTradingEngine.cs +++ b/src/PolyTrader.Modules.CopyTrading/Services/CopyTradingEngine.cs @@ -292,6 +292,18 @@ namespace PolyTraderSharp.Services if (signal.Side == "BUY") { + // H3 (Entscheidung Richard): Läuft für diese Position bereits eine SELL-Eskalationsleiter + // (ExitPending), NICHT zukaufen. Sonst stockt der BUY die Position auf, die die Leiter + // danach inkl. der neuen Shares zum alten Floor verkauft (ökonomisch widersprüchlich). + // Wir überspringen den BUY und lassen die Leiter den Exit sauber zu Ende führen. + if (account.OpenPositions.TryGetValue(signal.TokenId, out var exitingPos) && exitingPos.ExitPending) + { + _logger.TradeReasoning($"⏸️ Trade BUY [{signal.MarketQuestion}] [{shareType}] übersprungen:\n" + + $" Konto: {account.Name}\n" + + $" Begründung: SELL-Eskalationsleiter läuft (Exit aktiv) – kein Zukauf während des Ausstiegs."); + return; + } + if (signal.Price > settings.MaxBuyPrice) { _logger.TradeReasoning($"❌ Trade BUY [{signal.MarketQuestion}] [{shareType}] verworfen (Risk Limit):\n" +