diff --git a/docs/pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md b/docs/pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md index 5640aee..d812e8d 100644 --- a/docs/pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md +++ b/docs/pruefplaene/BEFUND-Linux-Betrieb-2026-08-26.md @@ -450,3 +450,105 @@ einheitlich gelten. Zumal `server_settings.xml` auch den Watchdog-Token trägt. ausgeliefert ist. Erst dann lassen sich Spaltenbreiten (B-11), Splitter-Positionen und Leerzustände sinnvoll beurteilen. Das Verfahren dafür ist dokumentiert und wiederholbar: [TESTUMGEBUNG-Linux-VM.md](../TESTUMGEBUNG-Linux-VM.md) §4.7. + + +--- + +# Nachtrag 4: Sichtprüfung mit Testdaten + +Nach der Behebung von B-10 wurden **Testdaten** in die Testdatenbank eingespielt, um die Tabellen +in Betrieb zu sehen: 3 Demo-Konten, 5 Master-Trader, 3 offene Positionen, 7 abgeschlossene Trades, +5 ResolutionFarming-Kandidaten. Wiederverwendbar als +[`testdaten-ui.sql`](./testdaten-ui.sql). + +> **Bewusst realistisch:** 42-stellige Wallet-Adressen und lange englische Marktfragen. Kurze +> Platzhalter wie „Test 1" hätten die Befunde B-11 und B-13 verdeckt. + +**Das war der entscheidende Schritt.** Mit Daten zeigt sich in Minuten, was ohne sie unsichtbar +bleibt — die Anwendung wirkt jetzt vollständig funktionsfähig: Grids füllen sich, die Auswahl +markiert Zeilen, das Detailformular übernimmt den gewählten Datensatz, zugewiesene Konten werden +korrekt angehakt, KPI-Kacheln rechnen, die Trade-Historie erscheint. + +## B-13 · Die Spalte „Name" ist unsichtbar zusammengequetscht · offen · **wichtig** + +Im Master-Trader-Grid ist die Spalte **Name** (`Width="*"`) auf wenige Pixel zusammengedrückt. +Die Anzeigenamen — *WeatherWhale*, *PolitiSniper*, *SportsEdge Capital* — sind **nirgends im Grid +zu sehen**, obwohl sie die wichtigste Information der Zeile sind. Sichtbar ist nur die +abgeschnittene Wallet-Adresse (`0x9e2b7f4a1c8d0e5b…`, 18 von 42 Zeichen). + +**Ursache:** Die festen Breiten der elf übrigen Spalten summieren sich auf mehr, als der Bereich +links vom Splitter hergibt. Die Sternbreite bekommt, was übrig bleibt — und das ist fast nichts. + +**Empfehlung:** Der Name gehört nach vorn (direkt hinter `#`) und braucht eine Mindestbreite; +die Wallet-Adresse ist ein Kandidat fürs Ausblenden oder für eine Kurzform (`0x9e2b…3b95`). + +## B-11 · präzisiert: Nicht die Werte sind zu breit, sondern die Überschriften + +Der Vergleich zweier Grids macht die Ursache eindeutig: + +| Grid | Ergebnis | +|---|---| +| **ResolutionFarming-Kandidaten** | Sieht **gut** aus. Lange Marktfragen passen fast vollständig, die Zahlen sind lesbar | +| **Master-Trader** | Überschriften abgeschnitten: `Trades (7`, `Winrate '`, `Copy-PnL`; die letzten drei Spalten ohne Text | + +Auch im ResolutionFarming-Grid stehen `Outcor` statt „Outcome" und `Fee (bp` statt „Fee (bps)" — +während die Werte darunter (`Yes`, `180`) mühelos passen. + +**Die Spaltenbreiten sind auf die Datenwerte ausgelegt, nicht auf die Überschriften.** Das ist ein +Muster, kein Einzelfall: Wo Werte kurz und Titel lang sind, wird der Titel abgeschnitten. Zu +beheben durch breitere Spalten oder kürzere Titel (`Fee` statt `Fee (bps)`, Einheit in den +Tooltip). + +## B-14 · Mehrzeilige Texte in einzeiligen Feldern · offen, klein + +Im Detailformular sind **Beschreibung** und **Reasoning** einzeilige Textfelder, obwohl die +Datenbankspalten `varchar(1000)` fassen. Sichtbar ist nur ein Bruchteil +(„Setzt fast ausschliesslich auf Tem…"). Ein mehrzeiliges Feld wäre angemessen. + +## B-15 · Ein fehlerhafter Datensatz legt die gesamte Modul-Hydration lahm · offen + +Beim ersten Einspielen enthielt `AssignedAccountIds` versehentlich `"1,2"` statt des erwarteten +JSON-Arrays `"[1,2]"`. Ergebnis: + +``` +Copytrading-Hydration fehlgeschlagen: The JSON value could not be converted to +System.Collections.Generic.HashSet`1[System.Int32]. Path: $ | LineNumber: 0 +``` + +**Es wurde kein einziger Master-Trader geladen** — ein einzelner unlesbarer Datensatz verhindert +das Laden aller anderen. Im Betrieb hieße das: Ein beschädigter Eintrag legt das komplette Modul +still, statt übersprungen und gemeldet zu werden. + +Der Fehler war hier selbst verschuldet, das Verhalten dahinter ist es nicht. **Empfehlung:** +Datensatzweise behandeln — fehlerhafte Einträge überspringen, mit Kennung protokollieren, den +Rest laden. + +## B-7 · bestätigt + +Mit Daten ist es eindeutig: In **jeder** KPI-Kachel steht der Modulname doppelt — als Überschrift +und als erste Textzeile („CopyTrading / CopyTrading / Heute: +26,10 USDC …"). + +## Kein Fehler — nachgeprüft + +Die Spalte **Copy-PnL** zeigt für alle Trader `0,00`, obwohl die Testdaten Werte enthielten. Ein +Blick in die Datenbank zeigt: Die Werte stehen auch dort auf 0. Die Anwendung berechnet die +Copy-Kennzahlen aus den tatsächlichen Copy-Trades neu, und `mod_copytrading_closed_trades` ist +leer. **Korrektes Verhalten.** + +## Weitere Beobachtungen aus dem Datenlauf + +- **Account-Übersicht (Dashboard):** „Demo Hauptkonto (De…" und „CopyTrading, ResolutionFar…" + abgeschnitten, während rechts neben „Overall P/L" rund 300 px ungenutzt bleiben. Dasselbe Muster + wie B-11. +- **Warnungen & Fehler (Dashboard):** Die Spalte „Nachricht" ist so schmal, dass keine Meldung + vollständig lesbar ist. +- **Leerzustände** melden nichts. Wo ResolutionFarming für ein Konto ohne Kandidaten steht, bleibt + die Fläche leer — ein Hinweis „Keine Kandidaten für dieses Konto" würde die Frage beantworten, + ob gefiltert oder gar nichts geladen wurde. (Die Filterung selbst arbeitet korrekt, geprüft.) + +## Empfehlung + +Die Befunde B-11, B-13 und B-14 sind **Layoutarbeit an einer Stelle** und sollten zusammen +angegangen werden — am besten mit eingespielten Testdaten, weil sich Spaltenbreiten nur so +sinnvoll festlegen lassen. Das Verfahren ist reproduzierbar: +[TESTUMGEBUNG-Linux-VM.md](../TESTUMGEBUNG-Linux-VM.md) §4.7 plus `testdaten-ui.sql`. diff --git a/docs/pruefplaene/testdaten-ui.sql b/docs/pruefplaene/testdaten-ui.sql new file mode 100644 index 0000000..36ec791 --- /dev/null +++ b/docs/pruefplaene/testdaten-ui.sql @@ -0,0 +1,68 @@ +-- Testdaten fuer die Sichtpruefung der Oberflaeche (Roadmap A4a / A5) +-- ============================================================================ +-- Zweck: Die DataGrids mit realistischem Inhalt zeigen. Ohne Daten sieht eine +-- leere Tabelle aus wie fehlende Daten statt wie ein Fehler - genau daran ist +-- Befund B-10 (fehlendes DataGrid-Theme) monatelang vorbeigelaufen. +-- +-- Bewusst realistisch: 42-stellige Wallet-Adressen und lange englische +-- Marktfragen. Genau die bringen Spaltenbreiten zum Ueberlaufen - kurze +-- Platzhalter wie "Test 1" wuerden die Befunde B-11 und B-13 verdecken. +-- +-- SICHERHEIT: Alle Konten sind Demo-Konten (IsDemo=1) ohne Schluessel. Nur +-- gegen eine TESTDATENBANK einspielen, niemals gegen die Produktivdatenbank - +-- das Skript beginnt mit DELETE. +-- +-- Verwendung: +-- sudo mariadb polytrader_test < testdaten-ui.sql +-- +-- Hinweis zu AssignedAccountIds: Das Feld wird als JSON-Array gelesen ("[1,2]"). +-- Ein anderes Format laesst die komplette Modul-Hydration scheitern (Befund B-15). +-- +-- Nicht enthalten: mod_copytrading_closed_trades. Die Copy-Kennzahlen +-- (CopyPnl30d, CopyProfitFactor) werden daraus berechnet und beim Start +-- ueberschrieben - im Grid stehen sie deshalb auf 0,00. Das ist korrektes +-- Verhalten, kein Fehler. +-- ============================================================================ + +-- Testdaten fuer die Sichtpruefung der DataGrids (Roadmap A4a / A5). +-- ALLE Konten sind Demo-Konten (IsDemo=1), keine echten Schluessel, kein Live-Handel moeglich. +SET NAMES utf8mb4; + +DELETE FROM core_trade_log; +DELETE FROM core_positions; +DELETE FROM mod_copytrading_traders; +DELETE FROM core_accounts; +DELETE FROM rf_candidates; + +INSERT INTO core_accounts (AccountId,Name,WalletAddress,ApiKey,ApiSecret,ApiPassphrase,PrivateKey,IsDemo,IsActive,CloseOnlyMode,PayoutAddress,PayoutLimitUsd,TotalBalance,AvailableBalance,HasOpenLimitOrders) VALUES + (1,"Demo Hauptkonto","0x7a3f9c2e8b1d4a6f0c5e9b8d2f4a7c1e3b6d9f02","","","","",1,1,0,"",0,2481.730000,1902.440000,1), + (2,"Demo Zweitkonto (Sport)","0xd4e81b06f2a97c35e0b8d1f4a726c9038e5b7d1a","","","","",1,1,0,"",0,745.120000,745.120000,0), + (3,"Demo Testkonto stillgelegt","0x1f0a5c7e93b2d846f1e0c8a5b7d3f92e64a1c085","","","","",1,0,1,"",0,0.000000,0.000000,0); + +INSERT INTO mod_copytrading_traders (Id,WalletAddress,DisplayName,Category,Description,Reasoning,IsActive,IsHidden,TotalTrades,WinningTrades,Winrate30t,TotalPnl,AssignedAccountIds,AutoPauseEnabled,MakerEntry,CopyAvgPnlPerTrade,CopyPnl30d,CopyProfitFactor,CopyTradeCount30d) VALUES + (1,"0x9e2b7f4a1c8d0e5b3f6a9c2e8b1d7f0a4c6e3b95","WeatherWhale","Wetter","Setzt fast ausschliesslich auf Temperatur-Maerkte US-Ostkueste.","Hohe Trefferquote bei kurzen Haltezeiten.",1,0,412,289,70.100000,8241.55,"[1,2]",1,0,3.420000,1409.220000,2.140000,412), + (2,"0x3c8f1a6d9b2e4c7f0a5d8b3e6c9f2a4d7b0e5c81","PolitiSniper","Politik","Kauft Favoriten kurz vor Aufloesung, sehr kurze Haltedauer.", "Sniper-Muster - Slippage beobachten.",1,0,1338,1102,82.400000,25190.80,"[1]",1,1,1.870000,2502.660000,3.080000,1338), + (3,"0x6d1e9b4c7a2f5e8b0d3c6f9a2e5b8d1c4f7a0e63","SportsEdge Capital","Sport","NBA und NFL, mittlere Haltedauer ueber mehrere Stunden.","Solide, aber volumenabhaengig.",1,0,867,498,57.400000,4102.30,"[2]",1,0,0.640000,554.880000,1.310000,867), + (4,"0xb5f28a0c3e6d9b1f4a7c0e3b6d9f2a5c8e1b4d70","MacroTrend Research","Wirtschaft","Zinsentscheide und Inflationsdaten, lange Haltedauer.","Geringe Frequenz, hohe Einzelbetraege.",0,0,74,41,55.400000,-812.45,"[1]",1,0,-0.910000,-67.340000,0.780000,74), + (5,"0x2a7d0f5c8b1e4a7d0c3f6b9e2a5d8c1f4b7e0a36","CryptoDegen9000","Krypto","Extrem hohe Frequenz, sehr kleine Positionen.","Pausiert - Drift zu Longshots festgestellt.",0,0,5219,2103,40.300000,-3390.15,"[]",1,0,-0.180000,-939.420000,0.610000,5219); + +INSERT INTO core_positions (AccountId,IsDemo,TokenId,MarketSlug,ConditionId,SourceTraderId,SourceTraderName,SourceTraderAddress,MarketQuestion,Outcome,Side,EntryPrice,Size,AmountUsd,CurrentPrice,CurrentValueUsd,ExpiryDate,OpenedAt) VALUES + (1,1,"7194532086","will-the-fed-cut-rates-in-september-2026","0xc1",2,"PolitiSniper","0x3c8f1a6d9b2e4c7f0a5d8b3e6c9f2a4d7b0e5c81","Will the Federal Reserve cut interest rates at the September 2026 FOMC meeting?","Yes","BUY",0.940000,220.000000,206.800000,0.968000,212.960000,"2026-09-17 18:00:00","2026-08-24 09:12:33"), + (2,1,"8802451173","nyc-high-temperature-august-27-2026","0xc2",1,"WeatherWhale","0x9e2b7f4a1c8d0e5b3f6a9c2e8b1d7f0a4c6e3b95","Will the high temperature in New York City exceed 30 degrees Celsius on August 27, 2026?","No","BUY",0.910000,140.000000,127.400000,0.885000,123.900000,"2026-08-27 23:59:00","2026-08-26 07:45:10"), + (1,1,"5563098821","lakers-vs-celtics-2026-10-14","0xc3",3,"SportsEdge Capital","0x6d1e9b4c7a2f5e8b0d3c6f9a2e5b8d1c4f7a0e63","Will the Los Angeles Lakers defeat the Boston Celtics on October 14, 2026?","Yes","BUY",0.620000,310.000000,192.200000,0.548000,169.880000,"2026-10-14 23:00:00","2026-08-25 20:03:57"); +SET NAMES utf8mb4; +INSERT INTO core_trade_log (Id,ModuleName,AccountId,IsDemo,TokenId,MarketQuestion,Outcome,Side,EntryPrice,ExitPrice,Size,RealizedPnl,PnlPercent,OpenedAt,ClosedAt,ExitReason,SignalId) VALUES + ("t-0001","CopyTrading",1,1,"7194532001","Will Bitcoin close above 150,000 USD on August 31, 2026?","Yes","BUY",0.780000,0.940000,180.000000,28.800000,20.510000,"2026-08-25 10:02:11","2026-08-26 14:51:02","Master closed","sig-8814"), + ("t-0002","CopyTrading",1,1,"7194532002","Will the high temperature in Chicago exceed 28 degrees Celsius on August 25, 2026?","No","BUY",0.930000,1.000000,240.000000,16.800000,7.520000,"2026-08-24 06:30:00","2026-08-25 23:59:00","Resolution","sig-8815"), + ("t-0003","ResolutionFarming",2,1,"7194532003","Will Emmanuel Macron remain President of France through September 2026?","Yes","BUY",0.970000,1.000000,500.000000,15.000000,3.090000,"2026-08-20 11:15:45","2026-08-26 12:00:00","Resolution","rf-0031"), + ("t-0004","CopyTrading",2,1,"7194532004","Will the New York Yankees win the World Series in 2026?","No","BUY",0.640000,0.410000,150.000000,-34.500000,-35.930000,"2026-08-22 19:44:02","2026-08-26 09:12:30","Stop-Loss","sig-8820"), + ("t-0005","CopyTrading",1,1,"7194532005","Will OpenAI announce a new flagship model before October 2026?","Yes","BUY",0.550000,0.720000,120.000000,20.400000,30.900000,"2026-08-23 08:00:00","2026-08-26 16:22:14","Take-Profit","sig-8823"), + ("t-0006","ResolutionFarming",2,1,"7194532006","Will Germany qualify for the 2026 FIFA World Cup knockout stage?","Yes","BUY",0.960000,0.000000,300.000000,-288.000000,-100.000000,"2026-08-18 14:00:00","2026-08-24 22:30:00","Resolution (verloren)","rf-0028"), + ("t-0007","CopyTrading",1,1,"7194532007","Will the S&P 500 close above 7000 points on the last trading day of August 2026?","Yes","BUY",0.710000,0.830000,95.000000,11.400000,16.900000,"2026-08-26 09:30:00","2026-08-26 20:05:41","Master closed","sig-8831"); + +INSERT INTO rf_candidates (ScannedAt,AccountId,TokenId,MarketSlug,EventSlug,MarketQuestion,Outcome,Category,ClusterKey,Ask,FeeBps,NetEdgePct,Score,EndDate,Accepted,RejectReason) VALUES + ("2026-08-26 21:00:00",2,"9911002001","macron-president-through-september-2026","france-politics","Will Emmanuel Macron remain President of France through September 2026?","Yes","Politik","fr-macron",0.970000,0,2.140000,0.870000,"2026-09-30 23:59:00",1,""), + ("2026-08-26 21:00:00",2,"9911002002","nyc-temp-above-30-august-27","weather-nyc","Will the high temperature in New York City exceed 30 degrees Celsius on August 27, 2026?","No","Wetter","nyc-temp",0.940000,0,4.020000,0.910000,"2026-08-27 23:59:00",1,""), + ("2026-08-26 21:00:00",2,"9911002003","lakers-celtics-october-14","nba-2026","Will the Los Angeles Lakers defeat the Boston Celtics on October 14, 2026?","Yes","Sport","nba-lal-bos",0.620000,180,-1.230000,0.210000,"2026-10-14 23:00:00",0,"Netto-Edge unter MinEdge nach Fees"), + ("2026-08-26 21:00:00",2,"9911002004","fed-cut-rates-september-2026","us-economy","Will the Federal Reserve cut interest rates at the September 2026 FOMC meeting?","Yes","Wirtschaft","fed-sep",0.880000,100,0.940000,0.440000,"2026-09-17 18:00:00",0,"Score unter Schwelle"), + ("2026-08-26 21:00:00",2,"9911002005","btc-above-150k-august-31","crypto-btc","Will Bitcoin close above 150,000 USD on August 31, 2026?","Yes","Krypto","btc-150k",0.910000,180,-0.410000,0.180000,"2026-08-31 23:59:00",0,"Aufloesequelle subjektiv");