UI-Spezifikation der WinForms-Oberflaeche gesichert (Rekonstruktionsvorlage)
Vor dem Entfernen der WinForms-UI: maschinell aus allen .Designer.cs extrahierte Spezifikation aller 16 Fenster - Groessen, Tabs, Beschriftungen, Schaltflaechen und saemtliche Grid-Spalten mit Reihenfolge, Format und Breite. Dazu uebergreifende Gestaltungsregeln, Farbwerte der PnL-Zeilenfaerbung, Symbol-Schluessel je Fenster und Verhaltensnotizen aus dem Code-Behind. Damit laesst sich die Avalonia-UI moeglichst 1:1 nachbauen. Der Originalcode bleibt zusaetzlich im Tag winforms-final; das Dokument empfiehlt, dort einmalig Screenshots mit echten Daten zu ziehen (optischer Gesamteindruck, den kein Text ersetzt). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,461 @@
|
|||||||
|
# UI-Spezifikation der WinForms-Oberfläche (Rekonstruktionsvorlage für Avalonia)
|
||||||
|
|
||||||
|
**Stand:** 06.08.2026 · **Zweck:** Die WinForms-UI wird im Zuge der Linux-Portierung entfernt.
|
||||||
|
Dieses Dokument hält fest, **wie sie aussah und was sie konnte**, damit die Avalonia-Umsetzung
|
||||||
|
so nah wie möglich am Original bleibt.
|
||||||
|
|
||||||
|
> **Der Originalcode ist nicht verloren.** Der Git-Tag **`winforms-final`** enthält den vollständigen
|
||||||
|
> letzten Stand. Auschecken und ansehen:
|
||||||
|
>
|
||||||
|
> ```bash
|
||||||
|
> git checkout winforms-final
|
||||||
|
> ```
|
||||||
|
>
|
||||||
|
> Dieses Dokument ist die *lesbare Zusammenfassung* — für Details (Pixelabstände, Andockung,
|
||||||
|
> Farbwerte) immer in den Tag schauen. Die Angaben unten sind maschinell aus den
|
||||||
|
> `.Designer.cs`-Dateien extrahiert, also exakt und nicht aus dem Gedächtnis rekonstruiert.
|
||||||
|
|
||||||
|
## Screenshots — bitte einmal selbst anlegen
|
||||||
|
|
||||||
|
Was dieses Dokument **nicht** leisten kann, ist der optische Gesamteindruck: Proportionen,
|
||||||
|
Abstände, Farbwirkung, wie voll die Fenster im Alltag aussehen. Dafür lohnt sich einmalig:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout winforms-final
|
||||||
|
```
|
||||||
|
|
||||||
|
Dann die App starten, jedes Fenster **mit echten Daten** öffnen und einen Screenshot ablegen
|
||||||
|
(Vorschlag: `docs/ui-referenz/<Fenstername>.png`). Zehn Minuten Arbeit, die beim Nachbau mehr
|
||||||
|
wert sind als jede Beschreibung. Danach mit `git checkout main` zurück.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Übergreifende Gestaltungsregeln
|
||||||
|
|
||||||
|
Diese Muster ziehen sich durch alle Fenster und sollten in Avalonia erhalten bleiben:
|
||||||
|
|
||||||
|
| Regel | Umsetzung in WinForms | Entsprechung in Avalonia |
|
||||||
|
|---|---|---|
|
||||||
|
| **Alle Fenster maximiert öffnen** | `WindowState = Maximized`, `StartPosition = CenterScreen` (`ShellUiHost.OpenView`) | `WindowState="Maximized"` |
|
||||||
|
| **Gemeinsame Fenster-Menüleiste** auf JEDEM Fenster | `WindowMenu.Wire()` hängt oben einen `MenuStrip` an; alle Fenster nebeneinander mit Icon, aktuelles fett + angehakt | `Menu` mit `ItemsSource`-Bindung (deklarativ!) |
|
||||||
|
| **Rechte Menüaktion kontextabhängig** | Launcher → „Beenden" (mit Sicherheitsabfrage); alle anderen Fenster → „Fenster schließen" | `DockPanel` — Avalonia kennt kein `ToolStripItemAlignment.Right` |
|
||||||
|
| **Ein Fenster je View** | `ShellUiHost` hält höchstens eine Instanz, holt sie sonst nach vorn | gleiche Logik; der Contract ist bereits toolkit-neutral |
|
||||||
|
| **Zahlenformate in Tabellen** | `DefaultCellStyle.Format` (`N2`, `N1`, …) | `Binding StringFormat` |
|
||||||
|
| **Schriftart** | „Segoe UI" (21×), Terminal „Consolas" (1×) | Systemschrift + Monospace-Fallback — Segoe UI gibt es auf Linux nicht |
|
||||||
|
| **Zeilenfärbung nach PnL** | `TradeRowColoring` lieferte die Farbe direkt in `DefaultCellStyle.BackColor` | bereits umgestellt: Logik liefert `TradeRowTint`, die UI mappt auf Farbe |
|
||||||
|
|
||||||
|
**Farbwerte der Zeilenfärbung** (aus `TradeRowPalette` — unverändert übernehmen):
|
||||||
|
|
||||||
|
| Kategorie | RGB | Bedeutung |
|
||||||
|
|---|---|---|
|
||||||
|
| `Loss` | 245, 200, 200 | < 0 % — rot |
|
||||||
|
| `SmallWin` | 212, 240, 212 | 0–10 % — hellgrün |
|
||||||
|
| `BigWin` | 140, 214, 140 | > 10 % — grün |
|
||||||
|
|
||||||
|
**Symbol-Schlüssel je Fenster** (siehe `Ui/ViewIcons.cs` — die Schlüssel bleiben gültig):
|
||||||
|
|
||||||
|
| View-ID | Schlüssel | Bildressource |
|
||||||
|
|---|---|---|
|
||||||
|
| `core.dashboard` | `dashboard` | dashboard.png |
|
||||||
|
| `core.settings` | `settings` | setting_tools.png |
|
||||||
|
| `core.terminal` | `terminal` | error_log.png |
|
||||||
|
| `core.jobs` | `jobs` | system_time.png |
|
||||||
|
| `copytrading.main` | `copytrading` | cross_reference.png |
|
||||||
|
| `resolutionfarming.main` | `resolutionfarming` | file_start_workflow.png |
|
||||||
|
| `supervisor.main` | `supervisor` | emotion_batman.png |
|
||||||
|
| `accounting.main` | `accounting` | coins_in_hand.png |
|
||||||
|
|
||||||
|
Die PNG-Dateien liegen weiterhin in `Resources/` und können unverändert weiterverwendet werden.
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## A. Modul-Fenster (in diesem Schritt entfernt)
|
||||||
|
|
||||||
|
### CopyTradingMainForm — Hauptfenster Copytrading
|
||||||
|
|
||||||
|
**Fenstergröße:** 1714 × 1167 px
|
||||||
|
|
||||||
|
**Tabs (Reihenfolge):** Master-Trader | Offene Trades | Geschlossene Trades | Account-Einstellungen
|
||||||
|
|
||||||
|
**Steuerelemente:** TabPage ×4, TabControl ×1, MasterTradersView ×1, OpenTradesView ×1, ClosedTradesView ×1, AccountSettingsView ×1
|
||||||
|
|
||||||
|
### MasterTradersView — Tab „Master-Trader“
|
||||||
|
|
||||||
|
**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):
|
||||||
|
|
||||||
|
| # | Spaltenkopf | Feldname | Format | Breite |
|
||||||
|
|--:|---|---|---|---|
|
||||||
|
| 1 | # | `colId` | — | 50 px |
|
||||||
|
| 2 | Wallet | `colWallet` | — | 170 px |
|
||||||
|
| 3 | Name | `colName` | — | Rest/Auto |
|
||||||
|
| 4 | Kategorie | `colCategory` | — | 110 px |
|
||||||
|
| 5 | Aktiv | `colActive` | — | 50 px |
|
||||||
|
| 6 | Trades (7T) | `colTrades` | — | 90 px |
|
||||||
|
| 7 | Winrate % | `colWinrate` | — | 90 px |
|
||||||
|
| 8 | PnL (7T) | `colPnl` | — | 100 px |
|
||||||
|
| 9 | Copy-PnL (30T) | `colCopyPnl` | — | 110 px |
|
||||||
|
| 10 | Profit-Faktor | `colCopyPf` | — | 100 px |
|
||||||
|
| 11 | Ø PnL/Trade | `colCopyAvg` | — | 100 px |
|
||||||
|
| 12 | Copy-Trades | `colCopyCount` | — | 90 px |
|
||||||
|
|
||||||
|
**Steuerelemente:** DataGridViewTextBoxColumn ×11, ToolStripButton ×4, Panel ×2, ToolStrip ×1, ToolStripSeparator ×1, DataGridView ×1, DataGridViewCheckBoxColumn ×1, Splitter ×1, PropertyGrid ×1, GroupBox ×1, CheckedListBox ×1, Label ×1
|
||||||
|
|
||||||
|
### OpenTradesView — Tab „Offene Trades“
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblSummary` = „—"
|
||||||
|
|
||||||
|
**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):
|
||||||
|
|
||||||
|
| # | Spaltenkopf | Feldname | Format | Breite |
|
||||||
|
|--:|---|---|---|---|
|
||||||
|
| 1 | Account | `colAccount` | — | Fill 120 |
|
||||||
|
| 2 | Master-Trader | `colTrader` | — | Fill 120 |
|
||||||
|
| 3 | Markt | `colMarket` | — | Fill 240 |
|
||||||
|
| 4 | Outcome | `colOutcome` | — | Fill 80 |
|
||||||
|
| 5 | Side | `colSide` | — | Fill 55 |
|
||||||
|
| 6 | Entry | `colEntry` | — | Fill 65 |
|
||||||
|
| 7 | Aktuell | `colCurrent` | — | Fill 65 |
|
||||||
|
| 8 | Size | `colSize` | — | Fill 70 |
|
||||||
|
| 9 | Einsatz | `colAmount` | — | Fill 80 |
|
||||||
|
| 10 | Wert | `colValue` | — | Fill 80 |
|
||||||
|
| 11 | Buchgewinn | `colUnrealized` | — | Fill 90 |
|
||||||
|
| 12 | Buchgew. % | `colUnrealizedPct` | — | Fill 80 |
|
||||||
|
| 13 | Status | `colStatus` | — | Fill 90 |
|
||||||
|
|
||||||
|
**Steuerelemente:** DataGridViewTextBoxColumn ×13, ToolStrip ×1, ToolStripButton ×1, DataGridView ×1, Panel ×1, Label ×1
|
||||||
|
|
||||||
|
### ClosedTradesView — Tab „Geschlossene Trades“
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblSummary` = „—"
|
||||||
|
- `lblMarkt` = „Markt:"
|
||||||
|
- `lblMaster` = „Master:"
|
||||||
|
- `lblErgebnis` = „Ergebnis:"
|
||||||
|
- `lblVon` = „Von:"
|
||||||
|
- `lblBis` = „Bis:"
|
||||||
|
|
||||||
|
**Schaltflächen:** „Zurücksetzen"
|
||||||
|
|
||||||
|
**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):
|
||||||
|
|
||||||
|
| # | Spaltenkopf | Feldname | Format | Breite |
|
||||||
|
|--:|---|---|---|---|
|
||||||
|
| 1 | # | `colTradeId` | — | 60 px |
|
||||||
|
| 2 | Account | `colAccount` | — | 130 px |
|
||||||
|
| 3 | Master-Trader | `colTrader` | — | 130 px |
|
||||||
|
| 4 | Markt | `colMarket` | — | Rest/Auto |
|
||||||
|
| 5 | Outcome | `colOutcome` | — | 80 px |
|
||||||
|
| 6 | Side | `colSide` | — | 60 px |
|
||||||
|
| 7 | Entry | `colEntry` | — | 70 px |
|
||||||
|
| 8 | Exit | `colExit` | — | 70 px |
|
||||||
|
| 9 | Size | `colSize` | — | 70 px |
|
||||||
|
| 10 | PnL | `colPnl` | — | 80 px |
|
||||||
|
| 11 | PnL % | `colPnlPct` | — | 70 px |
|
||||||
|
| 12 | Eröffnet | `colOpenedAt` | — | 130 px |
|
||||||
|
| 13 | Geschlossen | `colClosedAt` | — | 130 px |
|
||||||
|
|
||||||
|
**Steuerelemente:** DataGridViewTextBoxColumn ×13, Label ×6, Panel ×2, ComboBox ×2, DateTimePicker ×2, ToolStrip ×1, ToolStripButton ×1, DataGridView ×1, TextBox ×1, Button ×1
|
||||||
|
|
||||||
|
### AccountSettingsView — Tab „Account-Einstellungen“
|
||||||
|
|
||||||
|
**Steuerelemente:** ToolStrip ×1, ToolStripLabel ×1, ToolStripComboBox ×1, ToolStripSeparator ×1, ToolStripButton ×1, PropertyGrid ×1, Panel ×1, Label ×1
|
||||||
|
|
||||||
|
### ResolutionFarmingMainForm
|
||||||
|
|
||||||
|
**Fenstergröße:** 1429 × 1030 px
|
||||||
|
|
||||||
|
**Tabs (Reihenfolge):** Kandidaten | Positionen | Historie / Statistik | Settings
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblCandKonto` = „Konto:"
|
||||||
|
- `lblSetKonto` = „Konto:"
|
||||||
|
|
||||||
|
**Schaltflächen:** „Aktualisieren", „Speichern"
|
||||||
|
|
||||||
|
**Steuerelemente:** TabPage ×4, Panel ×4, Label ×4, Button ×4, DataGridView ×3, ComboBox ×2, TabControl ×1, PropertyGrid ×1
|
||||||
|
|
||||||
|
### SupervisorMainForm
|
||||||
|
|
||||||
|
**Fenstergröße:** 1786 × 1163 px
|
||||||
|
|
||||||
|
**Tabs (Reihenfolge):** Analyse | Dossiers | Berichte | Counterfactual
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblProfil` = „Profil:"
|
||||||
|
- `lblModel` = „Modell:"
|
||||||
|
- `lblSignal` = „SignalId:"
|
||||||
|
|
||||||
|
**Schaltflächen:** „Aktualisieren", „Dossier öffnen", „Senden", „Verlauf leeren"
|
||||||
|
|
||||||
|
**Steuerelemente:** ToolStripButton ×5, TabPage ×4, ToolStrip ×4, ToolStripLabel ×3, TextBox ×3, DataGridView ×3, ToolStripTextBox ×2, ToolStripSeparator ×2, SplitContainer ×2, TabControl ×1, ToolStripComboBox ×1, RichTextBox ×1, Panel ×1, Button ×1, Label ×1
|
||||||
|
|
||||||
|
### AccountingMainForm
|
||||||
|
|
||||||
|
**Fenstergröße:** 1571 × 1067 px
|
||||||
|
|
||||||
|
**Tabs (Reihenfolge):** Übersicht / BWA | Ledger | Abruf / Status
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblKpiNet` = „Netto-Handelsergebnis ↵ —"
|
||||||
|
- `lblKpiClosing` = „Endsaldo ↵ —"
|
||||||
|
- `lblKpiDeposits` = „Einzahlungen ↵ —"
|
||||||
|
- `lblKpiWithdrawals` = „Auszahlungen ↵ —"
|
||||||
|
- `lblKpiFees` = „Fees ↵ —"
|
||||||
|
- `lblKpiRewards` = „Rewards ↵ —"
|
||||||
|
- `lblKpiVolume` = „Handelsvolumen ↵ —"
|
||||||
|
- `lblKpiTrades` = „Trades ↵ —"
|
||||||
|
- `lblWaehrung` = „Währung:"
|
||||||
|
- `lblBis` = „Bis:"
|
||||||
|
- `lblVon` = „Von:"
|
||||||
|
- `lblOvKonto` = „Konto:"
|
||||||
|
- `lblLedgerKonto` = „Konto:"
|
||||||
|
- `lblStatusKonto` = „Konto:"
|
||||||
|
|
||||||
|
**Schaltflächen:** „Aktualisieren", „Backfill (volle Historie)", „Berechnen", „CSV-Export", „Inkrement jetzt", „PDF-Export"
|
||||||
|
|
||||||
|
**Steuerelemente:** Label ×13, ToolStripButton ×4, TabPage ×3, Button ×3, DataGridView ×3, ToolStripSeparator ×3, ComboBox ×2, DateTimePicker ×2, ToolStrip ×2, ToolStripLabel ×2, ToolStripComboBox ×2, TabControl ×1, Panel ×1, FlowLayoutPanel ×1
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## B. Core-/Shell-Fenster (bleiben vorerst bestehen)
|
||||||
|
|
||||||
|
### LauncherForm — Startleiste
|
||||||
|
|
||||||
|
**Fenstergröße:** 2599 × 669 px
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lbl_trading` = „Trading: —"
|
||||||
|
- `lbl_modules` = „Module: —"
|
||||||
|
- `lbl_ratelimit` = „API: —"
|
||||||
|
|
||||||
|
**Schaltflächen:** „API: —", „Accounting", „CopyTrading", „Dashboard", „DemoTrading (—)", „LiveTrading (—)", „ResolutionFarming", „Server Jobs", „Settings", „Supervisor", „Terminal / Logs"
|
||||||
|
|
||||||
|
**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):
|
||||||
|
|
||||||
|
| # | Spaltenkopf | Feldname | Format | Breite |
|
||||||
|
|--:|---|---|---|---|
|
||||||
|
| 1 | Account | `colAccName` | — | 113 px |
|
||||||
|
| 2 | Module | `colAccModules` | — | 109 px |
|
||||||
|
| 3 | Polymarket | `colAccPoly` | — | 106 px |
|
||||||
|
| 4 | Wallet (USDC) | `colAccBalance` | — | 157 px |
|
||||||
|
| 5 | 3T PnL | `colAccPnl3d` | — | Rest/Auto |
|
||||||
|
| 6 | 3T Winrate % | `colAccWin3d` | — | 153 px |
|
||||||
|
| 7 | Overall P/L | `colAccOverall` | — | 133 px |
|
||||||
|
|
||||||
|
**Steuerelemente:** ToolStripButton ×10, DataGridViewTextBoxColumn ×6, ToolStripStatusLabel ×3, ToolStrip ×2, ToolStripSeparator ×2, MenuStrip ×1, StatusStrip ×1, DataGridView ×1, DataGridViewButtonColumn ×1, LauncherWidgetsPanel ×1
|
||||||
|
|
||||||
|
### LauncherWidgetsPanel — Live-Überblick
|
||||||
|
|
||||||
|
**Tabs (Reihenfolge):** Auffällige Trades (24h)
|
||||||
|
|
||||||
|
**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):
|
||||||
|
|
||||||
|
| # | Spaltenkopf | Feldname | Format | Breite |
|
||||||
|
|--:|---|---|---|---|
|
||||||
|
| 1 | Zeit | `colAlertTime` | — | 70 px |
|
||||||
|
| 2 | Level | `colAlertLevel` | — | 70 px |
|
||||||
|
| 3 | Nachricht | `colAlertMsg` | — | Rest/Auto |
|
||||||
|
| 4 | Modul | `colNotModule` | — | 100 px |
|
||||||
|
| 5 | Markt | `colNotMarket` | — | Rest/Auto |
|
||||||
|
| 6 | PnL | `colNotPnl` | — | 80 px |
|
||||||
|
| 7 | PnL % | `colNotPnlPct` | — | 70 px |
|
||||||
|
|
||||||
|
**Steuerelemente:** DataGridViewTextBoxColumn ×7, GroupBox ×3, DataGridView ×2, TableLayoutPanel ×1, FlowLayoutPanel ×1, RichTextBox ×1
|
||||||
|
|
||||||
|
### DashboardView
|
||||||
|
|
||||||
|
**Fenstergröße:** 1714 × 1083 px
|
||||||
|
|
||||||
|
**Tabs (Reihenfolge):** Dashboard | Tradehistorie | Module
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblKpiPnl` = „Netto-PnL ↵ —"
|
||||||
|
- `lblKpiWin` = „Winrate ↵ —"
|
||||||
|
- `lblKpiTrades` = „Trades ↵ —"
|
||||||
|
- `lblKpiAvg` = „Ø PnL/Trade ↵ —"
|
||||||
|
- `lblKpiPf` = „Profit-Faktor ↵ —"
|
||||||
|
- `lblErgebnis` = „Ergebnis:"
|
||||||
|
- `lblSuche` = „Suche:"
|
||||||
|
- `lblModulesInfo` = „Module aktivieren/deaktivieren. Änderungen greifen nach dem nächsten Neustart von PolyTrader."
|
||||||
|
|
||||||
|
**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):
|
||||||
|
|
||||||
|
| # | Spaltenkopf | Feldname | Format | Breite |
|
||||||
|
|--:|---|---|---|---|
|
||||||
|
| 1 | Modul | `colModule` | — | 110 px |
|
||||||
|
| 2 | Konto | `colAccount` | — | 130 px |
|
||||||
|
| 3 | Markt | `colMarket` | — | Rest/Auto |
|
||||||
|
| 4 | Outcome | `colOutcome` | — | 80 px |
|
||||||
|
| 5 | Side | `colSide` | — | 60 px |
|
||||||
|
| 6 | Entry | `colEntry` | — | 70 px |
|
||||||
|
| 7 | Exit | `colExit` | — | 70 px |
|
||||||
|
| 8 | Size | `colSize` | — | 70 px |
|
||||||
|
| 9 | PnL | `colPnl` | — | 80 px |
|
||||||
|
| 10 | PnL % | `colPnlPct` | — | 70 px |
|
||||||
|
| 11 | Geschlossen | `colClosedAt` | — | 140 px |
|
||||||
|
| 12 | Modul | `colModName` | — | 220 px |
|
||||||
|
| 13 | Status | `colModStatus` | — | 260 px |
|
||||||
|
| 14 | Hinweis | `colModHint` | — | Rest/Auto |
|
||||||
|
| 15 | Aktion | `colModAction` | — | 160 px |
|
||||||
|
|
||||||
|
**Steuerelemente:** DataGridViewTextBoxColumn ×14, Label ×8, ToolStripLabel ×4, ToolStripComboBox ×4, TabPage ×3, PictureBox ×3, Panel ×2, DataGridView ×2, ToolStrip ×1, ToolStripButton ×1, TabControl ×1, FlowLayoutPanel ×1, TextBox ×1, ComboBox ×1, DataGridViewButtonColumn ×1
|
||||||
|
|
||||||
|
### TerminalView
|
||||||
|
|
||||||
|
**Fenstergröße:** 1429 × 1083 px
|
||||||
|
|
||||||
|
**Tabs (Reihenfolge):** Live | Log Viewer
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblFilter` = „Level:"
|
||||||
|
- `lblViewerStatus` = „—"
|
||||||
|
- `lblVText` = „Text:"
|
||||||
|
- `lblVCid` = „CID:"
|
||||||
|
- `lblVLevel` = „Level:"
|
||||||
|
- `lblVDatum` = „Datum:"
|
||||||
|
|
||||||
|
**Schaltflächen:** „Alles auswählen", „Alles kopieren", „Kopieren", „Laden", „Stop Autoscroll", „Terminal leeren"
|
||||||
|
|
||||||
|
**Steuerelemente:** Label ×6, ToolStripMenuItem ×4, DataGridViewTextBoxColumn ×4, TabPage ×2, Panel ×2, ComboBox ×2, Button ×2, TextBox ×2, TabControl ×1, RichTextBox ×1, ContextMenuStrip ×1, ToolStripSeparator ×1, DateTimePicker ×1, DataGridView ×1
|
||||||
|
|
||||||
|
### SettingsView
|
||||||
|
|
||||||
|
**Fenstergröße:** 1185 × 820 px
|
||||||
|
|
||||||
|
**Tabs (Reihenfolge):** General Settings | Polymarket Accounts
|
||||||
|
|
||||||
|
**Schaltflächen:** „Lizenz prüfen / setzen …", „Load Settings from File", „Löschen", „Master-Key erzeugen", „Neuer Account", „OpenRouter-Key setzen …", „Save Changes", „Test-Heartbeat senden", „Watchdog-Token setzen …"
|
||||||
|
|
||||||
|
**Steuerelemente:** ToolStripButton ×9, PropertyGrid ×2, TabPage ×2, ToolStrip ×2, DataGridViewTextBoxColumn ×2, DataGridViewCheckBoxColumn ×2, TabControl ×1, DataGridView ×1
|
||||||
|
|
||||||
|
### JobsView
|
||||||
|
|
||||||
|
**Fenstergröße:** 1429 × 833 px
|
||||||
|
|
||||||
|
**Tabellenspalten** (Reihenfolge = Anzeigereihenfolge):
|
||||||
|
|
||||||
|
| # | Spaltenkopf | Feldname | Format | Breite |
|
||||||
|
|--:|---|---|---|---|
|
||||||
|
| 1 | Job Name | `colJobName` | — | 150 px |
|
||||||
|
| 2 | Status | `colStatus` | — | 150 px |
|
||||||
|
| 3 | Zuletzt ausgeführt | `colLastRun` | — | 130 px |
|
||||||
|
| 4 | Nächster Lauf | `colNextRun` | — | 130 px |
|
||||||
|
| 5 | Aktiv | `col_dgv_jobs_Enabled` | — | 60 px |
|
||||||
|
| 6 | Aktion | `col_dgv_jobs_Run` | — | 90 px |
|
||||||
|
| 7 | Beschreibung | `colDescription` | — | Rest/Auto |
|
||||||
|
|
||||||
|
**Steuerelemente:** DataGridViewTextBoxColumn ×5, DataGridView ×1, DataGridViewCheckBoxColumn ×1, DataGridViewButtonColumn ×1, ToolStrip ×1, ToolStripButton ×1
|
||||||
|
|
||||||
|
### LicenseDialog
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblHeadline` = „Für PolyTrader wird eine gültige Lizenz benötigt."
|
||||||
|
- `lblStatus` = „Status:"
|
||||||
|
- `lblHwCaption` = „Hardware-ID dieses Rechners (für die Aktivierung):"
|
||||||
|
- `lblKeyCaption` = „Lizenzschlüssel:"
|
||||||
|
|
||||||
|
**Schaltflächen:** „Kopieren", „Ohne Lizenz starten (eingeschränkt)", „Validieren"
|
||||||
|
|
||||||
|
**Steuerelemente:** Label ×5, Button ×3, TextBox ×2
|
||||||
|
|
||||||
|
### ShutdownConfirmDialog
|
||||||
|
|
||||||
|
**Beschriftungen:**
|
||||||
|
|
||||||
|
- `lblTitle` = „PolyTrader sicher beenden?"
|
||||||
|
- `lblCountdown` = „Beenden möglich in 10 s …"
|
||||||
|
|
||||||
|
**Schaltflächen:** „Abbrechen", „Beenden (10 s)"
|
||||||
|
|
||||||
|
**Steuerelemente:** Label ×3, Button ×2, Timer ×1
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Verhaltensnotizen aus dem Code-Behind
|
||||||
|
|
||||||
|
Was die Designer-Dateien nicht zeigen — Verhalten, das beim Nachbau leicht untergeht:
|
||||||
|
|
||||||
|
### Copytrading
|
||||||
|
|
||||||
|
- **MasterTradersView**: Links das Grid, rechts ein `PropertyGrid` für den gewählten Trader, darunter
|
||||||
|
eine `CheckedListBox` „Zugewiesene Accounts". Getrennt durch einen `Splitter`. Nach dem Speichern
|
||||||
|
erscheint ein Hinweistext mit Uhrzeit: „Gespeichert: #ID Name (n Account(s)) um HH:mm:ss".
|
||||||
|
- **OpenTradesView / ClosedTradesView**: Die Zeilenfärbung wird bei `DataBindingComplete` neu gesetzt.
|
||||||
|
Unter dem Grid zeigt eine Zusammenfassungszeile (`lblSummary`) die Summen.
|
||||||
|
- **ClosedTradesView**: Filterleiste mit Markt-Suche, Master-Auswahl, Ergebnis-Auswahl
|
||||||
|
(Alle / Gewinner / Verlierer) und Datumsbereich; dazu „Zurücksetzen".
|
||||||
|
- **AccountSettingsView**: Konto-Auswahl in der Toolbar, darunter ein `PropertyGrid` auf
|
||||||
|
`CopyTradingAccountSettings`. **Die `[Description]`-Attribute der Modellklasse sind die
|
||||||
|
Feldbeschreibungen — beim Nachbau als Tooltips oder Hilfetexte übernehmen.**
|
||||||
|
|
||||||
|
### ResolutionFarming
|
||||||
|
|
||||||
|
Vier Tabs (Kandidaten / Positionen / Historie + Statistik / Settings), je ein Grid mit einer
|
||||||
|
„Aktualisieren"-Schaltfläche und Konto-Auswahl oben. Der Settings-Tab zeigt ein `PropertyGrid`
|
||||||
|
plus „Speichern" mit Bestätigungstext samt Uhrzeit.
|
||||||
|
|
||||||
|
### Supervisor
|
||||||
|
|
||||||
|
- **Analyse-Tab**: chat-artig — `RichTextBox` für den Verlauf (je Eintrag Zeitstempel + Sprecher),
|
||||||
|
Eingabefeld, „Senden", „Verlauf leeren"; Profil- und Modellauswahl in der Toolbar.
|
||||||
|
- **Dossiers-Tab**: Grid plus „Dossier öffnen".
|
||||||
|
- **Berichte / Counterfactual**: Grid plus „Aktualisieren", Filterung über `SignalId`.
|
||||||
|
|
||||||
|
### Accounting
|
||||||
|
|
||||||
|
- Drei Tabs: Übersicht/BWA, Ledger, Abruf/Status.
|
||||||
|
- **KPI-Kacheln** in einem `FlowLayoutPanel`: Netto-Handelsergebnis, Endsaldo, Einzahlungen,
|
||||||
|
Auszahlungen, Fees, Rewards, Handelsvolumen, Trades. Format je Kachel zweizeilig:
|
||||||
|
`"<Titel>\n<Wert:N2> <Währung>"` — der Wert steht unter dem Titel.
|
||||||
|
- Zeitraumwahl über zwei `DateTimePicker` (Von/Bis), dazu Währungs- und Kontoauswahl.
|
||||||
|
- Export über „PDF-Export" und „CSV-Export"; im Status-Tab „Inkrement jetzt" und
|
||||||
|
„Backfill (volle Historie)".
|
||||||
|
|
||||||
|
### Shell
|
||||||
|
|
||||||
|
- **LauncherForm**: Startleiste mit einem Button je Fenster (angehakt, wenn das Fenster offen ist),
|
||||||
|
Schnellaktionen „LiveTrading" und „DemoTrading" (dreistufig: Inactive → SellOnly → Active),
|
||||||
|
Statuszeile mit Trading-Status, Modul-Status und API-Ratelimit. Darunter die Account-Übersicht
|
||||||
|
und der Live-Überblick (`LauncherWidgetsPanel`).
|
||||||
|
- **Das Schließen-X ist abgefangen** und läuft über dieselbe Sicherheitsabfrage wie „Beenden".
|
||||||
|
- **ShutdownConfirmDialog**: Die Beenden-Schaltfläche ist **10 Sekunden gesperrt**, mit Countdown im
|
||||||
|
Text („Beenden möglich in 10 s"); Abbrechen ist jederzeit möglich.
|
||||||
|
- **TerminalView**: Live-Tab mit farbigen Log-Zeilen und abschaltbarem Autoscroll, Kontextmenü
|
||||||
|
(Alles auswählen / Alles kopieren), Auto-Clear bei Erreichen der RAM-Grenze. Log-Viewer-Tab mit
|
||||||
|
Filtern über Datum, Level, CID und Volltext.
|
||||||
|
- **DashboardView**: KPI-Kacheln (Netto-PnL, Winrate, Trades, Ø PnL/Trade, Profit-Faktor), drei
|
||||||
|
Diagramme (Equity-Kurve, PnL je Modul, PnL je Tag), Tradehistorie mit Suche und
|
||||||
|
Gewinner/Verlierer-Filter sowie ein Modul-Tab zum Aktivieren/Deaktivieren (wirkt nach Neustart).
|
||||||
|
**Der Profit-Faktor zeigt „∞", wenn es keine Verluste gab.**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Was beim Nachbau bewusst *anders* werden darf
|
||||||
|
|
||||||
|
Nicht alles ist erhaltenswert — diese Punkte sind Altlasten der WinForms-Umsetzung:
|
||||||
|
|
||||||
|
1. **Die `PropertyGrid`-Fenster** (Settings, Account-Einstellungen, Master-Trader,
|
||||||
|
ResolutionFarming): statt einer alphabetischen Reflection-Liste künftig fachlich gruppierte
|
||||||
|
Formulare mit Validierung, Einheiten am Feld und abhängigen Feldern. Die `[Description]`-Attribute
|
||||||
|
liefern die Texte, die `[Browsable(false)]`-Markierungen die auszublendenden Felder.
|
||||||
|
2. **Menüaufbau zur Laufzeit** (`WindowMenu.Populate` leert und füllt `menu.Items`): verstößt gegen
|
||||||
|
die neue Layout-Regel. In Avalonia ein deklaratives `Menu` mit `ItemsSource`-Bindung.
|
||||||
|
3. **Diagramme als Bitmap** (ScottPlot → PNG → `PictureBox`): entfällt mit LiveCharts2.
|
||||||
|
4. **Das `RichTextBox`-Terminal**: als virtualisiertes `ItemsControl` über eine
|
||||||
|
`ObservableCollection<LogLine>` neu bauen — das löst nebenbei das RAM-Problem, wegen dem heute
|
||||||
|
ein Auto-Clear nötig ist.
|
||||||
|
5. **Feste Pixelbreiten** in den Grids: in Avalonia besser mit `*`-Sternbreiten arbeiten. Die Werte
|
||||||
|
in den Tabellen oben geben die *Proportionen* vor, nicht die absoluten Zahlen.
|
||||||
Reference in New Issue
Block a user