Richard
72e07d0c6b
@
...
Doku: IBKR-Integration festgelegt (TWS API / IB Gateway)
- docs/IBKR-Integration.md: Entscheidung (TWS API via IB Gateway) + Setup (Ports 4002/4001,
IBC/2FA), Regionen (US<->IE gleiche Codebasis), Lib (IB.TWS.CSharpApi), Design des
IbkrBrokerClient (async-Wrapper ueber EWrapper/EClient), To-dos bei Gateway-Zugang
- ARCHITECTURE.md: Broker-Anbindung als naechsten Meilenstein verankert (blockiert bis Paper-Zugang)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-30 10:09:13 +02:00
Richard
c5ff4e17aa
@
...
DB-Provisioning-Skripte (Drop-Alt-Tabellen + EF-Migrationen anwenden)
- scripts/drop-app-tables.sql: entfernt alte (snake_case) core_/ct_-Tabellen + EF-Historie,
damit die EF-Migrationen kollisionsfrei angewendet werden koennen
- scripts/provision-db.ps1: liest Connection aus appsettings.Local.json, setzt IBKRTRADER_MYSQL,
wendet CoreDbContext- + CongressTradingDbContext-Migrationen an (dotnet ef database update)
- scripts/README.md: Ablauf + Sicherheitshinweise (Passwort rotieren, Master-Key)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-29 09:47:06 +02:00
Richard
e6bffdb70d
@
...
R7: Dashboard-View + DashboardService (Abschluss Feinschliff)
- Core/Trading/DashboardService: aggregiert Positionen/Exposure/Trades via EF (DashboardSnapshot)
- UI/Views/DashboardView: Trading-Modus, aggregierte Kennzahlen, geladene Module (+ Aktivierungs-Status)
- core.dashboard-View registriert (Order 5) mit dashboard-Icon
- Tests: DashboardService (leer + Aggregation, InMemory) -> 58/58 gruen; smoke-ui deckt alle 5 Views ab
Kurskorrektur R1-R7 abgeschlossen: IBKRTrader folgt dem PolytraderSharp-Konzept.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 20:01:55 +02:00
Richard
9effc43206
@
...
R6: Security - Master-Key + AES-256-GCM at-rest + TLS-Warnung
- Core/Security/SecretProtection: AES-256-GCM at-rest, Master-Key aus env IBKRTRADER_MASTER_KEY
bzw. gitignorierte master.key; selbstheilendes enc:v1:-Format; Passthrough ohne Key (mit Warnung)
- Core/Security/EncryptedStringConverter (EF-ValueConverter, bereit fuer kuenftige Credentials)
- Program: ConfigureSecretProtection (Master-Key laden) + WarnIfDbTlsNotEnforced (SslMode) beim Start
- master.key gitignored
- Tests: SecretProtection (Round-Trip/Idempotenz/Passthrough/Tamper/Key-Fehler) -> 56/56 gruen
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 19:53:21 +02:00
Richard
331623d4f3
@
...
R5: CongressTrading als Strategie (Signal -> ExecutionService) + Positionen im Modul-Fenster
- CongressTradingStrategy: neuer Scrape-Trade -> TradeSignal (buy/sell-Mapping, sonst ignoriert)
-> Core-IExecutionService; CongressScrapeWorker ruft sie je neuem Trade (try/catch-isoliert)
- Modul-Fenster: offene Positionen des Moduls via IPortfolioService.GetPositionsAsync("CT")
- Tests: CongressTradingStrategy (Mapping/Ausfuehrung, gemockter ExecutionService) -> 51/51 gruen
- Handel bleibt sicher aus (TradingEnabled=false + NullBrokerClient), bis Broker+Freigabe
- Build + smoke-ui + App-Start ok
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 19:14:21 +02:00
Richard
19dac18050
@
...
R4: Worker von WorkerEngine auf IHostedService (Generic Host)
- WorkerBase implementiert IHostedService (StartAsync/StopAsync mit CancellationToken,
eigener CTS, Guard auf Info.Active); IWorker auf Metadaten + TriggerAsync reduziert
- Worker via AddHostedService registriert (Core + Modul); AppHost.Start() startet sie,
AppHost.StopAsync() stoppt sie
- WorkerEngine auf leichte Registry reduziert (WorkerInfos fuer UI + TriggerWorkerAsync)
- LauncherForm startet/stoppt keine Worker mehr (Host-getrieben)
- Hosting.Abstractions im Core; Tests angepasst -> 43/43 gruen; smoke-ui + App-Start ok
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 18:39:14 +02:00
Richard
475c0b41cb
@
...
R3 Slice 4: IBKR-Marktdaten auf EF; Dapper vollstaendig entfernt
- 3 IBKR-Entities (IBKRInstrument/IBKRMarketBar/IBKRExternalIdentifier) im CoreDbContext
(core_ibkr_instruments/_market_data/_external_identifiers); Migration AddIbkr
- IBKRMarketDataRepository von Dapper auf EF (IDbContextFactory<CoreDbContext>);
Cross-Modul-Query (ct_trade) via Database.SqlQueryRaw
- DatabaseService, IBKRMigrations, Dapper-Package entfernt; Laufzeit-Migrationen komplett weg
(Schema extern via dotnet ef database update)
- Tests: +4 IBKRMarketDataRepository (EF-InMemory) -> 43/43 gruen; Build + smoke-ui + App-Start ok
R3 abgeschlossen: Persistenz vollstaendig auf EF Core.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 18:29:00 +02:00
Richard
6c8e36dc3c
@
...
R3 Slice 3: CongressTrading-Modul + Worker-Log + core_settings auf EF Core
- Modul: CongressTradingDbContext (ct_congressMember/ct_trade) + Design-Time-Factory;
CongressRepository von Dapper auf EF; CongressTrade.DetailsFetched ergaenzt; Dapper entfernt
- Core: CoreSettingsService (core_settings via EF); WorkerBase-Log auf EF (core_worker_log);
7 Worker-Ctors DatabaseService -> IDbContextFactory<CoreDbContext>
- CoreMigrations + CongressMigrations (Dapper) entfernt; core_-Schema nun rein EF
- EF-Migration InitialCongressTrading; AddCorePersistence-Fallback fuer leeren Connection-String
(App startet ohne DB); Connection aus appsettings.Local.json (gitignored)
- Tests: +4 CongressRepository (EF-InMemory) -> 39/39 gruen; Build + smoke-ui + App-Start ok
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 11:34:42 +02:00
Richard
7e3791b82d
@
...
R3 Slice 2: Trading-Buchführung auf EF Core (+ InMemory-Tests)
- BudgetService, TradeHistoryService, PortfolioService von Dapper/DatabaseService auf
IDbContextFactory<CoreDbContext> (EF Core) umgestellt
- Positionen/Budget/Trade-Historie ueber CoreDbContext (core_position/core_budget/core_trade_history)
- Tests: EF-InMemory-Provider im Testprojekt; 5 PortfolioService-Tests (Buy/Sell/Avg/Exposure/Isolation)
- 35/35 Tests + Build + smoke-ui gruen; WorkerBase-Log/Modul/Dapper-Entfernung folgen
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 10:45:54 +02:00
Richard
261032f9f9
@
...
R3 Slice 1: EF-Core-Infrastruktur im Core + InitialCore-Migration
- Pomelo.EntityFrameworkCore.MySql 8.0.3 + EF Core Design 8.0.11 (Core), NuGet-Allowlist erweitert
- Configuration/DatabaseOptions + DatabaseServerVersion (MariaDB 11.8.6 gepinnt)
- Persistence/Entities: CorePosition, CoreTrade, CoreBudget, CoreWorkerLog, CoreSetting
- Persistence/Ef/CoreDbContext (core_-Tabellen) + Design-Time-Factory (env IBKRTRADER_MYSQL)
- DependencyInjection/AddCorePersistence (AddDbContextFactory), in Program verdrahtet
(Connection aus appsettings.Local.json)
- EF-Migration InitialCore erzeugt (5 core_-Tabellen)
- Consumer noch auf Dapper (folgt in Slice 2); Build + 30/30 Tests + smoke-ui gruen
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 10:40:09 +02:00
Richard
48c662a699
@
...
R3-Vorbereitung: --db-version-Diagnose + EF-Strategie festgelegt
- Program: --db-version gibt die DB-Serverversion aus (fuer EF-ServerVersion-Pin)
- Bestaetigt: MariaDB 11.8.6 -> Pin wie PolytraderSharp (MariaDbServerVersion 11.8.6)
- docs/ARCHITECTURE.md: R3-Strategie fixiert (EF-Migrationen extern, Verbindung aus appsettings.Local.json)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 10:32:05 +02:00
Richard
218247b5f6
@
...
Launcher: ToolStrip-Fensterleiste + Icons (aus PolytraderSharp)
- Fenster-Buttons in einem ToolStrip (Icon ueber Text, 32x32) statt Einzel-Buttons
- 24 Icon-PNGs aus PolytraderSharp uebernommen (Resources/) + Properties/Resources.resx
(ResXFileRef) + Resources.Designer.cs
- Program.AssignViewIcons: Icons je View-ID zugewiesen (Workers=system_time, Logs=error_log,
Settings=setting_tools, CongressTrading=cross_reference); Icons auch im Fenster-Menue
- Button-Checked spiegelt Offen-Status
- Build + 30/30 Tests + smoke-ui gruen; Screenshot geprueft
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 10:25:14 +02:00
Richard
8f44c0fd82
@
...
R2: Generic Host + Modul-Vertrag + Shell-UI (PolytraderSharp-Konzept)
- Core/Modularity: neuer IModule (Name, DbPrefix, RegisterServices(services,config),
RegisterUi(host,sp), StartAsync/StopAsync, GetActivationBlocker) + ModuleView
+ IModuleUiHost + WindowMenu. Alte IModule/ModuleRegistry/WindowManager/ModuleFormBase entfernt.
- Program.cs: Host.CreateDefaultBuilder + IConfiguration (appsettings.json/.Local.json);
Core-Services registriert, Module via RegisterServices, Views via RegisterUi.
- UI: ShellUiHost (Einzelinstanz-Fenster + Fenster-Menue), LauncherForm als Shell
(Buttons je View), Core-Views Logs/Settings/Workers als eigene Fenster.
- CongressTrading auf neuen Vertrag; Worker als IWorker registriert.
- --smoke-ui Headless-Test (konstruiert jede View + Launcher).
- appsettings.Local.json gitignored.
- Tests angepasst -> 30/30 gruen; Build + Smoke-UI + App-Start verifiziert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-28 00:24:00 +02:00
Richard
c20538c8d8
@
...
R1: Umbau auf Multi-Projekt-Struktur (Vorbild PolytraderSharp)
Kurskorrektur: Vorbild ist PolytraderSharp (C#), nicht die veraltete Python-Version.
Reiner Strukturumbau, Verhalten unveraendert.
- src/IBKRTrader.Core (classlib): Core-Code + UI-Contract (ModuleFormBase, WindowManager)
- src/IBKRTrader.Modules.CongressTrading (classlib, referenziert nur Core)
- Root: IBKRTrader.App (WinExe) referenziert Core + Modul
- tests/IBKRTrader.Tests: Referenzen auf Core + Modul
- Neue .slnx; ungenutztes HtmlAgilityPack entfernt
- docs/ARCHITECTURE.md: korrigierter Ziel-Stand + R-Phasenplan
- Build + 38/38 Tests gruen; App startet
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-27 20:26:25 +02:00
Richard
2ad4b55db1
@
...
Phase 3: Trading-Kern (Risk, Execution, Portfolio) mit sicherem Broker-Default
- Core/Trading/TradingModels: Signal, Order(Request/Result), RiskContext/Decision,
Account, Position, Quote, ExecutionResult, Enums (Side/OrderType/Mode)
- IBrokerClient + NullBrokerClient (sicherer Default, handelt NIE bis IBKR-Adapter verifiziert)
- RiskService (+IRiskService): Sizing nach MaxTrade%, Modul-Limit, Slippage; Buy/Sell
- PortfolioService (+IPortfolioService): core_position + core_trade_history + core_budget
- ExecutionService (+IExecutionService): Signal -> Kurs -> Konto -> Risiko -> Order -> Buchung
- TradingSettings in AppSettings (Paper/Live, TradingEnabled, Risikoparameter)
- CoreMigrations: core_position; DI-Registrierung der Trading-Services
- Tests: RiskService (11) + ExecutionService (6, NSubstitute) -> 38/38 gruen
Offen (bewusst gekapselt): echter IbkrBrokerClient gegen Client-Portal-Gateway (manuell verifizieren).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-27 11:33:59 +02:00
Richard
d0bc833235
@
...
Phase 2: Launcher-UI + eigenstaendige Modul-Fenster
- Form1 -> LauncherForm (Dateien via git mv, Designer/resx angepasst)
- Modul-Tab: Karten aus ModuleRegistry mit "Fenster oeffnen"-Button je Modul
- UI/WindowManager: Fenster-Tracking (Key->Form), Re-Open fokussiert, CloseAll
- UI/ModuleFormBase: Basisklasse fuer eigenstaendige Modul-Fenster
- CongressTradingForm: DB-Kennzahlen + manueller Scrape-Trigger (Phase-4-Ausbau folgt)
- WindowManager in DI; Launcher schliesst Modul-Fenster beim Beenden
- Tests: WindowManager (6) -> 21/21 gruen; Launcher-Start verifiziert
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-27 10:39:50 +02:00
Richard
5815d3258f
@
...
.gitattributes: Zeilenenden-Normalisierung (stoppt LF/CRLF-Warnungen)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-27 10:09:46 +02:00
Richard
af398353f0
@
...
Phase 1: Modul-System formalisiert (IModule + ModuleRegistry)
- Core/Modules/IModule.cs: Vertrag (Key, DisplayName, Description, Version,
RegisterServices, InitializeAsync, GetWorkers, CreateWindow)
- Core/Modules/ModuleRegistry.cs
- CongressTradingModule auf IModule umgestellt (instanzbasiert, Platzhalter-Fenster)
- Program.cs iteriert ueber IModule[] + Registry; Form1 initialisiert Module ueber Registry
- Testbarkeit: WorkerBase DB-Log-Seam (virtuell); CapitolTradesScraper.ParseTradesFromHtml
extrahiert (offline gegen ct_raw.html testbar)
- Tests: ModuleRegistry, CongressTradingModule, WorkerBase, CapitolTradesScraper -> 15/15 gruen
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-27 10:07:47 +02:00
Richard
9abad277c2
@
...
Phase 0: Test-Fundament & Architektur-Doku
- IBKRTrader.Tests (xUnit + NSubstitute + FluentAssertions), nur Unit-Tests
- Repo-lokale NuGet.config: Test-Pakete in Allowlist ergaenzt
- Hauptprojekt: Test-Unterordner aus SDK-Globbing ausgeschlossen
- docs/ARCHITECTURE.md: Plan + Phasen-Checkliste
- grundregeln.md: .NET 10, Launcher-Modell; DB-Passwort entfernt
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
@
2026-07-27 09:58:49 +02:00
Richard and Claude Opus 4.8
ebeb035e92
Initial commit: IBKRTrader
...
.NET WinForms-Anwendung (Core, Modules/CongressTrading, UI).
Enthaelt .gitignore und settings.example.json als Konfigurationsvorlage.
Echte settings.json mit Zugangsdaten ist bewusst ausgeschlossen.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-26 18:19:47 +02:00