Richard and Claude Opus 4.8
a3c145c0ed
Accounting A-1: Ingest-Fundament (unabhaengiger Ledger, idempotent, read-only)
...
Neues Modul PolyTrader.Modules.Accounting (IPolyTraderModule, acc_-Praefix, nur Core-Referenz,
KEIN Handel). Konzept: docs/konzepte/KONZEPT-Modul-Accounting.md, Phase A-1.
Buchungsgrundlage ausschliesslich aus unabhaengigen Polymarket-/On-Chain-Abrufen (nie unsere
Trading-DB), append-only, prueffaehig:
- Modelle: LedgerEntry (+ LedgerEventType), IngestRun (mit Balance-Anker), RawSnapshot,
RawActivity/RawTransfer (normalisierte Eingaben, entkoppeln pure Logik von der API-Feldbenennung).
- AccountingClassifier (Logic/, pur+getestet): Activity->Buchungssatz (Typ/Vorzeichen: BUY=Cash raus
inkl. Fee, SELL=Cash rein minus Fee, Redeem/Reward +, Split/Merge/Conversion geldneutral),
stabiler Idempotency-Key; Transfer-Klassifikation trennt intern (System-Contract-Whitelist) von
externen Deposits/Withdrawals. SumNet fuer den Balance-Anker-Abgleich.
- AccountingDbContext (acc_ledger append-only + Unique-Index Idempotency, acc_ingest_runs, acc_raw;
Autoincrement-PKs). Migration InitialAccounting generiert UND angewendet. Repos mit idempotentem
Upsert (true=neu/false=Duplikat).
- AccountingIngestService (BackgroundService): testbarer IngestAccountAsync - Activity + On-Chain-
Transfers klassifizieren + idempotent buchen, Rohschnappschuss ablegen, Lauf inkl. Balance-Anker-
Delta protokollieren; Backfill vs. inkrementell (Lookback-Ueberlappung gegen API-Lag).
- Quellen hinter Interfaces (IActivitySource/ITransferSource/IBalanceAnchorSource) mit Null-Stubs:
Modul laeuft offline und bucht korrekt nichts. Live-Abruf + System-Contract-Whitelist = Zielland.
- UI designerfaehig (partial + .Designer.cs): Tabs Ledger (filterbar) + Abruf/Status (Ingest-Laeufe,
Balance-Anker, manueller Backfill/Inkrement).
- Program.cs (beide Modul-Listen) + sln + App/Tests-Referenzen.
A-2 (Abrechnung/BWA/FX), A-3 (US-Steuerschicht FIFO/Form-8949), A-4 (CSV/PDF via PDFsharp/MigraDoc)
folgen. Tests: +12 (Klassifikation, intern/extern-Transfer, Ingest-Idempotenz, Balance-Anker,
Inkrement-Fenster). Build 0 Fehler, 379 Tests gruen, --smoke-ui alle 6 Views gruen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-20 08:54:12 +02:00
Richard and Claude Opus 4.8
c75a958e36
Supervisor S-1: Dossier-Generator + Modul-Skelett mit Dossier-Browser + Journal-Nachverdrahtung
...
Neues Modul PolyTrader.Modules.Supervisor (IPolyTraderModule, Name=Supervisor, DbPrefix=sup_,
nur Core-Referenz, strikt read-only):
- DossierBuilder (Core/Analytics, pur+getestet): TradeDossier aus Entscheidungen + Order-Events +
Trades + Log-Zeilen, chronologisch, mit Markdown-Rendering (Tabellen, Pipe-Escaping).
- DossierService (Modul): beschafft Journal/Events/Trade-Log per SignalId + JSONL-Zeilen per CID
(nur Tagesdateien im Ereignis-Zeitfenster +-1 Tag); RecentSignals-Uebersicht (Journal gruppiert).
- SupervisorMainForm: Dossier-Browser - links juengste Signale, rechts Markdown-Dossier;
SignalId-Suche; Analyse-Chat (OpenRouter) folgt in S-2. In Launcher/Smoke registriert.
Journal-Nachverdrahtung (S-0-Vervollstaendigung):
- TraderMonitor: Profit-Target erzeugt eigene SignalId -> Leiter + Journal (ProfitTargetTriggered);
Stale-Cleanup-Cancels als OrderEvents (StaleCleanupCancel).
- StartupOrderReconciliation: K2-Cancels als OrderEvents (StartupReconcileCancel).
- RF: Demo-Einstiege (DemoFilled, eigene SignalId) + Resolution-Closes (SystemResolutionClose)
im Journal - damit sind ALLE Module im Entscheidungsjournal vertreten.
Tests: +3 DossierBuilder; 4 Service-Builder auf neue Ctors. Build 0 Fehler, 344 Tests gruen,
--smoke-ui: [OK] supervisor.main (alle 5 Views gruen).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-17 10:09:02 +02:00
Richard and Claude Opus 4.8
b6dff7e210
UI: Dashboard-Ueberarbeitung (Scope-Filter, KPIs, ScottPlot-Charts, Tradehistorie)
...
Das Dashboard ist keine stumpfe Trade-Liste mehr, sondern ein Auswertungs-Fenster:
- ToolStrip (via Designer): Scope-Filter Konto/Modul/Live-Demo/Zeitraum + Aktualisieren.
- TabControl mit 2 Tabs:
- Dashboard: KPI-Kacheln (Netto-PnL/Winrate/Trades/O-PnL/Profit-Faktor) + 3 Charts
(Equity-Kurve, PnL je Modul, PnL je Tag) fuer den gewaehlten Scope.
- Tradehistorie: gefilterte Trade-Liste (Spalten via Designer) + Suche + Gewinner/Verlierer.
- Charts via ScottPlot CORE-Paket (nur SkiaSharp, .NET-nativ) -> als Bitmap in PictureBoxen
gerendert; KEINE OpenTK/.NET-Framework-Transitiven (bewusst nicht ScottPlot.WinForms).
- Auswertungslogik pur in TradeAnalytics (getestet). In-Memory-Filter auf gecachtem Recent-Set.
- Smoke-UI konstruiert die DashboardView jetzt direkt -> verifiziert das Chart-Rendering headless.
Build 0 Fehler, 331 Tests gruen, --smoke-ui: [OK] core.dashboard konstruiert (inkl. Charts).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-15 19:54:49 +02:00
Richard and Claude Opus 4.8
c9eb11afe4
RF-Slice 1: ResolutionFarming-Modul-Skelett + geldkritische pure Logik + Tests
...
Neues Strategiemodul PolyTrader.Modules.ResolutionFarming (IPolyTraderModule,
Name=ResolutionFarming, DbPrefix=rf_), in Solution/App/Tests + beide Modul-Listen
in Program.cs eingebunden. Skelett laedt (RegisterServices/UI noch no-op).
Geldkritische Entscheidungslogik pur und vollstaendig unit-getestet:
- FarmingRiskEngine: Netto-Edge nach Fees (NetEdge/NetEdgePct/HasEdge), Positionsgroesse
unter Markt-/Cluster-/Gesamt-Exposure-Limits (AllowedPositionUsd), Kill-Switch, Tages-Drossel.
- FarmingScanner: Preisband, Kategorie-Whitelist, Blacklist, Cluster-Key (korrelierte
Favoriten teilen einen Cluster), Kandidaten-Score.
- FarmingFillModel: Shares fuer Budget (2-Dezimal-Floor), Resolve-PnL (Auszahlung - Kosten -
Entry-Fee, Maker/Taker), Einstiegskosten inkl. Fee. Nutzt Core.FeeModel.
- RfSettings (rf_settings) mit konservativen Defaults + PropertyGrid-Attributen.
39 neue Tests. Build 0 Fehler, 283 Tests gruen, --smoke-ui ok.
Persistenz (DbContext/Migration/Repos), Scanner-/Monitor-Jobs, Execution und UI folgen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-09 21:43:34 +02:00
Richard and Claude 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
Richard and Claude Opus 4.8
f1451b547c
Fix: Startet nicht / MySQL-Timeout ohne UI (Config- & Startup-Härtung)
...
Ursachen (App startete aus bin/ bzw. per Doppelklick ohne UI):
1. appsettings.Local.json (MySQL-Connection) wurde NICHT ins Output kopiert und
nur relativ zum Arbeitsverzeichnis geladen -> leere Connection -> Pomelo fiel
auf localhost:3306 zurueck -> "Connect Timeout expired".
2. ServerVersion.AutoDetect(conn) oeffnet beim Options-Bau eine blockierende
DB-Verbindung -> haengt/crasht den Start, wenn die DB nicht erreichbar ist.
3. CopyTradingEngine.StartAsync lud den MarketCache ungeschuetzt -> DB-Fehler
riss AppHost.Start() ab, bevor die UI erschien.
Fixes:
- csproj: appsettings.Local.json mit ins Output kopieren (CopyToOutputDirectory).
- Program: UseContentRoot(AppContext.BaseDirectory) -> Config wird immer neben
der EXE gesucht (Main + Smoke-Test).
- ServerVersion fest gepinnt: DatabaseServerVersion.Value = MariaDB 11.8.6 (wie
am Server erkannt); AddCorePersistence + CopyTradingModule nutzen sie statt
AutoDetect. Kein blockierender Connect mehr beim Start.
- CopyTradingEngine-Preload in try/catch: DB-Fehler bricht den Start nicht mehr ab.
- Neuer Diagnose-CLI --db-version (gibt @@version aus).
Verifiziert: --smoke-ui aus fremdem Arbeitsverzeichnis laeuft gruen
(3 Accounts / 32 Trader hydriert, alle Views + Launcher OK).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-06 10:03:44 +02:00
Richard and Claude Opus 4.8
b951b912f4
Phase 6 (Stufe 6): MongoDB vollstaendig entfernt
...
- Legacy-Form stillgelegt: frm_main(.Designer/.resx) + frm_analytics(.Designer/.resx)
geloescht, 'Open Legacy'-Menue aus LauncherForm entfernt.
- Program.cs: IMongoDatabase-Registrierung + closed_trades-Cleanup weg;
Trade-Nummerierung liest jetzt hoechste TradeId aus ICopyTradeLogRepository.
- StartupHydrationService: Mongo-/Bson-Fallback entfernt (Settings kommen aus
dem Repo; fehlende Accounts erhalten Default-Settings).
- Alle Mongo*Repository (Core 4 + Modul 4) geloescht; DI-Zweige auf EF/MySQL
reduziert (AddCorePersistence, CopyTradingModule).
- ConfigMigrator: Mongo-Pfad (Run/MigrateSettings) entfernt; nur noch
RunFromJson + VerifyMySql (kein Mongo-Treiber mehr).
- Modelle: [BsonId] entfernt (EF-Keys via HasKey); ObjectId-Defaults -> Guid.
- LiteDB-Shim (MongoDbLiteDBShim) geloescht; MongoDB.Driver- + LiteDB-Pakete
aus App/Core entfernt; stale usings + user-sichtbare Strings bereinigt.
- DatabaseOptions/appsettings.json: Mongo-Provider/Connection-Felder entfernt.
- Build gruen; --verify-mysql bestaetigt 3 Accounts/3 Settings/32 Trader/2344 Markets.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-05 18:34:17 +02:00
Richard and Claude Opus 4.8
97bff61fc5
Phase 6 (Stufe 1): EF Core + MySQL Fundament (Core-Seite)
...
- Pomelo.EntityFrameworkCore.MySql 8.0.3 + EF Core Design im Core; DI.Abstractions
auf 8.0.2 angehoben (Downgrade-Konflikt aufgeloest).
- DatabaseOptions: Provider (MySql|Mongo) + MySqlConnectionString (Connection liegt
in gitignorierter appsettings.Local.json, NICHT im Repo).
- Position: AccountId + IsDemo ergaenzt (MySQL: eine positions-Tabelle statt
Collection-per-Account).
- CoreDbContext (accounts/positions/markets/trade_log) mit Keys, Decimal-Praezision,
NotMapped fuer Runtime-Felder, Text-Spalten fuer JSON. Design-Time-Factory (Env-Var).
- EF-Migration InitialCore erstellt UND auf die MySQL-DB angewandt (Tabellen live).
Naechste Stufen: Core-EF-Repos + DI-Umschaltung, Modul-Context (CopyTradingDbContext)
+ Repos, Config-Migration Mongo->MySQL, dann Mongo entfernen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-05 13:32:06 +02:00
Richard and Claude Opus 4.8
0ffc0413c8
Phase 4.7: MullvadVpnService + ThreemaService in den Core
...
- Beide Services nach Core (nutzen nur TerminalLogger/ServerSettings/JobManager,
keine DB/TradingState/Modul-Typen).
- Threema-ProjectReference von App -> Core umgehängt (App nutzte die Lib nur
über ThreemaService).
- Microsoft.Extensions.Hosting.Abstractions als Core-Paket (BackgroundService).
- Toten Stub services/mullvad.cs gelöscht; Mullvad-DB-Usings entfernt.
- Build 0 Fehler.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-01 19:51:52 +02:00
bergm and Claude Opus 4.8
e312fbbaa7
Phase 2: Konfiguration externalisieren (appsettings.json + IOptions)
...
- Neue Core-Klasse DatabaseOptions (Sektion "Database"), gebunden via IOptions.
- appsettings.json im App-Projekt (Mongo-Connection + DB-Name), wird in den
Output kopiert.
- Program.cs: hart codierte "mongodb://localhost:27017" und "PolyTraderDB"
durch konfigurierte Werte ersetzt.
- Startup-Cleanup-Hack aus dem Kopf von Main() entfernt und gekapselt nach
dem Host-Build über die konfigurierte DB neu verankert.
- Solution-Build 0 Fehler; appsettings.json im Output verifiziert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-01 16:22:37 +02:00
bergm and Claude Opus 4.8
4f130ff6dd
Phase 1: Multi-Projekt-Gerüst (Core / Modules.CopyTrading / App)
...
- WinForms-Projekt umbenannt zu PolyTrader.App (AssemblyName=PolyTrader.App,
RootNamespace bleibt PolyTraderSharp → .resx/Namespaces intakt).
- Neue leere Class-Libraries: src/PolyTrader.Core, src/PolyTrader.Modules.CopyTrading
(net8.0-windows; CopyTrading mit UseWindowsForms für spätere UI-Tabs).
- Referenzen: App → Core + CopyTrading; CopyTrading → Core; Core → nichts.
- App-csproj: src/** vom Globbing ausgeschlossen (keine Glob-Kollision).
- Noch KEIN Code verschoben — App unverändert lauffähig.
- Solution-Build: alle 4 Projekte, 0 Fehler.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-01 15:14:26 +02:00