Headless FastAPI-Backend (server.py + core/engine.py) mit Mobile-PWA (web/), Strategie-/Backtest-Suite und Doku. Secrets, DB, Logs und Laufzeit-State sind via .gitignore ausgeschlossen; Config-Vorlage: oil_widget_config.ini.example. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2.9 KiB
Gesamtempfehlung (Verdict-Panel)
Grafischer Empfehlungsbereich ganz oben im Mobile-Dashboard (web/), der die
Module zu einer Aussage zusammenfasst.
Wer berechnet was
- Backend (
core/engine.py→_verdict) baut die Aggregation und legt sie alsverdictin den Snapshot (/api/snapshot,/ws). Eine Quelle der Wahrheit — das Frontend rendert nur. - Frontend (
web/app.js→renderVerdict) zeichnet Ring, Bias-Balken und Modul-Chips. Markup inweb/index.html(#card-verdict), Stil inweb/style.css(.vd-*).
Logik
Headline = die validierte Welle (wave_signal) — das einzige Modul mit per
Backtest belegtem Edge. Sie bestimmt LONG/SHORT/WARTEN und die Order-Freigabe.
Die übrigen Module bilden nur einen gewichteten Konsens (Anzeige, kein
Eingriff in die Order-Logik).
Votes je Modul: +1 LONG · −1 SHORT · 0 neutral. Gewichte:
| Modul | Gewicht | Quelle |
|---|---|---|
| Welle | 3,0 | wave_signal.signal (validierter Edge) |
| M30 | 1,5 | wave.htf_trend (EMA12/50 der M30 — exakt das Signal, das die Welle nutzt) |
| H1 | 1,5 | wave.h1_trend (EMA12/50 der H1) |
| KI-Copilot | 1,0 (nur mit Bias) | agent.advisory.bias — ohne advisory/Bias Gewicht 0 |
| Elliott/FVG | 1,0 (nur mit Ziel) | Richtung zum elliott.target — ohne Ziel Gewicht 0 |
| Squeeze | 2,0 (nur active) |
wave.squeeze — armed/keine Kompression Gewicht 0 |
(TradersUnion wurde 2026-07-06 aus dem Konsens entfernt — nur noch Anzeige.)
bias = Σ(gewicht · vote) / Σ(gewicht) → −1 … +1
⚠ Stimmberechtigt sind nur Module mit Aussage (Fix 2026-07-15): Module ohne anwendbares Signal (Squeeze ohne Ausbruch, Elliott ohne Ziel, KI aus) bekommen Gewicht 0 und stehen NICHT im Nenner — vorher dämpfte z. B. das fast immer neutrale Squeeze-Gewicht (2,0) die Nadel dauerhaft um ~×0,8 Richtung Mitte. „Flach" bei Welle/M30/H1 bleibt dagegen eine ECHTE Neutral-Stimme (mit Gewicht).
bias steuert die Nadel im Balken (−1 = ganz SHORT/links, +1 = ganz
LONG/rechts: left% = (bias+1)/2·100). agree/total = wie viele der anderen
stimmberechtigten Module (ohne die Welle selbst — die zählte sich bis 2026-07-15
mit) die Headline-Richtung teilen. Der Konfidenz-Ring zeigt wave.conf_pct
als conic-gradient in Richtungsfarbe.
⚠ Wichtig: Für M30/H1 werden die EMA12/50-Signale der Welle genutzt (
htf_trend/h1_trend), NICHT das Regressions-Winkelmaßmarket.angles— die beiden können sich widersprechen, das Panel muss zur Empfehlung passen.
Snapshot-Feld verdict
{
"headline": "SHORT", "conf": 90, "bias": -1.0, "agree": 3, "total": 3,
"votes": [{"name": "Welle", "vote": -1, "weight": 3.0, "detail": "SHORT · 90%"}, …]
}
Pflege
Neues Modul ins Panel → Vote/Gewicht in _verdict ergänzen; das Frontend rendert
votes generisch. Bei JS/CSS-Änderung Asset-Version v=N in index.html
hochzählen. Siehe CLAUDE.md.