From 916c3e17a6ad4a3a5087ce8b6d7283c28105dd25 Mon Sep 17 00:00:00 2001 From: Richard Date: Sat, 11 Jul 2026 14:52:39 +0200 Subject: [PATCH] Add trait filter spec and possible_insider detection to FIXPLAN Teil D - Trait filtering is now a binding requirement: trait query parameter on GET /api/traders (EXISTS-based), GET /api/traits with counts, dropdown plus clickable chips in the UI. - New trait possible_insider (D2b): detection via market-surprise likelihood under market prices (won longshots count, won favorites do not), with base filters (rare, large stakes, resolution farmers excluded) and a v2 roadmap (buys-before-news timing, one-shot wallets, topic concentration, urgency/slippage, niche markets). Co-Authored-By: Claude Fable 5 --- FIXPLAN-2026-07-09.md | 53 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/FIXPLAN-2026-07-09.md b/FIXPLAN-2026-07-09.md index deaa253..4dfe03e 100644 --- a/FIXPLAN-2026-07-09.md +++ b/FIXPLAN-2026-07-09.md @@ -362,15 +362,66 @@ zukünftiges Pruning ist damit verlustfrei im Sinne der PnL-Summen. | `holds_to_resolution` | > 70 % der aufgelösten Positionen ohne vorherigen Sell | | `fresh_wallet` | erster Trade < 30 Tage (Value = Alter in Tagen) | | `stable_stake_fraction` | CV von Amount/EstimatedBankroll < 0,5 (nur bei Bankroll > 0) | +| `possible_insider` | siehe D2b — statistische Überraschung der Ergebnisse unter Marktpreisen | - Schwellwerte als Konstanten im Calculator (v1 hart kodiert ist ok). - API/UI: `TraderDto`/`TraderDetailDto` um `Traits` (string-Liste) erweitern; Detailseite zeigt Chips - unter dem Strategy-Feld; Traders-Liste bekommt einen Trait-Filter. + unter dem Strategy-Feld. +- **Trait-Filter & -Suche (verbindlich, nicht optional):** + - `GET /api/traders` bekommt einen `trait`-Query-Parameter (mehrfach angebbar = UND-Verknüpfung), + serverseitig als `EXISTS`-Filter auf `TraderTraits` — nicht im Speicher filtern. + - Neuer Endpoint `GET /api/traits`: alle vorhandenen Traits mit Trader-Anzahl (für das Dropdown). + - Traders-Liste: Trait-Dropdown neben dem Platform-Filter, aktive Filter als entfernbare Chips. + - Die Trait-Chips auf der Detailseite sind klickbar und springen in die entsprechend gefilterte Liste. - KI-Integration: `AiStrategyAnalysisService`-Prompt bekommt die Merkmalsliste; Trade-Beispiele von 50 auf 15 repräsentative reduzieren (5 größte, 5 jüngste, 5 zufällige) — die KI verifiziert Hypothesen statt zu raten. - **Tests:** pure-Function-Tests je Trait, mindestens Positiv- UND Negativfall für `resolution_farming`, `sub_second_cadence`, `uniform_sizes`, `both_sides_same_market`. +### D2b. Trait `possible_insider` — Insider-Verdacht erkennen (ergänzt 2026-07-11) + +**Kernidee (wichtig, nicht vereinfachen):** Hohe Winrate allein ist KEIN Insider-Signal — die haben auch +Resolution-Farmer (Einstieg ≥ 0,90) und Glückspilze. Verdächtig ist, wenn die Ergebnisse unter der Annahme +„der Marktpreis war korrekt" statistisch unplausibel sind: **gewonnene Longshots zählen, gewonnene Favoriten +nicht.** Ein Trader, der fünfmal bei 0,15 kauft und fünfmal gewinnt, hat unter Marktpreisen eine +Wahrscheinlichkeit von 0,15^5 ≈ 0,00008 — DAS ist der Fingerabdruck. + +**v1 (aus vorhandenen Daten, im `TraderTraitCalculator`):** +Grundfilter (alle müssen erfüllt sein): +- 5 ≤ abgeschlossene Märkte ≤ 100 (seltene Wetter, keine Vieltrader), +- Ø-Einsatz ≥ 500 USD **oder** ≥ 10 % der `EstimatedBankroll`, +- Trade-Frequenz < 5/Tag, +- Trait `resolution_farming` NICHT gesetzt (Ausschluss der harmlosen 95%-Winrate-Klasse). + +Kernmetrik „Markt-Überraschung": über alle abgeschlossenen Märkte des Traders, mit p = Einstiegs-VWAP des +gehandelten Outcomes: +``` +L = Π p(gewonnene Märkte) × Π (1 − p)(verlorene Märkte) +Value = −log10(L) +``` +Trait vergeben, wenn: WinRate ≥ 85 % UND mittlerer Einstiegs-VWAP der GEWONNENEN Märkte ≤ 0,70 UND +Value ≥ 3 (d. h. L ≤ 1:1000 unter Marktpreisen). `Value` dient als Ranking („wie verdächtig") in der +gefilterten Liste — absteigend sortieren. + +**v2 (späterer Ausbau, wenn Enrichment-Daten breiter vorliegen):** +- **Kauft VOR der News, nicht danach:** Anteil der Buys, nach denen der Preis binnen 24–48 h ≥ 15 ct in + Trader-Richtung lief, während er VOR dem Kauf flach war (`PreTradePrice1m` ≈ Einstieg). Das trennt Insider + von News-Snipern, die erst nach der Bewegung einsteigen. +- **Einweg-Wallet:** erster Trade < 30 Tage, ≤ 3 Märkte insgesamt, nach dem Gewinn inaktiv + (Kombination mit `fresh_wallet`). +- **Themen-Konzentration:** ≥ 80 % des Volumens in einem einzigen Event oder engen Themencluster. +- **Zeitkritische Aggressivität:** hoher Taker-Anteil + hohe akzeptierte Slippage (wer weiß, dass morgen die + News kommt, kauft das Orderbuch leer statt zu limiten). +- **Nischenmärkte:** Einsatz groß relativ zu Marktliquidität/-volumen zum Kaufzeitpunkt. + +**Produkt-Hinweis (Ausblick, nicht Teil dieses Auftrags):** `possible_insider`-Wallets + Watchlist + Alert +bei neuem Trade (der `AlertService` existiert) ergibt einen „Insider-Follow-Feed" — für Copytrading sind +diese Konten die wertvollsten Signalgeber überhaupt, auch wenn sie selten handeln. + +**Tests:** Positivfall (5 gewonnene Longshots à 0,15, hohe Einsätze → Trait mit Value ≈ 4,1), Negativfälle: +Resolution-Farmer (Winrate 95 %, Einstiege 0,95 → KEIN Trait), Vieltrader mit 90 % Winrate (Frequenzfilter), +Kleinwetter (Einsatzfilter). + ### D3. Trader-Tiering (`IngestMode`) — Umgang mit Ultra-HF-Tradern (RN1, Swisstony) **Hintergrund:** Ultra-HF-Trader werden heute schon NICHT vollständig erfasst (PollingWorker: 100 Trades/60 s