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 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
d2f3ec2bd0
commit
916c3e17a6
+52
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user