Slice 4 (Fable-Fixes): H4/M1/M2/M3-min/M4/M6 + Doku
H4 – Rundungs-Dust-Reject-Schleife: - SellLogic.RoundToTick (0.001, AwayFromZero, wie CalculateExactOrderAmounts). Die Leiter platziert Preise gerundet -> usdc = size × Preis geht exakt auf (kein Dust). - ProcessLadderAsync bricht ab, wenn pos.Size < MinShares (Dust-Rest gehalten, ExitPending=false), statt endlos Sub-Minimum-Orders zu schicken. M1 – GlobalPnl-Doppelzaehlung: in beiden Live-Close-Bloecken jetzt NUR innerhalb des _processedClosures-Dedup-Guards gebucht (API-Lag zaehlte sonst doppelt). M2 – TokenId in beiden Live-Close-Records gesetzt (sonst greift die Dedup nach Neustart nicht). M3 (Minimum) – TradeId-Init: serverseitiges GetMaxTradeId() statt Full-Table-Find(_=>true).Max(); Fehlschlag wird laut geloggt statt still geschluckt. (Autoincrement-Migration bewusst als Follow-up aufgeschoben – Schema-Aenderung an der Trade-Persistenz erst im Zielland live verifizieren.) M4 – MongoExportParser ProfitTarget-Default 50 -> 9999 (Take-Profit bleibt dormant). M6 – Fee-Satz (real oder Kategorie-Fallback, FeeModel.ResolveBps) in alle signierten Orders: Engine-BUY, SELL-Leiter (Start/Step/Floor), PreRedeem (WSS + REST). API-gated, im Zielland verifizieren. Doku – stale [Description]: ProfitTarget/SellFloorPct als IMPLEMENTIERT markiert. Tests: +10 (RoundToTick, Dust-Abbruch, ResolveBps). Build 0 Fehler, 233 gruen, --smoke-ui ok. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
8252219163
commit
bdcd3641e4
+11
-5
@@ -131,14 +131,20 @@ internal static class Program
|
||||
|
||||
try
|
||||
{
|
||||
// Trade-Nummerierung fortsetzen: höchste bestehende TradeId aus dem Log lesen.
|
||||
// Trade-Nummerierung fortsetzen: höchste bestehende TradeId serverseitig lesen
|
||||
// (M3: kein Full-Table-Load mehr über Find(_=>true).Max()).
|
||||
var copyState = AppHost.Services.GetRequiredService<CopyTradingState>();
|
||||
var tradeLog = AppHost.Services.GetRequiredService<ICopyTradeLogRepository>();
|
||||
var allTrades = tradeLog.Find(_ => true);
|
||||
if (allTrades.Count > 0)
|
||||
copyState.TotalCopyTrades = allTrades.Max(t => t.TradeId);
|
||||
copyState.TotalCopyTrades = tradeLog.GetMaxTradeId();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// M3: NICHT still schlucken. Bliebe der Zähler bei 0, kollidierten neue TradeIds mit
|
||||
// historischen (PK ist ValueGeneratedNever) → stiller Verlust aller Session-Trades.
|
||||
var log = AppHost.Services.GetRequiredService<TerminalLogger>();
|
||||
log.Error($"❌ KRITISCH: TradeId-Fortsetzung konnte nicht initialisiert werden: {ex.Message}. " +
|
||||
"Trade-Nummerierung ist NICHT sicher – neue Trades könnten mit bestehenden kollidieren. Bitte DB prüfen.");
|
||||
}
|
||||
catch { }
|
||||
|
||||
AppHost.Start();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user