Commit Graph
19 Commits
Author SHA1 Message Date
Axel HocksandClaude Opus 4.8 7f2285ddb3 MT5-Chart: echte Liquiditaets-Waende statt Chartmuster-Linien (Indikator v1.12)
User-Wunsch: "zeichne mir die liquiditaetslinien in den mt5 ein. entferne die
chartmuster linien aus dem mt5".

- core/hl_walls.py: holt GET /api/walls vom HL-Dashboard (groesstes L2-Level je
  Seite, basis-korrigiert auf CFD-Niveau). Fail-safe: HL aus -> keine Linien, kein
  Fehler; Cache 10s, Daten >60s alt werden verworfen, Log nur 1x.
- engine._write_levels_file: PT-Zeilen raus, LQ;<B|A>;preis;size rein.
- SR_Levels.mq5 v1.12: PT-Handler entfernt, LQ-Handler (dick gestrichelt +
  Groessen-Label), InpShowWalls/InpWallBidColor/InpWallAskColor. Kompiliert.
- config: export_hl_walls=true, hl_walls_url.

Zwei Fallen dokumentiert: (1) Basis-Differenz HL vs CFD ~0,45$ -- ungerechnet laegen
die Linien falsch. (2) 127.0.0.1 statt localhost (IPv6 -> 2066ms statt 19-46ms, lief
in den 2s-Timeout).

Verifiziert: LQ-Zeilen erscheinen in sr_levels.csv (B 83.619/3120, A 83.665/1721),
plausibel zwischen R 83.721 und S 83.516.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 15:16:19 +02:00
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 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 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 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 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 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