Stufe 1: voller Entscheidungskontext beim Einstieg + Karte "Manuelle Trades"
Frage: kann der Bot aus den manuellen Trades lernen? Vorpruefung: noch NICHT.
1) Die entscheidenden Merkmale wurden nie gespeichert - beim Einstieg nur 5
Felder, davon ai_sentiment in 1,4 % und news_score in 34 % befuellt.
2) Das naive Lernziel ("wann steigt er ein") braucht unbeschriftete Negative;
brauchbar ist nur "welche Einstiege liefen gut" (Labels ueber P&L).
3) Die scheinbaren Muster sind Einzeltage: Stunde 13:00 zeigt +478 EUR ueber
n=69, davon +382 EUR (80 %) aus den fuenf Trades des 04.08.
Gebaut wurde Stufe 1 - reine Telemetrie, kein Verhalten:
- trades um 16 ctx_*-Spalten erweitert (DB-Backup .bak-2026-08-04, 1.148 Zeilen
unveraendert): p_break_target/-stop, dist_res_atr/dist_sup_atr, structure,
squeeze, htf_trend/h1_trend, spread_atr, session, block_reason, conf_pct,
atr_m5, bias, cone_pos, hour
- log_trade_open haengt die Spalten dynamisch an und ignoriert unbekannte
Schluessel -> aeltere DB ohne Migration laeuft weiter (fail-open)
- Kette: engine._run_analysis -> trader.set_open_context(ctx=) -> log_trade_open
Fallstrick beim Bau: wave_snap existiert in _run_analysis NICHT (nur in
snapshot()). Der erste Entwurf haette einen NameError erzeugt, den das umgebende
except still geschluckt haette - der Kontext waere dauerhaft leer geblieben ohne
dass es auffaellt. Jetzt self.wave.snapshot(); vd zusaetzlich per locals()-Guard.
Verifiziert auf einer DB-KOPIE: alle 16 Spalten korrekt geschrieben, unbekannter
Schluessel ignoriert, Basisfelder unberuehrt. Snapshot liefert manual_stats.
Dashboard-Karte "Manuelle Trades" (#card-manual, v=134): heute / 30 Tage /
gesamt / Bot-Vergleich plus Split mit vs ohne Signal-Deckung. Backend
history.manual_stats(30) mit ~120-s-Cache wie _alignment_cached. Bewusst neutral
gefaerbt und deskriptiv; eine Reifegrad-Zeile nennt die ctx-Abdeckung (heute
0 %), damit die Karte nicht ueberschaetzt wird.
Stufe 2 NICHT gebaut: erst bei ausreichender ctx-Abdeckung messen, was Gewinner
von Verlierern unterscheidet (Fit H1, validiert H2, AUC + Kalibrierung). Ergebnis
waere ein Hinweis im Order-Dialog, ausdruecklich KEIN Auto-Entry.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7432be0e8c
commit
da7d8f5b90
@@ -2503,7 +2503,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
Signal → **Hinweis-Dialog „trotzdem eröffnen?"** (überschreibbar). CLOSE bei
|
||||
**negativem** P&L → Sicherheitsabfrage; im Plus/Breakeven direkt. Sonst keine
|
||||
Token-Dialoge (`require_token=false`). Audio braucht 1× Nutzer-Tap.
|
||||
- Asset-Version aktuell **v=133** (in `web/index.html` hochzählen, siehe Workflows).
|
||||
- Asset-Version aktuell **v=134** (in `web/index.html` hochzählen, siehe Workflows).
|
||||
Schriftgrößen 2026-07-24 global **+4px** (2× je +2px auf User-Wunsch; Body-Basis
|
||||
14→18px). ⚠ Betrifft in `style.css` sowohl `font-size:Npx` (71×) ALS AUCH die
|
||||
`font:<weight> Npx/…`-**Shorthand** (3×: `.ms-chip`/`.ms-bos-lbl`/`.sqm-badge` —
|
||||
@@ -3027,6 +3027,60 @@ PF>1 in BEIDEN Hälften, Nachbarparameter müssen mithalten).
|
||||
Begründung gegen wöchentliche Läufe (Mehrfachvergleich, ~47 Fehlalarme/Jahr)
|
||||
steht unverändert. Anlass war hier die *einmalige* Signaländerung.
|
||||
|
||||
## Modul „Manuelle Trades" + voller Entscheidungskontext (Stufe 1, 2026-08-04)
|
||||
|
||||
**User-Frage:** „Kann der Bot aus meinen manuellen Trades lernen — evtl. ein neues
|
||||
Modul?" Auslöser: am 04.08. machten 18 manuelle Trades **+728 €**, der Bot −16,53 €,
|
||||
bei 93 % WARTEN.
|
||||
|
||||
⚠ **Die exploratorische Vorprüfung ergab: noch NICHT lernbar** — und zwar aus drei
|
||||
Gründen, die alle benannt gehören:
|
||||
1. **Die entscheidenden Merkmale wurden nie gespeichert.** Beim Einstieg schrieb der
|
||||
Bot 5 Felder; davon war `ai_sentiment` in **1,4 %** und `news_score` in **34 %** der
|
||||
Trades befüllt. Die Marktlage eines manuellen Einstiegs war damit nicht
|
||||
rekonstruierbar.
|
||||
2. **Das naive Lernziel ist untauglich.** „Wann steigt er ein" bräuchte Gegenbeispiele
|
||||
(Bars ohne Einstieg) — Millionen unbeschriftete Negative, und „nicht eingestiegen"
|
||||
heißt nicht „hätte man nicht sollen". Die brauchbare Frage lautet: **welche seiner
|
||||
Einstiege liefen gut** (saubere Labels über P&L).
|
||||
3. **Die scheinbaren Muster sind Einzeltage.** Stunde 13:00 zeigt +478 € über n=69 —
|
||||
davon stammen **+382 € (80 %) aus den fünf Trades des 04.08.** Genau die Falle, an
|
||||
der ORB und die Dead-Hours gescheitert sind.
|
||||
|
||||
**Gebaut wurde deshalb Stufe 1 — Telemetrie, kein Verhalten:**
|
||||
`trades` um **16 `ctx_*`-Spalten** erweitert (DB-Backup `…bak-2026-08-04`, 1.148
|
||||
Zeilen unverändert): `p_break_target/-stop` · `dist_res_atr`/`dist_sup_atr` ·
|
||||
`structure` · `squeeze` · `htf_trend`/`h1_trend` · `spread_atr` · `session` ·
|
||||
`block_reason` · `conf_pct` · `atr_m5` · `bias` · `cone_pos` · `hour`. Alle Werte
|
||||
werden im Snapshot ohnehin berechnet und nur eingesammelt
|
||||
(`engine._run_analysis` → `trader.set_open_context(ctx=…)` → `history.log_trade_open`).
|
||||
`log_trade_open` hängt die Spalten **dynamisch** an und ignoriert unbekannte Schlüssel
|
||||
— eine ältere DB ohne Migration läuft weiter (fail-open).
|
||||
⚠ **Fallstrick beim Bau:** `wave_snap` existiert in `_run_analysis` NICHT (nur in
|
||||
`snapshot()`). Der erste Entwurf hätte einen `NameError` erzeugt, den das umgebende
|
||||
`except` still geschluckt hätte — der Kontext wäre dauerhaft leer geblieben, ohne dass
|
||||
es auffällt. Jetzt `self.wave.snapshot()`; `vd` zusätzlich per `locals()`-Guard
|
||||
abgesichert (es entsteht in einem eigenen `try`).
|
||||
Verifiziert auf einer DB-**Kopie**: alle 16 Spalten korrekt geschrieben, unbekannter
|
||||
Schlüssel ignoriert, Basisfelder unberührt.
|
||||
|
||||
**Dashboard-Karte „Manuelle Trades"** (`#card-manual`, v=134): heute / 30 Tage /
|
||||
gesamt / Bot-Vergleich, dazu der Split **mit vs. ohne Signal-Deckung**. Backend
|
||||
`history.manual_stats(30)` → `engine._manual_stats_cached()` (~120 s Cache, wie
|
||||
`_alignment_cached` — die Aggregation läuft über die ganze Tabelle und hat im
|
||||
1-s-Snapshot nichts zu suchen). Bewusst **neutral gefärbt** (keine Ampel) und
|
||||
ausdrücklich **deskriptiv**: die Karte zeigt eine Reifegrad-Zeile mit der
|
||||
`ctx`-Abdeckung (heute 0 %), damit niemand sie für aussagekräftiger hält, als sie ist.
|
||||
|
||||
**Stufe 2 (später, NICHT gebaut):** wenn genug `ctx`-Daten vorliegen (~2–3 Monate),
|
||||
messen was Gewinner von Verlierern unterscheidet — Fit auf H1, validiert auf H2, AUC
|
||||
und Kalibrierung berichtet, wie beim P(break)-Modell. Ergebnis wäre ein **Hinweis im
|
||||
Order-Dialog** („deine Trades in dieser Konstellation: X % WR, n=Y"), analog zum
|
||||
bestehenden Ausrichtungs-Split. ⚠ **Ausdrücklich KEIN Auto-Entry daraus** — 22
|
||||
Signal-Eingriffe sind gescheitert, und die gemessene Stärke des Users liegt in der
|
||||
AUSWAHL, nicht in einer Regel. Ein Modul, das ihm seine eigene Historie zur aktuellen
|
||||
Lage zeigt, spielt auf diese Stärke; eines das für ihn einsteigt, ersetzt sie.
|
||||
|
||||
## Backtest-Audit 2026-08-04 — rechnen die Skripte noch korrekt?
|
||||
|
||||
**Anlass:** User-Frage nach dem `angle=`-Fund in `backtest_auto_signal.py`. Prüfung
|
||||
|
||||
Reference in New Issue
Block a user