Phase 5-UI: Generischer Core-Trade-Log + modulübergreifendes Dashboard

- Core: TradeRecord (Modell) + ITradeLogRepository (+ Mongo-Impl, Collection
  "trade_log"), in AddCorePersistence registriert. Realisiert den generischen,
  modulneutralen Trade-Log aus Entscheidung #2.
- Dual-Write: PersistenceService schreibt geschlossene Copy-Trades zusaetzlich als
  generischen TradeRecord (ModuleName="CopyTrading").
- Neue DashboardView (UserControl + Designer): zeigt die letzten Trades ALLER
  Module (GetRecent) mit Konto-Aufloesung + Kurzauswertung (Gesamt-PnL, Anzahl,
  Aufschluesselung je Modul). btn_dashboard im Launcher, View "core.dashboard".
- Build 0 Fehler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Richard
2026-07-02 12:16:20 +02:00
co-authored by Claude Opus 4.8
parent 8e2a92ad2e
commit 4f6c7fdb86
13 changed files with 500 additions and 41 deletions
+48 -37
View File
@@ -25,6 +25,7 @@ namespace PolyTraderSharp.Ui
btn_settings = new ToolStripButton();
btn_terminal = new ToolStripButton();
btn_jobs = new ToolStripButton();
btn_dashboard = new ToolStripButton();
toolstrip_quickbar = new ToolStrip();
btn_liveTrading = new ToolStripButton();
btn_demoTrading = new ToolStripButton();
@@ -37,9 +38,9 @@ namespace PolyTraderSharp.Ui
toolstrip_quickbar.SuspendLayout();
statusStrip_info.SuspendLayout();
SuspendLayout();
//
//
// menuStrip
//
//
menuStrip.ImageScalingSize = new Size(24, 24);
menuStrip.Items.AddRange(new ToolStripItem[] { miDatei });
menuStrip.Location = new Point(0, 0);
@@ -47,39 +48,39 @@ namespace PolyTraderSharp.Ui
menuStrip.Padding = new Padding(9, 3, 0, 3);
menuStrip.Size = new Size(2599, 35);
menuStrip.TabIndex = 0;
//
//
// miDatei
//
//
miDatei.DropDownItems.AddRange(new ToolStripItem[] { miLegacy, miBeenden });
miDatei.Name = "miDatei";
miDatei.Size = new Size(69, 29);
miDatei.Text = "Datei";
//
//
// miLegacy
//
//
miLegacy.Name = "miLegacy";
miLegacy.Size = new Size(275, 34);
miLegacy.Text = "Legacy-UI (alte Tabs)";
//
//
// miBeenden
//
//
miBeenden.Name = "miBeenden";
miBeenden.Size = new Size(275, 34);
miBeenden.Text = "Beenden";
//
//
// toolstrip_windows
//
//
toolstrip_windows.AutoSize = false;
toolstrip_windows.ImageScalingSize = new Size(64, 64);
toolstrip_windows.Items.AddRange(new ToolStripItem[] { btn_settings, btn_terminal, btn_jobs });
toolstrip_windows.Items.AddRange(new ToolStripItem[] { btn_settings, btn_terminal, btn_jobs, btn_dashboard });
toolstrip_windows.Location = new Point(0, 35);
toolstrip_windows.Name = "toolstrip_windows";
toolstrip_windows.Size = new Size(2599, 70);
toolstrip_windows.TabIndex = 3;
toolstrip_windows.Text = "toolStrip1";
//
//
// btn_settings
//
//
btn_settings.BackColor = SystemColors.Control;
btn_settings.Image = Properties.Resources.setting_tools;
btn_settings.ImageScaling = ToolStripItemImageScaling.None;
@@ -88,49 +89,58 @@ namespace PolyTraderSharp.Ui
btn_settings.Size = new Size(80, 65);
btn_settings.Text = "Settings";
btn_settings.TextImageRelation = TextImageRelation.ImageAboveText;
//
//
// btn_terminal
//
//
btn_terminal.Image = Properties.Resources.error_log;
btn_terminal.ImageScaling = ToolStripItemImageScaling.None;
btn_terminal.Name = "btn_terminal";
btn_terminal.Size = new Size(136, 65);
btn_terminal.Text = "Terminal / Logs";
btn_terminal.TextImageRelation = TextImageRelation.ImageAboveText;
//
//
// btn_jobs
//
btn_jobs.DisplayStyle = ToolStripItemDisplayStyle.Text;
//
btn_jobs.Image = Properties.Resources.system_time;
btn_jobs.ImageScaling = ToolStripItemImageScaling.None;
btn_jobs.Name = "btn_jobs";
btn_jobs.Size = new Size(100, 65);
btn_jobs.Size = new Size(106, 65);
btn_jobs.Text = "Server Jobs";
btn_jobs.TextImageRelation = TextImageRelation.ImageAboveText;
//
// btn_dashboard
//
btn_dashboard.DisplayStyle = ToolStripItemDisplayStyle.Text;
btn_dashboard.Name = "btn_dashboard";
btn_dashboard.Size = new Size(110, 65);
btn_dashboard.Text = "Dashboard";
//
// toolstrip_quickbar
//
//
toolstrip_quickbar.ImageScalingSize = new Size(24, 24);
toolstrip_quickbar.Items.AddRange(new ToolStripItem[] { btn_liveTrading, btn_demoTrading });
toolstrip_quickbar.Location = new Point(0, 105);
toolstrip_quickbar.Name = "toolstrip_quickbar";
toolstrip_quickbar.Size = new Size(2599, 28);
toolstrip_quickbar.Size = new Size(2599, 34);
toolstrip_quickbar.TabIndex = 4;
toolstrip_quickbar.Text = "toolStrip2";
//
//
// btn_liveTrading
//
//
btn_liveTrading.DisplayStyle = ToolStripItemDisplayStyle.Text;
btn_liveTrading.Name = "btn_liveTrading";
btn_liveTrading.Size = new Size(200, 25);
btn_liveTrading.Size = new Size(137, 29);
btn_liveTrading.Text = "LiveTrading (—)";
//
//
// btn_demoTrading
//
//
btn_demoTrading.DisplayStyle = ToolStripItemDisplayStyle.Text;
btn_demoTrading.Name = "btn_demoTrading";
btn_demoTrading.Size = new Size(200, 25);
btn_demoTrading.Size = new Size(156, 29);
btn_demoTrading.Text = "DemoTrading (—)";
//
//
// statusStrip_info
//
//
statusStrip_info.BackColor = Color.Gainsboro;
statusStrip_info.ImageScalingSize = new Size(24, 24);
statusStrip_info.Items.AddRange(new ToolStripItem[] { lbl_trading, lbl_modules, lbl_ratelimit });
@@ -139,27 +149,27 @@ namespace PolyTraderSharp.Ui
statusStrip_info.Size = new Size(2599, 32);
statusStrip_info.TabIndex = 5;
statusStrip_info.Text = "statusStrip1";
//
//
// lbl_trading
//
//
lbl_trading.Name = "lbl_trading";
lbl_trading.Size = new Size(97, 25);
lbl_trading.Text = "Trading: —";
//
//
// lbl_modules
//
//
lbl_modules.Name = "lbl_modules";
lbl_modules.Size = new Size(100, 25);
lbl_modules.Text = "Module: —";
//
//
// lbl_ratelimit
//
//
lbl_ratelimit.Name = "lbl_ratelimit";
lbl_ratelimit.Size = new Size(66, 25);
lbl_ratelimit.Text = "API: —";
//
//
// LauncherForm
//
//
AutoScaleDimensions = new SizeF(10F, 25F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(2599, 165);
@@ -194,6 +204,7 @@ namespace PolyTraderSharp.Ui
private ToolStripButton btn_settings;
private ToolStripButton btn_terminal;
private ToolStripButton btn_jobs;
private ToolStripButton btn_dashboard;
private ToolStrip toolstrip_quickbar;
private ToolStripButton btn_liveTrading;
private ToolStripButton btn_demoTrading;