diff --git a/IBKRTrader.csproj b/IBKRTrader.App.csproj similarity index 50% rename from IBKRTrader.csproj rename to IBKRTrader.App.csproj index 1f8b27e..4af190a 100644 --- a/IBKRTrader.csproj +++ b/IBKRTrader.App.csproj @@ -6,26 +6,35 @@ enable true enable - en PerMonitorV2 - - $(DefaultItemExcludes);IBKRTrader.Tests\** + IBKRTrader.App + IBKRTrader + - - + + + + + + + + + - + + + + + - PreserveNewest - \ No newline at end of file + diff --git a/IBKRTrader.slnx b/IBKRTrader.slnx index 9a34f62..47f7475 100644 --- a/IBKRTrader.slnx +++ b/IBKRTrader.slnx @@ -1,4 +1,6 @@ - - + + + + diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 392fb1f..5c272e7 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -1,138 +1,114 @@ # IBKRTrader – Architektur & Implementierungsplan -Umbau von IBKRTrader auf das **Polytrader-Grundprinzip**: -**harter Core + beliebig viele unabhängige Module + ein Launcher, der die Fenster der -einzelnen Module öffnet.** Statt Polymarket wird über Interactive Brokers gehandelt. +> **KORRIGIERT (2026-07-27):** Vorbild ist **PolytraderSharp** (`J:\Softwareprojekte\PolytraderSharp`), +> die C#-Neuentwicklung – **nicht** die veraltete Python-Version. Die frühere Fassung dieses Plans +> basierte auf der Python-Vorlage und war konzeptionell falsch. Ziel ist eine **1:1-Neu-Fundamentierung** +> nach PolytraderSharp, im bestehenden IBKRTrader-Repo. -> Polytrader dient als *konzeptionelle* Vorlage (Python/FastAPI + tkinter-Launcher + Web-UI), -> nicht als Code-Vorlage. IBKRTrader ist ein C#/.NET-10-WinForms-Framework. +Ziel: modulares C#-Trading-Framework für Interactive-Brokers-Aktien, strukturell wie PolytraderSharp, +nur dass statt Polymarket über IBKR gehandelt wird. --- -## 1. Zielarchitektur +## 1. Ziel-Architektur (nach PolytraderSharp) ``` -Program.cs (DI-Bootstrap) +IBKRTrader.App (WinExe, Root) – Generic Host + Shell (Launcher) + Core-Views +│ Program.cs: Host.CreateDefaultBuilder, IConfiguration, Module laden, ShellUiHost, Application.Run +│ Ui/: LauncherForm, ShellUiHost, Views/ (Dashboard, Terminal, Settings, Jobs) │ -├── CORE (harter Kern – kennt KEIN Modul) -│ ├── Settings AppSettings + settings.json -│ ├── Logging rtb + Logs/[Modul]/[Level] -│ ├── Database MySQL/Dapper + Migrationen (core_) -│ ├── IBKR Marktdaten [vorhanden] + Orders [neu] -│ ├── Portfolio Positionen/Balance/P&L (core_) [neu] -│ ├── Execution + Risk Signal → Prüfung → Order → Buchung [neu] -│ ├── Workers WorkerEngine + Core-Worker -│ └── Modules IModule-Vertrag + ModuleRegistry [neu] +├── src/IBKRTrader.Core (classlib, net10.0-windows, UseWindowsForms) +│ ├── Modularity/ IModule (Name, DbPrefix, RegisterServices, RegisterUi, Start/Stop, ActivationBlocker) +│ │ ModuleView, IModuleUiHost, WindowMenu ← UI-Contract liegt im Core +│ ├── Configuration/ DatabaseOptions, ServerVersion-Pinning +│ ├── DependencyInjection/ AddCorePersistence(...) +│ ├── Persistence/Ef/ CoreDbContext + Entities + EF-Repositories (hinter Interfaces) +│ ├── Trading/ Broker-Seam, Risk, Execution, Portfolio, Domänentypen +│ ├── Services/ TerminalLogger, JobManager, Hosted Services (Market-Sync etc.) +│ ├── Security/ SecretProtection (Master-Key, AES-256-GCM at-rest) +│ └── Hosting/ StartupHydrationService (IHostedService, hydriert State zuerst) │ -├── MODULES (unabhängige Strategien – Abhängigkeit nur Modul → Core) -│ └── CongressTrading Scraper + Repo + Worker [vorhanden] -│ + Strategie + Fenster [neu] +├── src/IBKRTrader.Modules.CongressTrading (classlib, referenziert NUR Core) +│ ├── CongressTradingModule : IModule +│ ├── Persistence/Ef/ eigener DbContext (ct_) + Repos +│ ├── Services/ Scraper + Jobs (IHostedService) +│ └── Ui/ CongressTradingMainForm (Tabs) via RegisterUi │ -└── UI - ├── LauncherForm Basis: Core-Status, Worker-Grid, Logs, Settings, - │ Modul-Liste mit „Fenster öffnen"-Buttons - └── ModuleFormBase Basisklasse für eigenständige Modul-Fenster +└── tests/IBKRTrader.Tests (xUnit, referenziert Core + Module) ``` -### Kernregeln (siehe auch `.agents/rules/grundregeln.md`) -- Core kennt kein Modul. Module hängen sich über DI + `IModule` ein. Abhängigkeit nur Modul → Core. -- DB-Tabellen: `{ModulKürzel}_name` (Core = `core_`, CongressTrading = `ct_`). -- Jeder Worker ist unabhängig ein-/ausschaltbar, hat eigenen Zeitplan, ist manuell triggerbar. -- **Strategie lebt im Modul, nicht im Core.** Der Core stellt nur Primitive bereit - (Orders, Portfolio, Risiko); das Modul liefert nur ein `TradeSignal` an den `ExecutionService`. +### Leitprinzipien (aus PolytraderSharp übernommen) +- **Multi-Projekt**: Core = eigenes Assembly; jedes Modul = eigenes Projekt, referenziert **nur** Core. + Module können einander physisch nicht referenzieren. +- **Generic Host**: `Host.CreateDefaultBuilder`, `IHostedService` für alle Hintergrund-Jobs, + `IOptions`/`IConfiguration`. +- **Config**: `appsettings.json` + `appsettings.Local.json` (gitignored, hält Connection-String/Secrets). +- **Modul-Vertrag** `IModule`: `Name`, `DbPrefix`, `RegisterServices(services, config)`, + `RegisterUi(host, sp)`, `StartAsync/StopAsync`, `GetActivationBlocker(config)`. +- **UI = Shell + Views**: Core und Module registrieren `ModuleView`s beim `IModuleUiHost`. + Der Launcher öffnet je View ein Fenster (Einzelinstanz, Re-Open fokussiert). Gemeinsames + „Fenster"-Menü (`WindowMenu`) auf jedem Form. Views sind designbare Forms mit `Initialize(sp)`. +- **Persistenz**: EF Core (Pomelo/MySQL), `AddDbContextFactory`, Repositories hinter Interfaces. +- **Sicherheit**: Master-Key + AES-256-GCM-Verschlüsselung von Credentials at-rest; TLS-Warnung. +- **Headless-Test**: `--smoke-ui` konstruiert jede View + Launcher ohne Message-Loop. +- **Module an/aus** über `ServerSettings.DisabledModules`. -### Festgelegte Entscheidungen -| Thema | Festlegung | +--- + +## 2. Was aus dem bisherigen Stand übernommen wird + +| Bestand (Phase 0–3, Python-basiert) | Schicksal | |---|---| -| Modul-Fenster | Eigenständige Top-Level-Fenster; Launcher trackt `Key → Form`, fokussiert bei Re-Open | -| Demo-Betrieb | IBKR **Paper-Account** (Port 4002); Umschaltung Paper/Live via `TradingSettings.Mode` | -| Tests | `IBKRTrader.Tests` (xUnit + NSubstitute + FluentAssertions), **nur Unit**, alles Externe gemockt | -| DoD je Phase | `dotnet test` (Unit) grün **und** Build sauber | +| Testprojekt (xUnit) | bleibt, wandert nach `tests/` | +| `RiskService`, `ExecutionService`, Domänentypen | Logik bleibt → Core/Trading (Feinschliff) | +| CongressTrading Scraper/Repo | Inhalt bleibt → eigenes Modul-Projekt (auf EF/IHostedService umgestellt) | +| `IModule`/`ModuleRegistry`/`WindowManager` | ersetzt durch PolytraderSharp-Contract (`IModule` neu, `ModuleView`, `IModuleUiHost`, `WindowMenu`) | +| Manuelles `ServiceCollection` in Program.cs | ersetzt durch Generic Host | +| `settings.json`/`SettingsService` | ersetzt durch `IConfiguration` + `appsettings.Local.json` | +| Dapper + manuelle Migrationen | ersetzt durch EF Core | +| `WorkerEngine`/`IWorker` | ersetzt durch `IHostedService` | --- -## 2. Abbildung Polytrader → IBKRTrader +## 3. Re-Fundamentierungs-Phasen (Checkliste) -| Polytrader | Rolle | IBKRTrader | -|---|---|---| -| `main.py` + `api/server.py` lifespan | Entry-Point, Orchestrierung, Background-Loops | `Program.cs` (DI) + `WorkerEngine` | -| `config.py` | zentrale Config | `SettingsService` / `AppSettings` | -| `database/` | Buchführung | `DatabaseService` + Migrationen + Repos | -| `polymarket_client.py` | Plattform-Anbindung | `IIbkrClient` (Marktdaten + Orders) | -| `trade_manager.py` | Positionen/Balance/P&L | `PortfolioService` | -| `trade_engine.py` | Signal → Risiko → Order | `ExecutionService` + `RiskService` | -| `trader_monitor.py` | Datenquelle pollen → Signal | Modul-Worker (z. B. `CT-ScrapeWorker`) | -| `demo_wallet.py` | Handel ohne echtes Geld | IBKR Paper-Account | -| `desktop_gui.py` | Launcher-Fenster | `LauncherForm` | -| `frontend/` (Sidebar → Pages) | Ansichten | Launcher-Panels + je Modul ein Fenster | -| `telegram_notifier.py` | Benachrichtigungen | `NotificationService` (später) | -| `module_checker.py` | Integritätscheck | Startup-Self-Check (später) | +### R1 – Solution-Skelett (Multi-Projekt, reiner Strukturumbau, Verhalten unverändert) ✅ +- [x] `src/IBKRTrader.Core` (classlib, UseWindowsForms) – `Core/` + UI-Contract (`Ui/ModuleFormBase`, `Ui/WindowManager`) +- [x] `src/IBKRTrader.Modules.CongressTrading` (classlib, referenziert nur Core) +- [x] Root-Projekt → `IBKRTrader.App` (WinExe), referenziert Core + Modul; Program/LauncherForm/UI-Shell bleiben +- [x] `tests/IBKRTrader.Tests` – Referenzen auf Core + Modul; Fixture-Pfad angepasst +- [x] Neue `.slnx`; ungenutztes HtmlAgilityPack entfernt; Build + **38/38 Tests grün**; App startet + +### R2 – Core-Contracts + Generic Host + Shell-UI +- [ ] `IModule` (PolytraderSharp-Stil) + `ModuleView` + `IModuleUiHost` + `WindowMenu` in Core +- [ ] `Program.cs` → `Host.CreateDefaultBuilder`; `IConfiguration` (appsettings.json + appsettings.Local.json) +- [ ] `ShellUiHost` + `LauncherForm` (View-Buttons + Fenster-Menü); Core-Views registrieren +- [ ] CongressTrading auf neuen `IModule`-Vertrag; Module über `IHostedService` +- [ ] `--smoke-ui` Headless-Test + +### R3 – Persistenz auf EF Core +- [ ] `AddCorePersistence` + `CoreDbContext` + Entities + EF-Repos (core_) +- [ ] Modul-DbContext (ct_) im CongressTrading-Projekt +- [ ] Dapper/manuelle Migrationen entfernen + +### R4 – Trading-Kern einфügen +- [ ] Risk/Execution/Portfolio/Broker-Seam nach Core/Trading (aus Phase 3 portiert) +- [ ] Hintergrund-Jobs als `IHostedService` + +### R5 – CongressTrading als vollständige Strategie +- [ ] Scraper/Jobs → `IHostedService`; Signal → `ExecutionService` +- [ ] Modul-View (Tabs) via `RegisterUi` + +### R6 – Sicherheit + Config-Härtung +- [ ] `SecretProtection` (Master-Key, AES-256-GCM at-rest), TLS-Warnung +- [ ] Connection-String nur in `appsettings.Local.json` (gitignored); Secrets aus Repo/Historie + +### R7 – Tests + Feinschliff +- [ ] Bestehende Unit-Tests portieren; `--smoke-ui`; EF-InMemory-Tests wo sinnvoll --- -## 3. Teststrategie - -- Eigenes Projekt **`IBKRTrader.Tests`** (`net10.0-windows`), im `.slnx`. -- **Nur Unit-Tests**, deterministisch, schnell, laufen bei jedem Build/Commit. -- Externe Abhängigkeiten hinter Interfaces (`IIbkrClient`, `IOrderService`, `IPortfolioService`, - `IRiskService`, `ICongressRepository` …) → in Tests via **NSubstitute** gemockt. -- Echtes MySQL/IBKR-Paper/Scraping wird **manuell** je Meilenstein geprüft (nicht automatisiert). - -| Komponente | Beispiel-Testfall | -|---|---| -| `RiskService` | Sizing bei 5 % Budget; Ablehnung bei Slippage; globaler Pause-Schalter blockt | -| `ExecutionService` | Signal → gemockte Risk/Order/Portfolio; Buchung & Ablehnungsgründe | -| `CapitolTradesScraper` | Parser gegen Fixture `ct_raw.html` (deterministisch, kein Netz) | -| `ModuleRegistry` / `IModule` | Registrierung, Worker-Sammlung, `CreateWindow` liefert Fenster | -| `WorkerBase` | Interval-Loop, Trigger, Fehler → `Status=Error`, Cancellation | -| `AppSettings` / `SettingsService` | Laden/Serialisieren, Paper/Live-Port-Auswahl (4002/4001) | -| `WindowManager` | Fenster-Tracking, Re-Open fokussiert bestehendes Fenster | - -WinForms selbst wird **nicht** unit-getestet – Logik in Services/Manager halten, Forms dünn. - ---- - -## 4. Phasenplan (Checkliste) - -### Phase 0 – Fundament & Doku ✅ -- [x] `grundregeln.md` auf .NET 10 + Launcher-Modell aktualisiert (+ DB-Passwort entfernt) -- [x] `docs/ARCHITECTURE.md` angelegt -- [x] `IBKRTrader.Tests` (xUnit + NSubstitute + FluentAssertions) angelegt, im `.slnx` -- [x] Repo-lokale `NuGet.config` (Test-Pakete in Allowlist ergänzt) -- [x] Erster Smoke-Test grün (`dotnet test` → 2/2 bestanden) - -### Phase 1 – Modul-System formalisieren (Refactoring, kein Verhaltensänderung) ✅ -- [x] `Core/Modules/IModule.cs` (`Key`, `DisplayName`, `Description`, `Version`, `RegisterServices`, `InitializeAsync`, `GetWorkers`, `CreateWindow`) -- [x] `Core/Modules/ModuleRegistry.cs` -- [x] `CongressTradingModule` → `IModule` (instanzbasiert, + Platzhalter-`CreateWindow`) -- [x] `Program.cs` iteriert über `IModule[]` + `ModuleRegistry`; `Form1` initialisiert Module über die Registry -- [x] Testbarkeits-Seams: `WorkerBase.BeginRunLogAsync/EndRunLogAsync`, `CapitolTradesScraper.ParseTradesFromHtml` -- [x] Tests: `ModuleRegistry`, `CongressTradingModule`, `WorkerBase`, `CapitolTradesScraper` (gegen `ct_raw.html`) → **15/15 grün** - -### Phase 2 – Launcher-UI + Modul-Fenster ✅ -- [x] `Form1` → `LauncherForm` (Dateien via `git mv`, Designer/resx angepasst); Kern-Panels behalten -- [x] Modul-Tab: Karten aus `ModuleRegistry`, je Modul „Fenster öffnen" -- [x] `UI/ModuleFormBase.cs` + `UI/WindowManager.cs` (Fenster-Tracking, Re-Open fokussiert, `CloseAll`) -- [x] `Modules/CongressTrading/UI/CongressTradingForm.cs` (DB-Kennzahlen + „Scrape jetzt") -- [x] `WindowManager` in DI; Launcher schließt Modul-Fenster beim Beenden -- [x] Tests: `WindowManager` (6) → **21/21 grün**; Launcher-Start verifiziert - -### Phase 3 – Trading-Kern (Core) ✅ -- [x] `Core/Trading/TradingModels.cs` (Signal, Order, RiskContext/Decision, Account, Position, Quote) -- [x] `Core/Trading/IBrokerClient.cs` + **`NullBrokerClient`** (sicherer Default: handelt nie) -- [x] `Core/Trading/PortfolioService.cs` (+ `IPortfolioService`) + Migration `core_position` (nutzt vorhandene `core_trade_history`/`core_budget`) -- [x] `Core/Trading/RiskService.cs` (+ `IRiskService`): Sizing, Modul-Limit, Slippage -- [x] `Core/Trading/ExecutionService.cs` (+ `IExecutionService`): Signal → Kurs → Konto → Risiko → Order → Buchung -- [x] `TradingSettings` in `AppSettings` (Mode Paper/Live, TradingEnabled, Risikoparameter) -- [x] Tests: `RiskService` (11), `ExecutionService` (6, voll gemockt) → **38/38 grün** -- [ ] **Offen (bewusst):** echter `IbkrBrokerClient` (Quote/Konto/Order gegen Client-Portal-Gateway) — manuelle Verifikation gegen Paper-Account - -### Phase 4 – CongressTrading als vollständige Strategie -- [ ] `CongressTradingStrategy`: neue Scrape-Trades → `TradeSignal` an `ExecutionService` -- [ ] Modul-Fenster: offene/geschlossene Positionen, P&L, Strategie-Ein/Aus, Parameter -- [ ] Tests: Signal-Erzeugung - -### Phase 5 – Feinschliff (optional) -- [ ] `NotificationService` (Telegram o. Ä.) + periodische Reports -- [ ] Startup-Self-Check (analog `module_checker`) -- [ ] Dashboard-Panel im Launcher (Gesamt-Balance/P&L über alle Module) +## 4. Historie (bereits erledigt, teils zu ersetzen) +- Phase 0–3 (Python-basiert): Testfundament, IModule/ModuleRegistry, LauncherForm+WindowManager, + Trading-Kern (Risk/Execution/Portfolio, NullBroker). Logik brauchbar, Infrastruktur wird ersetzt. +- Commits bis `2ad4b55` auf Gitea. diff --git a/Core/AI/AIModelService.cs b/src/IBKRTrader.Core/AI/AIModelService.cs similarity index 100% rename from Core/AI/AIModelService.cs rename to src/IBKRTrader.Core/AI/AIModelService.cs diff --git a/Core/Budget/BudgetService.cs b/src/IBKRTrader.Core/Budget/BudgetService.cs similarity index 100% rename from Core/Budget/BudgetService.cs rename to src/IBKRTrader.Core/Budget/BudgetService.cs diff --git a/Core/Database/DatabaseService.cs b/src/IBKRTrader.Core/Database/DatabaseService.cs similarity index 100% rename from Core/Database/DatabaseService.cs rename to src/IBKRTrader.Core/Database/DatabaseService.cs diff --git a/Core/Database/Migrations/CoreMigrations.cs b/src/IBKRTrader.Core/Database/Migrations/CoreMigrations.cs similarity index 100% rename from Core/Database/Migrations/CoreMigrations.cs rename to src/IBKRTrader.Core/Database/Migrations/CoreMigrations.cs diff --git a/Core/Database/Migrations/IBKRMigrations.cs b/src/IBKRTrader.Core/Database/Migrations/IBKRMigrations.cs similarity index 100% rename from Core/Database/Migrations/IBKRMigrations.cs rename to src/IBKRTrader.Core/Database/Migrations/IBKRMigrations.cs diff --git a/Core/IBKR/IBKRGatewayService.cs b/src/IBKRTrader.Core/IBKR/IBKRGatewayService.cs similarity index 100% rename from Core/IBKR/IBKRGatewayService.cs rename to src/IBKRTrader.Core/IBKR/IBKRGatewayService.cs diff --git a/Core/IBKR/IBKRMarketDataRepository.cs b/src/IBKRTrader.Core/IBKR/IBKRMarketDataRepository.cs similarity index 100% rename from Core/IBKR/IBKRMarketDataRepository.cs rename to src/IBKRTrader.Core/IBKR/IBKRMarketDataRepository.cs diff --git a/Core/IBKR/IBKRModels.cs b/src/IBKRTrader.Core/IBKR/IBKRModels.cs similarity index 100% rename from Core/IBKR/IBKRModels.cs rename to src/IBKRTrader.Core/IBKR/IBKRModels.cs diff --git a/src/IBKRTrader.Core/IBKRTrader.Core.csproj b/src/IBKRTrader.Core/IBKRTrader.Core.csproj new file mode 100644 index 0000000..24b7fb4 --- /dev/null +++ b/src/IBKRTrader.Core/IBKRTrader.Core.csproj @@ -0,0 +1,26 @@ + + + + net10.0-windows + enable + enable + + true + en + + + + + + + + + + + + <_Parameter1>IBKRTrader.Tests + + + + diff --git a/Core/Logging/AppLogLevel.cs b/src/IBKRTrader.Core/Logging/AppLogLevel.cs similarity index 100% rename from Core/Logging/AppLogLevel.cs rename to src/IBKRTrader.Core/Logging/AppLogLevel.cs diff --git a/Core/Logging/LogEntry.cs b/src/IBKRTrader.Core/Logging/LogEntry.cs similarity index 100% rename from Core/Logging/LogEntry.cs rename to src/IBKRTrader.Core/Logging/LogEntry.cs diff --git a/Core/Logging/LoggingService.cs b/src/IBKRTrader.Core/Logging/LoggingService.cs similarity index 100% rename from Core/Logging/LoggingService.cs rename to src/IBKRTrader.Core/Logging/LoggingService.cs diff --git a/Core/Modules/IModule.cs b/src/IBKRTrader.Core/Modules/IModule.cs similarity index 100% rename from Core/Modules/IModule.cs rename to src/IBKRTrader.Core/Modules/IModule.cs diff --git a/Core/Modules/ModuleRegistry.cs b/src/IBKRTrader.Core/Modules/ModuleRegistry.cs similarity index 100% rename from Core/Modules/ModuleRegistry.cs rename to src/IBKRTrader.Core/Modules/ModuleRegistry.cs diff --git a/Core/Settings/AppSettings.cs b/src/IBKRTrader.Core/Settings/AppSettings.cs similarity index 100% rename from Core/Settings/AppSettings.cs rename to src/IBKRTrader.Core/Settings/AppSettings.cs diff --git a/Core/Settings/SettingsService.cs b/src/IBKRTrader.Core/Settings/SettingsService.cs similarity index 100% rename from Core/Settings/SettingsService.cs rename to src/IBKRTrader.Core/Settings/SettingsService.cs diff --git a/Core/Trading/ExecutionService.cs b/src/IBKRTrader.Core/Trading/ExecutionService.cs similarity index 100% rename from Core/Trading/ExecutionService.cs rename to src/IBKRTrader.Core/Trading/ExecutionService.cs diff --git a/Core/Trading/IBrokerClient.cs b/src/IBKRTrader.Core/Trading/IBrokerClient.cs similarity index 100% rename from Core/Trading/IBrokerClient.cs rename to src/IBKRTrader.Core/Trading/IBrokerClient.cs diff --git a/Core/Trading/IExecutionService.cs b/src/IBKRTrader.Core/Trading/IExecutionService.cs similarity index 100% rename from Core/Trading/IExecutionService.cs rename to src/IBKRTrader.Core/Trading/IExecutionService.cs diff --git a/Core/Trading/IPortfolioService.cs b/src/IBKRTrader.Core/Trading/IPortfolioService.cs similarity index 100% rename from Core/Trading/IPortfolioService.cs rename to src/IBKRTrader.Core/Trading/IPortfolioService.cs diff --git a/Core/Trading/IRiskService.cs b/src/IBKRTrader.Core/Trading/IRiskService.cs similarity index 100% rename from Core/Trading/IRiskService.cs rename to src/IBKRTrader.Core/Trading/IRiskService.cs diff --git a/Core/Trading/NullBrokerClient.cs b/src/IBKRTrader.Core/Trading/NullBrokerClient.cs similarity index 100% rename from Core/Trading/NullBrokerClient.cs rename to src/IBKRTrader.Core/Trading/NullBrokerClient.cs diff --git a/Core/Trading/PortfolioService.cs b/src/IBKRTrader.Core/Trading/PortfolioService.cs similarity index 100% rename from Core/Trading/PortfolioService.cs rename to src/IBKRTrader.Core/Trading/PortfolioService.cs diff --git a/Core/Trading/RiskService.cs b/src/IBKRTrader.Core/Trading/RiskService.cs similarity index 100% rename from Core/Trading/RiskService.cs rename to src/IBKRTrader.Core/Trading/RiskService.cs diff --git a/Core/Trading/TradeHistoryService.cs b/src/IBKRTrader.Core/Trading/TradeHistoryService.cs similarity index 100% rename from Core/Trading/TradeHistoryService.cs rename to src/IBKRTrader.Core/Trading/TradeHistoryService.cs diff --git a/Core/Trading/TradingModels.cs b/src/IBKRTrader.Core/Trading/TradingModels.cs similarity index 100% rename from Core/Trading/TradingModels.cs rename to src/IBKRTrader.Core/Trading/TradingModels.cs diff --git a/UI/ModuleFormBase.cs b/src/IBKRTrader.Core/Ui/ModuleFormBase.cs similarity index 100% rename from UI/ModuleFormBase.cs rename to src/IBKRTrader.Core/Ui/ModuleFormBase.cs diff --git a/UI/WindowManager.cs b/src/IBKRTrader.Core/Ui/WindowManager.cs similarity index 100% rename from UI/WindowManager.cs rename to src/IBKRTrader.Core/Ui/WindowManager.cs diff --git a/Core/Workers/BuiltIn/BackupWorker.cs b/src/IBKRTrader.Core/Workers/BuiltIn/BackupWorker.cs similarity index 100% rename from Core/Workers/BuiltIn/BackupWorker.cs rename to src/IBKRTrader.Core/Workers/BuiltIn/BackupWorker.cs diff --git a/Core/Workers/BuiltIn/IBKRInstrumentSyncWorker.cs b/src/IBKRTrader.Core/Workers/BuiltIn/IBKRInstrumentSyncWorker.cs similarity index 100% rename from Core/Workers/BuiltIn/IBKRInstrumentSyncWorker.cs rename to src/IBKRTrader.Core/Workers/BuiltIn/IBKRInstrumentSyncWorker.cs diff --git a/Core/Workers/BuiltIn/IBKRPriceHistoryWorker.cs b/src/IBKRTrader.Core/Workers/BuiltIn/IBKRPriceHistoryWorker.cs similarity index 100% rename from Core/Workers/BuiltIn/IBKRPriceHistoryWorker.cs rename to src/IBKRTrader.Core/Workers/BuiltIn/IBKRPriceHistoryWorker.cs diff --git a/Core/Workers/BuiltIn/WebApiService.cs b/src/IBKRTrader.Core/Workers/BuiltIn/WebApiService.cs similarity index 100% rename from Core/Workers/BuiltIn/WebApiService.cs rename to src/IBKRTrader.Core/Workers/BuiltIn/WebApiService.cs diff --git a/Core/Workers/BuiltIn/WebserverService.cs b/src/IBKRTrader.Core/Workers/BuiltIn/WebserverService.cs similarity index 100% rename from Core/Workers/BuiltIn/WebserverService.cs rename to src/IBKRTrader.Core/Workers/BuiltIn/WebserverService.cs diff --git a/Core/Workers/IWorker.cs b/src/IBKRTrader.Core/Workers/IWorker.cs similarity index 100% rename from Core/Workers/IWorker.cs rename to src/IBKRTrader.Core/Workers/IWorker.cs diff --git a/Core/Workers/WorkerBase.cs b/src/IBKRTrader.Core/Workers/WorkerBase.cs similarity index 100% rename from Core/Workers/WorkerBase.cs rename to src/IBKRTrader.Core/Workers/WorkerBase.cs diff --git a/Core/Workers/WorkerEngine.cs b/src/IBKRTrader.Core/Workers/WorkerEngine.cs similarity index 100% rename from Core/Workers/WorkerEngine.cs rename to src/IBKRTrader.Core/Workers/WorkerEngine.cs diff --git a/Core/Workers/WorkerInfo.cs b/src/IBKRTrader.Core/Workers/WorkerInfo.cs similarity index 100% rename from Core/Workers/WorkerInfo.cs rename to src/IBKRTrader.Core/Workers/WorkerInfo.cs diff --git a/Core/Workers/WorkerStatus.cs b/src/IBKRTrader.Core/Workers/WorkerStatus.cs similarity index 100% rename from Core/Workers/WorkerStatus.cs rename to src/IBKRTrader.Core/Workers/WorkerStatus.cs diff --git a/Core/Workers/WorkerType.cs b/src/IBKRTrader.Core/Workers/WorkerType.cs similarity index 100% rename from Core/Workers/WorkerType.cs rename to src/IBKRTrader.Core/Workers/WorkerType.cs diff --git a/Modules/CongressTrading/CongressTradingModule.cs b/src/IBKRTrader.Modules.CongressTrading/CongressTradingModule.cs similarity index 100% rename from Modules/CongressTrading/CongressTradingModule.cs rename to src/IBKRTrader.Modules.CongressTrading/CongressTradingModule.cs diff --git a/Modules/CongressTrading/Database/CongressMigrations.cs b/src/IBKRTrader.Modules.CongressTrading/Database/CongressMigrations.cs similarity index 100% rename from Modules/CongressTrading/Database/CongressMigrations.cs rename to src/IBKRTrader.Modules.CongressTrading/Database/CongressMigrations.cs diff --git a/Modules/CongressTrading/Database/CongressRepository.cs b/src/IBKRTrader.Modules.CongressTrading/Database/CongressRepository.cs similarity index 100% rename from Modules/CongressTrading/Database/CongressRepository.cs rename to src/IBKRTrader.Modules.CongressTrading/Database/CongressRepository.cs diff --git a/src/IBKRTrader.Modules.CongressTrading/IBKRTrader.Modules.CongressTrading.csproj b/src/IBKRTrader.Modules.CongressTrading/IBKRTrader.Modules.CongressTrading.csproj new file mode 100644 index 0000000..cfb2867 --- /dev/null +++ b/src/IBKRTrader.Modules.CongressTrading/IBKRTrader.Modules.CongressTrading.csproj @@ -0,0 +1,27 @@ + + + + net10.0-windows + enable + enable + + true + en + + + + + + + + + + + + + + <_Parameter1>IBKRTrader.Tests + + + + diff --git a/Modules/CongressTrading/Models/CongressMember.cs b/src/IBKRTrader.Modules.CongressTrading/Models/CongressMember.cs similarity index 100% rename from Modules/CongressTrading/Models/CongressMember.cs rename to src/IBKRTrader.Modules.CongressTrading/Models/CongressMember.cs diff --git a/Modules/CongressTrading/Models/CongressTrade.cs b/src/IBKRTrader.Modules.CongressTrading/Models/CongressTrade.cs similarity index 100% rename from Modules/CongressTrading/Models/CongressTrade.cs rename to src/IBKRTrader.Modules.CongressTrading/Models/CongressTrade.cs diff --git a/Modules/CongressTrading/Scraper/CapitolTradesScraper.cs b/src/IBKRTrader.Modules.CongressTrading/Scraper/CapitolTradesScraper.cs similarity index 100% rename from Modules/CongressTrading/Scraper/CapitolTradesScraper.cs rename to src/IBKRTrader.Modules.CongressTrading/Scraper/CapitolTradesScraper.cs diff --git a/Modules/CongressTrading/UI/CongressTradingForm.cs b/src/IBKRTrader.Modules.CongressTrading/UI/CongressTradingForm.cs similarity index 100% rename from Modules/CongressTrading/UI/CongressTradingForm.cs rename to src/IBKRTrader.Modules.CongressTrading/UI/CongressTradingForm.cs diff --git a/Modules/CongressTrading/Workers/CongressHistoryImportWorker.cs b/src/IBKRTrader.Modules.CongressTrading/Workers/CongressHistoryImportWorker.cs similarity index 100% rename from Modules/CongressTrading/Workers/CongressHistoryImportWorker.cs rename to src/IBKRTrader.Modules.CongressTrading/Workers/CongressHistoryImportWorker.cs diff --git a/Modules/CongressTrading/Workers/CongressScrapeWorker.cs b/src/IBKRTrader.Modules.CongressTrading/Workers/CongressScrapeWorker.cs similarity index 100% rename from Modules/CongressTrading/Workers/CongressScrapeWorker.cs rename to src/IBKRTrader.Modules.CongressTrading/Workers/CongressScrapeWorker.cs diff --git a/IBKRTrader.Tests/IBKRTrader.Tests.csproj b/tests/IBKRTrader.Tests/IBKRTrader.Tests.csproj similarity index 76% rename from IBKRTrader.Tests/IBKRTrader.Tests.csproj rename to tests/IBKRTrader.Tests/IBKRTrader.Tests.csproj index 9a409df..4fe2a61 100644 --- a/IBKRTrader.Tests/IBKRTrader.Tests.csproj +++ b/tests/IBKRTrader.Tests/IBKRTrader.Tests.csproj @@ -17,15 +17,17 @@ + - + + - + PreserveNewest diff --git a/IBKRTrader.Tests/Modules/CapitolTradesScraperTests.cs b/tests/IBKRTrader.Tests/Modules/CapitolTradesScraperTests.cs similarity index 100% rename from IBKRTrader.Tests/Modules/CapitolTradesScraperTests.cs rename to tests/IBKRTrader.Tests/Modules/CapitolTradesScraperTests.cs diff --git a/IBKRTrader.Tests/Modules/CongressTradingModuleTests.cs b/tests/IBKRTrader.Tests/Modules/CongressTradingModuleTests.cs similarity index 100% rename from IBKRTrader.Tests/Modules/CongressTradingModuleTests.cs rename to tests/IBKRTrader.Tests/Modules/CongressTradingModuleTests.cs diff --git a/IBKRTrader.Tests/Modules/ModuleRegistryTests.cs b/tests/IBKRTrader.Tests/Modules/ModuleRegistryTests.cs similarity index 100% rename from IBKRTrader.Tests/Modules/ModuleRegistryTests.cs rename to tests/IBKRTrader.Tests/Modules/ModuleRegistryTests.cs diff --git a/IBKRTrader.Tests/SmokeTests.cs b/tests/IBKRTrader.Tests/SmokeTests.cs similarity index 100% rename from IBKRTrader.Tests/SmokeTests.cs rename to tests/IBKRTrader.Tests/SmokeTests.cs diff --git a/IBKRTrader.Tests/Trading/ExecutionServiceTests.cs b/tests/IBKRTrader.Tests/Trading/ExecutionServiceTests.cs similarity index 100% rename from IBKRTrader.Tests/Trading/ExecutionServiceTests.cs rename to tests/IBKRTrader.Tests/Trading/ExecutionServiceTests.cs diff --git a/IBKRTrader.Tests/Trading/RiskServiceTests.cs b/tests/IBKRTrader.Tests/Trading/RiskServiceTests.cs similarity index 100% rename from IBKRTrader.Tests/Trading/RiskServiceTests.cs rename to tests/IBKRTrader.Tests/Trading/RiskServiceTests.cs diff --git a/IBKRTrader.Tests/UI/WindowManagerTests.cs b/tests/IBKRTrader.Tests/UI/WindowManagerTests.cs similarity index 100% rename from IBKRTrader.Tests/UI/WindowManagerTests.cs rename to tests/IBKRTrader.Tests/UI/WindowManagerTests.cs diff --git a/IBKRTrader.Tests/Workers/WorkerBaseTests.cs b/tests/IBKRTrader.Tests/Workers/WorkerBaseTests.cs similarity index 100% rename from IBKRTrader.Tests/Workers/WorkerBaseTests.cs rename to tests/IBKRTrader.Tests/Workers/WorkerBaseTests.cs