Commit Graph
7 Commits
Author SHA1 Message Date
RichardandClaude Opus 4.8 581755029a Testnetz: Micro-Order-Minimum + SELL-Proportionalität extrahiert; SELL-Leiter (Phase 0.1) vorbereitet
Weiter im Muster extrahieren->testen (verhaltensneutral, clob.md):
- CopyTradingRisk.IsBelowPolymarketMinimum (Shares < 5.5 || USDC < 0.10) –
  BUY-Micro-Order-Filter verdrahtet + Tests.
- SellLogic.SellProportion (signalSize/(remaining+signalSize), Denominator<=0 -> 0)
  + Konstante MinSignificantSellRatio (0.30); SELL-Proportionalitätscheck der
  Engine ruft sie jetzt (Charakterisierung, sichert Phase-2-Umbau ab).
- SellLogic-Eskalationsleiter (Phase 0.1, NOCH NICHT verdrahtet): FirstLimit
  (HF-fest/prozentual), Floor (SellFloorPct), NextPrice (relative Stufe, auf Floor
  geclamped), IsAtFloor. Reine Grundlage fuer das spaetere SELL-Wiring.
- Tests: CopyTradingRisk-Minimum (5 Faelle) + SellLogicTests (Proportion +
  Leiter). Gesamt 154 gruen.

Build/Smoke gruen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 11:03:44 +02:00
RichardandClaude Opus 4.8 6a8ecbc80a MaxBuyPrice-Skala korrigiert + Blockchain-Abo-Logik extrahiert & getestet
- Fix (Richard): MaxBuyPrice-Skalen-Korrektur analog PreRedeemLimit
  (Migration FixMaxBuyPriceScale: Werte > 1 wie 98.0/99.0 -> /100 = 0.98/0.99;
  auf MySQL angewendet). Cap greift bei den betroffenen Accounts jetzt wieder.
  Beschreibung des Feldes um den Skalen-Hinweis ergaenzt.

- Testnetz erweitert: reine Klasse BlockchainSubscription (Logic/) fuer das
  Alchemy-Abo (PadAddress + Filter-Batching in 3er-Chunks, Buy=Topic3/Sell=Topic2
  je Chunk). AlchemyWebsocketService ruft sie jetzt (verhaltensneutral;
  Konstanten + lokale Methoden entfernt). BlockchainSubscriptionTests: 13 Faelle
  (Padding, Chunk-Anzahl 0/1/3/4/6/7, Topic-Zuordnung, CTF-Adresse/Topics).

Gesamt 137 Tests gruen. Build/Smoke gruen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 10:54:46 +02:00
RichardandClaude Opus 4.8 360f264ed8 CLOB-Sicherheitsnetz: BUY-Risikologik extrahiert + breit getestet; PreRedeemLimit-Skala korrigiert
Ziel (Richard): vor den CLOB-Eingriffen ein umfangreiches Testnetz, damit künftige
Änderungen keine neuen Fehler einschleusen. Reiner, verhaltensneutraler Umbau –
alte Version liegt als Rollback in Git (Commit 38f609e), siehe .agents/rules/clob.md.

- Neue pure Klasse CopyTradingRisk (Logic/): CalculateBuyOrderPrice (HF-fest /
  prozentual, gedeckelt durch MaxBuyPrice + harte 0.99), ResolveTimeBucket/
  TimeLimitPct/TimeBucketLabel/IsPositionInBucket (Zeitfenster-Exposure),
  MaxPerMarket (Markt-Budget inkl. Low-Balance-Bypass-Stufen).
- CopyTradingEngine BUY-Pfad ruft diese Funktionen jetzt statt Inline-Mathematik
  (1:1-Semantik, dedupliziert die doppelte Order-Preis-Berechnung).
- CopyTradingRiskTests: 38 Fälle über alle Zweige/Grenzwerte (HF vs. normal,
  MaxBuy-/0.99-Deckel, Bucket-Grenzen 6/24/72h, null/expired Expiry,
  Balance-Stufen 150/500). Gesamt 124 Tests grün.

Fix: PreRedeemLimit-Skalen-Korrektur (Migration FixPreRedeemLimitScale): Alt-Werte
> 1 (z. B. 99.5) werden /100 (0.995); 0 bleibt deaktiviert. Auf MySQL angewendet.

Build/Smoke grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 10:03:53 +02:00
RichardandClaude Opus 4.8 38f609ed31 CopyTrading Slice 1: Settings-Fundament + detaillierte Erklärungen
Umsetzung des Fable-Plans, Start mit dem risikoarmen Settings-Fundament
(kein Hot-Path/CLOB-Verhalten geändert):

- Alle Copytrading-Settings (alt + neu) haben jetzt [Description]/[DisplayName] ->
  im PropertyGrid als Erklärung sichtbar (Richards Vorgabe). Test erzwingt, dass
  jede einstellbare Option eine Beschreibung trägt.
- ProfitTarget-Default -> 9999 (praktisch deaktiviert); Migration setzt zusätzlich
  bestehende Zeilen per SQL auf 9999 (Entscheidung 2). Take-Profit-LOGIK folgt.
- Neue Account-Settings (noch nicht verdrahtet, für Phase 0.1/1.3/2):
  SellFloorPct (15), MaxSpreadPct (5), MinSellRatioPct (10).
- Neue Master-Trader-Settings: AutoPauseEnabled (Default AN, per Master abschaltbar,
  Entscheidung 3) + MakerEntry (Default aus, Entscheidung 4).
- EF-Migration AddCopytradingBehaviorSettings (neue Spalten + sinnvolle Defaults
  fuer Bestandszeilen) erstellt und auf MySQL angewendet.
- Erklärung dokumentiert einen gefundenen Skalen-Verdacht: PreRedeemLimit wird
  gegen den 0-1-Preis verglichen; Alt-Werte 99.5 triggern nie (-> ggf. 0.995).

Tests: 86 gruen. Build/Smoke gruen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 09:44:50 +02:00
RichardandClaude Opus 4.8 92a88e8be8 Phase 7: Mapping-Randfälle + Parser-/Repo-Randfälle (78 Tests)
- DbContextModelTests: feinkörnige Modell-Invarianten - Dezimal-Präzision (18,6)
  auf Geldfeldern (Core + Settings), MaxLength auf Strings, manuell gesetzte Keys
  (ValueGeneratedNever), AssignedAccountIds hat Value-Converter + text-Spalte,
  MarketData JSON-Spalten = text, Indizes (TradeRecord.ClosedAt,
  MasterTraderHistory TraderId/ClosedAt).
  (GetColumnType() wirft unter InMemory -> Spaltentyp via Relational:ColumnType-
  Annotation ausgelesen.)
- MongoExportParserTests erweitert: numerische statt String-Dezimale, unbekannte
  Felder ignoriert, mehrere Dokumente in Reihenfolge, AssignedAccountIds als
  String-Zahlen, IsActive-Default.
- RepositoryEdgeCaseTests: GetAll leer != null, Update-Alias, Factory-Isolation,
  History-Exists/GetByTraderSince inklusive an den Grenzen.

Alle 78 gruen. (Copytrading-Service-Logik bewusst noch nicht getestet - wird
parallel ueberarbeitet.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 09:16:03 +02:00
RichardandClaude Opus 4.8 1b51872f00 Phase 7: Tests erweitert + Mongo-Parser extrahiert (testbar)
Tests (jetzt 48 grün):
- DbContextMappingTests: sichert core_/mod_-Tabellennamen, Position-Composite-Key,
  TrackedTrader-Key, ClosedTradeRow nicht gemappt, AccountState.OpenPositions ignoriert.
- PositionRepositoryTests: Live/Demo-Trennung, Upsert setzt Account+Demo-Flag,
  Update ohne Duplikat, DeleteLive, DropDemo.
- MarketRepositoryTests: GetActive filtert Closed, Upsert-Update, FindByTokenId.
- TradeLogRepositoryTests: GetRecent (Sortierung+Limit), Find-Predikat, Guid-Id unique.
- MongoExportParserTests: String-Dezimale, null->"", fehlende Felder->Default,
  AssignedAccountIds-Array, Category-Default, Nicht-Array->leer.

Refactor:
- Mongo-Export-Parsing aus ConfigMigrator in testbare Klasse
  PolyTrader.Modules.CopyTrading.ConfigImport.MongoExportParser ausgelagert
  (ParseAccounts -> Account+Settings, ParseTraders). ConfigMigrator nutzt sie;
  --migrate-json end-to-end verifiziert (3/3/32).
- PolyTrader.App.csproj: tests/** vom Default-Glob ausgeschlossen (App zog sonst
  die Testdateien mit rein -> doppelte AssemblyInfo/Xunit-Fehler).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 11:52:52 +02:00
RichardandClaude Opus 4.8 ca16cd8a91 Phase 7: Testprojekt (xUnit) + Repository-Tests
- Neues Projekt tests/PolyTrader.Tests (xUnit, EF Core InMemory-Provider),
  zur Solution hinzugefügt.
- InMemoryContextFactory<TContext>: Test-IDbContextFactory (isolierte In-Memory-DB
  je Test, geteilt über alle Kontexte einer Factory – wie im echten Betrieb).
- 18 Tests über die EF-Repos:
  - TrackedTrader: Upsert insert/update ohne Duplikat, Delete,
    AssignedAccountIds-JSON-Round-Trip (Value-Converter) + Set-Ersetzung.
  - CopyTradingAccountSettings: Upsert/Get (Dezimalwerte), Get-null, Delete.
  - CopyTradeLog: Insert/Find, Exists-Dedup (Account+Token), Predikat-Filter.
  - MasterTraderHistory: Exists-Zeitfenster, GetByTraderSince-Cutoff.
  - Core Accounts: Upsert insert/update, Delete.
- Alle 18 grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-06 11:24:33 +02:00