Commit Graph
227 Commits
Author SHA1 Message Date
Axel HocksandClaude Opus 4.8 2996eddd7e Auto-Signal-Entry + 15-Min-Regel (User-Wunsch, gegen die Messung, mit besten Params)
User will Auto-Eroeffnung bei Empfehlung trotz negativem Backtest -> gebaut,
Default AUS, mit den GEMESSEN besten Parametern statt geratenen:

Entry (_check_auto_signal, [trading] auto_signal=false):
- min_conf=75 + Nacht-Sperre = beste Kombi (H1 -0.053 mildester Verlust,
  H2 +0.141 bestes Netto). NICHT weil "mehr Konfidenz besser" -- conf_pct ist
  unkalibriert, 75 ist empirisch.
- Nur FLAT, 1x je Signal-Episode (Dedup, re-armt bei WARTEN/Flip), kein Nachkauf,
  kein Drehen einer Gegen-Position; erbt Circuit-Breaker + beide Cooldowns.
- Setup-Tag AUTOSIG_<dir> -> in der DB separierbar fuer B4-Monitor.
- Toggle POST /api/autosignal, Button "SIG" (bernstein = gemessen nicht tragfaehig),
  neustart-fest via runtime_state.json.

15-Min-Regel (_check_adverse15, adverse_15min_atr=0.5):
- Schwelle GEMESSEN kalibriert: "sobald im Minus" ist die SCHLECHTESTE Variante
  (WR 39->31%, Netto -0.067 vs +0.026 ohne); 0.5xATR ist die beste (H1 -0.111
  -> -0.079). Netto bringt die Regel ~nichts = Regime-Schutz.
- Nur BOT-eroeffnete Trades (_bot_open_ticket) -- manuelle Diskretion bleibt.
- 1x je Ticket geprueft, Startup-Grace respektiert, closed_by=adverse15.

Verifiziert: 18 synthetische Szenarien (9 Entry + 9 Adverse) alle korrekt;
Live-Neustart ohne Loop-Fehler, Toggle + Persistenz geprueft. v=119.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 14:01:14 +02:00
Axel HocksandClaude Opus 4.8 d40616fbeb backtest_auto_signal.py: Auto-Entry auf die Empfehlung gemessen -> VERWORFEN
User-Wunsch "Trades bei Empfehlung automatisch eroeffnen" -> erst gemessen (B2).

Methodik: echte _build-Logik (kein Nachbau), M30-/H1-Trend aus M5 aggregiert und
in _build gefuettert, sequentielle 1-Positions-Sim, Live-Exit (SL2,0/Trail1,5/
BE1,3/Time-Stop 120min), Echtkosten (Bar-Spread/ATR), 80k M5-Bars, 2 Halbjahre.

Ergebnis: ALLE 8 Varianten (Konf 55/65/70/75 x Nacht-Sperre) fallen durch.
  H1 durchgehend NEGATIV -0.076..-0.182 (PF 0.78-0.90)
  H2 durchgehend positiv +0.112..+0.167
  -> Regime-Kippen, n=718-1167 je Haelfte (keine Stichprobenfrage).

Kontroll-Beleg: der Squeeze laeuft durch DIESELBE Exit-/Kosten-Maschinerie und
ist in H1 +0.187/PF1.29 -> die Sim funktioniert, das Wave-Signal traegt in H1 nicht.
Deckt sich mit dem Live-Dry-Run (WR 29%/PF 0.64).

Nebenbefunde: hoehere Konfidenz hilft NICHT monoton (conf_pct nicht kalibriert);
Nacht-Sperre verbessert konsistent, reicht aber nicht; ein 6k-Vorlauf zeigte
faelschlich "traegt" (n=60-99 = Rauschen) -> kleine Stichprobe haette zum
Fehl-Einbau gefuehrt.

CLAUDE.md aktualisiert (14. verworfener Signal-Eingriff).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 13:45:35 +02:00
Axel HocksandClaude Opus 4.8 919ed7c3ee Trade-Leiste: Laufzeit-Uhr des offenen Trades (v=118)
- trader: open_time (echte Epoch, Broker-Offset korrigiert) aus position.time,
  im Snapshot; nur 1x je Position berechnet, beim Close auf 0.
- _broker_offset_s(sym=None): Symbol explizit uebergebbar -- beim Adoptieren ist
  self.symbol noch nicht gesetzt (war Offset 0 -> Zeit 3h in der Zukunft);
  zusaetzlich Selbstheilung bei Zukunftswerten.
- app.js/index.html/style.css: Feld #tb-dur + Titel-Uhr #tb-runtime, eigener
  1-s-Ticker (flüssig zwischen Snapshots), ab 2h bernstein (Time-Stop-Naehe).
- Verifiziert: Live-Trade 48898382 open_time == Log-Zeile 13:22:48.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 13:40:41 +02:00
Axel HocksandClaude Opus 4.8 e9653a842a Trailing neustart-fest: Zustand per-Ticket persistieren + bei Wiedererkennung reaktivieren
Problem: trail.enabled lebte nur im Speicher -> nach jedem restart_server.bat war
das Trailing aus, die (auch per Auto-Squeeze eroeffnete) Position lief nur mit dem
Broker-SL (kein Breakeven/Time-Stop). Die magic-match-Wiedererkennung reaktivierte
es nie; der User musste es manuell einschalten (real 2026-07-29).

Fix:
- emergency_state.json persistiert zusaetzlich "trail" (=trail.enabled) per-Ticket.
- _check_auto_close-Restore-Zweig: erkannte Position + trail war AN -> trail.toggle,
  Log "Trailing wiederhergestellt ... nach Neustart". War es AUS (manuelles SL/TP),
  bleibt es aus (persistierter Zustand entscheidet, kein TP-Ueberschreiben).
- Change-Detection im _pos_loop persistiert bei jeder Aenderung (auch Selbst-
  Deaktivierung bei manueller SL/TP-Erkennung), nur bei Aenderung -> kein I/O je Tick.

Verifiziert: Live-Position 48763789 nach Deploy-Neustart automatisch mit Trailing
wiederhergestellt (Log + Snapshot trail.enabled=True). Keine Loop-Fehler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-29 20:24:18 +02:00
Axel HocksandClaude Opus 4.8 c15aa36d46 Auto-Squeeze Log-Attribution: autonome vs. manuelle Orders korrekt kennzeichnen
- _open(fn, want, source="manuell"); Auto-Squeeze ruft open_long/short
  (source="auto_squeeze"). Vorher log JEDER Order gegen die Empfehlung
  "vom User bestaetigt" -- auch autonome Squeeze-Entries.
- CLAUDE.md aktualisiert.

Geprueft (Auto-Squeeze-Logik gegen Vergangenheitsdaten):
- Mechanik-Edge lebt: B4-Monitor 107 Setups/30T oR +0.20 PF 1.33 (Band
  0.14-0.23, ontrack); 2-Halbjahre-Backtest Box<=2.5xATR H1 +0.187/PF1.29,
  H2 +0.374/PF1.56 -- schlaegt ungefilterten Ausbruch in beiden Haelften.
- Live 25 Trades -87 EUR: 90% des Verlusts aus 12 Nacht-Trades (-79 EUR,
  alle PRE-Guard 24.07.); Tag ~breakeven (-8 EUR). Params = validiert.
- Post-Guard 0 Nacht-Trades; Rest-Leckage = -3-EUR-Vertipper-Kaskade 27.07.
  (jetzt durch emergency_min_eur + Wiedereinstiegs-Cooldown behoben).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-29 20:02:11 +02:00
Axel HocksandClaude Opus 4.8 20a3001e35 Gewinn-Close + Notfall-Stop: leer beim Öffnen (sr_close_min_gain_pct 3.0->0)
- ini sr_close_min_gain_pct 3.0 -> 0: beim Öffnen wird kein Gewinn-Close mehr
  automatisch armiert (User-Wunsch). Auto-Notfall-Stop war bereits aus (alle
  auto_emergency_* = 0).
- Live-State + runtime_state.json/emergency_state.json genullt (Erb-Falle);
  Server neu gestartet, damit pct=0 geladen ist und kein Re-Arm mehr feuert.
- CLAUDE.md aktualisiert (Neustart-Hinweis beim 0-Stellen dokumentiert).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-29 12:09:04 +02:00
Axel HocksandClaude Opus 4.8 9f34180bc1 Auto-Squeeze: Wiedereinstiegs-Sperre nach jedem Close + Margin 95%
- Nach Notfall/SL/Time-Stop/manuellem Close eröffnet der Auto-Squeeze ~3 min
  nicht in gleicher Richtung wieder (_SQUEEZE_REENTRY_COOLDOWN_S=180). Verhindert
  die Open->Instant-Close-Kaskade bei zu engem Stop (real 27.07. -3-EUR-Stop killte
  Entry #1 in 16s, Squeeze noch aktiv -> sofort Re-Entry #2).
- _check_auto_close erfasst Flat-Uebergang (_pos_close_ts/_pos_close_dir via
  _open_pos_dir); Squeeze-Entry-Pfad prueft ihn nach dem S/R-Cooldown.
- margin_buffer_pct 80 -> 95 (User-Vorgabe)
- CLAUDE.md aktualisiert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-28 10:07:27 +02:00
Axel HocksandClaude Opus 4.8 ae6bbb2f35 Chartmuster grafisch: SVG-Skizze in Karte + Trigger/Ziel-Linien im PWA-Chart
- patterns.py: nur AKTIVE, kursnahe Muster (abgearbeitete/Ziel erreicht raus,
  _MAX_DIST_ATR=5.0 Distanz-Filter)
- get_bars liefert bei M30 die Muster (patterns.snapshot) fürs Chart-Overlay
- app.js: _patternSvg-Skizze je Muster-Karte + 2 stärkste Muster als
  Trigger-/Ziel-Preislinien im M30-Chart; Gitternetz dezenter (#10151c)
- style.css: .pt-svg; index.html v=116->117; CLAUDE.md aktualisiert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 19:13:47 +02:00
Axel HocksandClaude Opus 4.8 21d855b163 Chartmuster im MT5-Terminal zeichnen (Datei-Bridge + SR_Levels.mq5 v1.11)
Engine schreibt die top-2 erkannten Muster als PT;name;dir;trigger;target;status
in sr_levels.csv; SR_Levels.mq5 zeichnet Trigger-/Nackenlinie (rot=bear/gruen=bull,
kraeftig) + gepunktete Ziel-Linie + Label. Reine Anzeige. Indikator nach Update
mit F7 neu kompilieren.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 18:59:25 +02:00
Axel HocksandClaude Opus 4.8 9dc26ad48f backtest_patterns.py + Circuit Breaker aus (User)
- backtest_patterns.py: misst die Chartmuster (echte patterns.py-Logik), 2 Halbjahre.
  Befund: ØR sieht positiv aus, aber Ziel-Trefferquote nur 13-38% → positiver R ist
  Trailing-Exit-Artefakt (Breakout+Trailing), KEIN Muster-Edge. Deckt sich mit
  backtest_doubletop (Ziel-Exit=negativ). Muster bleiben reine Anzeige; Kontrolle
  (generischer Breakout) fehlt noch fuer sauberen Beleg.
- daily_loss_limit_pct=0 (Circuit Breaker auf User-Wunsch wieder deaktiviert).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 18:55:48 +02:00
Axel HocksandClaude Opus 4.8 e5589da08b Neues Modul: Visuelle Chartmuster-Erkennung (core/patterns.py) — reine Anzeige
Erkennt aus M30-Swing-Pivots: Doppeltop/-boden, Kopf-Schulter/inverse SKS,
Tasse+Henkel/invers, auf-/absteigendes+symmetrisches Dreieck. Je Muster Richtung,
Trigger/Nackenlinie, Measured-Move-Ziel, Status (bildet sich/bestätigt/ungültig),
Güte. Dashboard-Karte #card-patterns + Disclaimer (v=116). KEIN Signal, kein
Verdict-Gewicht — Signal-Einfluss erst nach Backtest (Muster-Klasse 2x verworfen,
hohe Beweislast). Live getestet: findet bestätigten Doppeltop.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 18:49:40 +02:00
Axel HocksandClaude Opus 4.8 cd8ee5b01b Circuit Breaker: Tagesverlust-Stopp (daily_loss_limit_pct=8) — Überlebens-Basis
User-Ziel autonomes Handeln → Notbremse im Code (vorher abgelehnt, reaktiviert).
Erreicht der Tages-P&L (realisiert+offen) -8% der Balance, schließt der Bot die
Position und sperrt neue Auto-Trades bis zum naechsten Tag. _check_circuit_breaker
im _pos_loop (Startup-Grace, ~30s realized-cache, Berlin-Datum-Reset), blockt
Auto-Squeeze, Snapshot + roter Frontend-Banner (v=115). 80%-Margin bleibt (User).
Mit 5 Szenarien getestet.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 17:39:55 +02:00
Axel HocksandClaude Opus 4.8 873b67a521 Vertipper-Schutz für Notfall-Stop: Minimum-Floor (emergency_min_eur=3)
Ein manuell gesetzter Notfall-Stop unter dem Minimum wird als "aus" behandelt.
Root-Cause (2026-07-27): User setzte versehentlich -1 €; der Wert lag unter dem
Spread UND vererbte sich per _emergency_remember auf alle Folge-Trades → jeder
neue Trade wurde in Sekunden per Notfall-Close geschlossen ("sofort geschlossen").
Guard in set_emergency, mit 6 Werten getestet. Live-Notfall-Stop zusätzlich auf
0 geräumt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 14:36:27 +02:00
Axel HocksandClaude Opus 4.8 c3295c6a82 Entry-Raum-Gate zurück auf 0,6 (User: zu viel WARTEN)
Am selben Tag von 1,0 auf 0,6 zurück — gemischtes Regime (M15/M30 ab, M5/H1
auf) erzeugte gefühlt zu viele WARTEN-Phasen. 0,6 vs 1,0 = Frequenz-gegen-Edge,
gemessen 1,0 netto besser; User priorisiert Frequenz.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 22:21:59 +02:00
Axel HocksandClaude Opus 4.8 d61c4a3634 Gesamtempfehlung-Paket: 2 Rollouts, 3 Anzeige-Features, 2 Messungen (v=114)
- Entry-Raum-Gate 0,6→1,0 (Messung lag vor: beide Hälften besser)
- Konfidenz-Kalibrierung gemessen (analyze_verdict_calibration.py): conf
  INVERTIERT zwischen Regimen → keine P(Erfolg)-Aufwertung, kein Konf-Sizing
- verdict_votes-Logging (1×/min) für spätere Copilot/Elliott-Entscheidung
- Order-Dialog zeigt eigenen Ausrichtungs-Split (36/40 Trades ohne Signal: −423€)
- Live-Kosten-Chip (Spread/ATR) im Verdict
- P(break)×Entry-Raum-Freigabe gemessen VERWORFEN (Flip in jeder Schwelle,
  backtest_entryroom_pbreak.py) — 13. verworfener Signal-Eingriff
- News-Konflikt-Chip + recommendations.news_score wieder befüllt

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 20:57:56 +02:00
Axel HocksandClaude Opus 4.8 c3c6a8ce5f Gewinn-Close-Automatik wieder AN: 3% Margin beim Öffnen
sr_close_min_gain_pct=3.0 (User-Vorgabe; Notfall-Stop-Automatik bleibt aus).
Retry-sichere Armierung unverändert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 20:21:17 +02:00
Axel HocksandClaude Opus 4.8 0700baa5aa S/R-Close-Schwelle sr_close_pbreak 0,60 → 0,55 (User-Wunsch)
Liegt im validierten Optimum-Plateau 0,50–0,60 (backtest_srclose_prob.py);
Hysterese-Zone verschiebt sich auf 50/60.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 20:17:45 +02:00
Axel HocksandClaude Opus 4.8 30f08842d2 Gegen-Squeeze-Exit unter Vola-Regimen re-getestet: erneut verworfen
backtest_squeeze_exit_vol.py: echte Squeeze-Entries, 4 Exit-Varianten,
ATR-Terzil-Split + letzte 30 Tage. Effekt ~0 (±0,005 R/Trade), Vorzeichen
kippt zwischen Regimen, Worst-Case in allen Varianten identisch (SL greift
bei echten Brüchen zuerst). 3. Messung derselben Idee, gleiche Antwort —
Live-Exit bleibt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 20:10:54 +02:00
Axel HocksandClaude Opus 4.8 c1994b369a Nacht-Guard für Auto-Squeeze wieder AN (0–7 Uhr keine Trades)
auto_squeeze_skip_night=true (User-Vorgabe): der Bot öffnet nachts keine
autonomen Squeeze-Trades mehr — löst „muss automatisch schließen wenn ich
nicht da bin" durch Nicht-Öffnen, und ist gemessen ohnehin unrentabel
(Nacht-Spread/ATR 0,32–0,50, beide Halbjahre negativ). Tagsüber bleibt der
Auto-Close-Stack (Broker-SL + Trailing + Time-Stop + S/R-Close).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 20:03:13 +02:00
Axel HocksandClaude Opus 4.8 be054f3741 Squeeze × S/R-Close geprüft: Wash, keine Änderung
backtest_squeeze_srclose.py: S/R-Auto-Close auf Squeeze-Trades vs. reiner
Trailing-Exit ist ein Nullsummen-Wash (H1 +7R, H2 −12R) — der P(break)-Gate
lässt echte Runner (P≥60%) laufen, PF/Tail bleiben erhalten. Kein Ausschluss
der Squeeze-Trades vom S/R-Close nötig.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 19:32:31 +02:00
Axel HocksandClaude Opus 4.8 bfe3c4206c G/V im Header extra-fett (weight 800, analog Gesamtempfehlung, v=113)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 18:46:39 +02:00
Axel HocksandClaude Opus 4.8 d9eafe32f7 Gewinn-Close & Notfall-Stop nicht mehr beim Öffnen setzen
sr_close_min_gain_pct und auto_emergency_margin_pct auf 0 (User-Vorgabe): beim
Eröffnen einer Position wird nichts mehr automatisch armiert, nur manuell im UI
gesetzte Werte greifen. Mechanik bleibt im Code (reaktivierbar via ini).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 17:56:49 +02:00
Axel HocksandClaude Opus 4.8 4bc7679ba3 Übersehene font:-Shorthands mitvergrößert (v=112)
Die drei `font:<weight> Npx/…`-Shorthands (.ms-chip/.ms-bos-lbl/.sqm-badge) waren
bei den beiden +2px-Runden ausgelassen worden (Skript erfasste nur `font-size`);
jetzt +4px nachgezogen → wirklich ALLE Schriftgrößen einheitlich +4px.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 17:50:24 +02:00
Axel HocksandClaude Opus 4.8 25a0c6c826 Schriftgrößen nochmal +2px (v=111, gesamt +4px)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 17:47:47 +02:00
Axel HocksandClaude Opus 4.8 03ef1c75e6 Schriftgrößen global +2px (v=110)
Alle font-size in style.css (Body-Basis 14→16px) und die Chart-fontSize in app.js
um 2px erhöht (User-Vorgabe „alle Schriftarten +2pt").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 17:45:26 +02:00
Axel HocksandClaude Opus 4.8 027995d1e7 Gegen-/Stop-Seiten-Anzeige P(Durchbruch) (stop_approach, v=109)
Zeigt die Durchbruchwahrscheinlichkeit fuer das Level, dem sich der Kurs auf der
Gegen-/Stop-Seite der offenen Position naehert (LONG->Support darunter,
SHORT->Resistance darueber) — reine Anzeige, kein Auto-Close. Vorher per
backtest_pbreak_calibration.py belegt: Modell haelt auf der Gegen-Seite
out-of-sample (AUC 0,68/0,72 in beiden Haelften), niedriger P-Bereich kalibriert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 16:19:39 +02:00
Axel HocksandClaude Opus 4.8 75d28827e8 Initial commit: Oil Trading Bot (MT5, WTI)
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>
2026-07-24 08:29:23 +02:00