Commit Graph
23 Commits
Author SHA1 Message Date
Axel HocksandClaude Opus 5 7427c36922 Hyperliquid-Kurs neben dem Broker-Kurs + G/V-Schaetzung bei geschlossenem Markt
User: "wenn Pepperstone closed ist trotzdem Kurs und Liquiditaet von
Hyperliquid einbinden" -> nachgeschaerft zu "blende den HL-Kurs NEBEN den
Pepperstone-Kurs ein" (ehrlicher als ein stiller Tausch) -> plus "bei
geschlossenem Markt auch den G/V mit HL berechnen".

Snapshot: hl_live {mid_mt5, hl_mid, basis, age_s, bid/ask, bid_sz/ask_sz,
imb5, trend, slope_per_h, vs_mt5} - IMMER befuellt. mid_mt5 = HL-Mid +
gemessene Basis, also direkt mit dem Broker-Kurs vergleichbar. Dazu
market_closed, tick_age_s, pnl_hl.
core/hl_walls.py liefert jetzt zusaetzlich hl_mid/mid_mt5/age_s.

Dashboard v=129: eigene Header-Box "HL" neben KURS mit Tooltip (Rohkurs,
Basis, Alter, Abweichung). Bei geschlossenem Markt: Label "KURS · ZU",
Session-Zeile "MARKT ZU", und das G/V wechselt auf die HL-Schaetzung, mit
"≈" markiert.

MT5 v1.34: HL;<mt5_aequiv>;<alter>;<bid>;<ask>;<U|D|-> -> bernsteinfarbenes
Label unter Kurs und G/V (InpShowHL/InpHLColor).

DREI SACKGASSEN dokumentiert, damit sie niemand wiederholt:
1) tick_local_ts ist die ABHOLZEIT, nicht das Tick-Alter.
2) tick_server_ts minus _broker_offset_s() ist ZIRKULAER - die
   Offset-Funktion leitet den Versatz selbst aus dem letzten Tick ab und
   misst bei geschlossenem Markt die Veraltung (-7,41 h statt +3 h); das
   Alter hebt sich auf (-347 s).
3) pnl / Kursbewegung als EUR-je-Punkt ergab 155 statt ~86, weil
   trader.pnl den Wochenend-Swap enthaelt.

Verwendet wird stattdessen: Markt zu = der Kurs hat sich seit 180 s nicht
BEWEGT (_last_bid/_last_bid_move_ts). Und der G/V nutzt die vorhandene,
korrekte trader.live_pnl(bid, ask) mit dem HL-Kurs +- halbem Spread.

Live verifiziert: market_closed=True nach 198 s, Broker 86.333 eingefroren,
HL 86.349 (7 s alt), Broker-P&L -15,02 -> HL-Schaetzung -14,37 EUR.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-01 09:31:01 +02:00
Axel HocksandClaude Opus 5 35f9b567c8 Pfeile: Konsens-Pfeil per Default aus - er erzeugte wieder einen Trichter (v1.33)
User: "trichter anstatt pfeil wird angezeigt". Der Kegel war korrekt raus
(keine CN-Zeile mehr in der CSV) - was zu sehen war, waren MEINE zwei
Pfeile:
    AR;L;85.233;85.110;63% Abprall     blau, nach UNTEN
    AR;K;85.233;85.479;Konsens +1.00   grau, nach OBEN
Beide starten am aktuellen Kurs und liefen auseinander - optisch exakt der
Kegel, den sie ersetzen sollten. Gefragt war EIN Pfeil, gebaut waren drei.

Behoben:
  InpShowConsensus per Default FALSE (der Konsens steht ohnehin als
  Bias-Nadel im Dashboard)
  InpArrBars 14 -> 8 (kuerzer, Pfeilspitze im sichtbaren Bereich)
Normalfall jetzt: EIN Pfeil (L, der kalibrierte). S kommt nur beim
Squeeze-Ausbruch dazu. InpShowConsensus=true holt K zurueck.

Lehre fuer die Doku: "sie messen Verschiedenes, also duerfen sie
auseinanderzeigen" ist logisch richtig und als BILD trotzdem falsch - zwei
Linien aus einem Ursprung liest niemand als zwei Aussagen.

v1.33 ins richtige Terminal kompiliert und dort gegengeprueft.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 22:01:32 +02:00
Axel HocksandClaude Opus 5 81614a3128 Richtungs-Pfeile im MT5 statt des Kegels (v1.32) + Handbuch-Muster ergaenzt
PFEILE (User: "anstatt des Trichters einen Pfeil, der die wahrscheinlichste
Kursentwicklung anzeigt"). Randbedingung: die FREIE Richtungsfrage ist
gemessen ein Muenzwurf (analyze_reversal.py, AUC 0,499-0,509 oos, in-sample
nur 0,52). Ein frei schwebender Prognose-Pfeil waere unbelegt - und
gefaehrlicher als der Kegel, weil er ueberzeugender aussieht. Deshalb DREI
Pfeile mit jeweils eigener, benannter Beleglage:
  L blau      naechstes Level, aus dem kalibrierten P(break)
              (AUC 0,65 oos, live 27 % vorhergesagt vs 28 % real)
  S neongruen Squeeze-Ausbruch - das EINZIGE validierte Richtungssignal
  K grau      Konsens der Module - NICHT kalibriert, heisst deshalb
              "Konsens" und nicht "Prognose"

L hat ein TOTBAND 45-55 %: dort waagerechter Pfeil "unentschieden", statt
aus einem Muenzwurf eine Richtung zu zeichnen.

MQL5 v1.32: OBJ_ARROWED_LINE + Label an der Spitze. Label heisst ALBL_* und
NICHT T* - sonst zieht RepositionLabels() es an den rechten Rand und loest
es von der Pfeilspitze.

Kegel bleibt im Code und in der Dashboard-Kachel; der Bot exportiert ihn nur
nicht mehr ins Chart ([trading] export_cone=false).

CHARTMUSTER: alle Handbuch-Muster ergaenzt - Dreifach-Top/-Boden, Flagge,
Wimpel, Rechteck, Steigender/Fallender Keil. ALLE mit measured=False, sie
tragen die Verdict-Stimme NICHT: das Gewicht 1,0 stammt aus einem
Kontrolltest, der nur die alten Typen abdeckte. engine._verdict waehlt jetzt
nur Muster mit measured=True.

Bug beim Bau gefunden: der fallende Keil feuerte in 20.000 Bars KEIN
EINZIGES MAL - die Bedingung stand auf dh > dl, bei einem fallenden Keil
faellt aber die OBERE Linie schneller (sonst konvergiert nichts). Beim
Spiegelbild (steigender Keil) stimmte es.

backtest_patterns_v2.py (NEU) misst die neuen Typen - mit dem ECHTEN
Detektor (core.patterns._detect statt einer Nachbildung) und dem
kanonischen Exit, plus Kontrollgruppe "generischer Swing-Bruch".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 19:26:11 +02:00
Axel HocksandClaude Opus 5 d9cb54a52c C: Wahrscheinlichkeits-Kegel (kalibriert) + Config-Waechter im Reminder
C - core/cone.py + Kachel #card-cone + MT5 v1.31 (CN;<min>;<lo>;<hi>):
"Erwartete Spanne" statt "Kursvorhersage". Der User wollte eingezeichnete
Verlaufspfade; bewusst NICHT gebaut - sie suggerieren eine Praezision, die
es nicht gibt (Lehre aus analyze_verdict_calibration.py). Der Kegel sagt
wie WEIT der Kurs in 30/60/120 min plausibel laeuft, nicht wohin.

analyze_cone.py: r(h)=(C[i+h]-C[i])/ATR[i], Fit auf H1, Abdeckung gemessen
auf H2 (echtes out-of-sample):
  80%-Band -> 76,7 / 76,6 / 75,3 %
  90%-Band -> 87,5 / 87,2 / 86,5 %
Konsistent ~3-5 Pp ZU ENG. Das wird NICHT weggefittet - Kachel und Tooltip
nennen die REAL gemessene Abdeckung, nicht den Nennwert. Damit nach dem
P(break)-Modell die zweite kalibriert geprueft Komponente im Projekt.

Zentriert auf den aktuellen Kurs, KEINE Drift addiert (Median +-0,0..0,16
xATR = klein gegen die Bandbreite; eine Drift-Korrektur waere eine
Richtungsaussage und die ist nicht belegt). Farbe neutral grau, kein
gruen/rot. Kein Signal, kein Verdict-Gewicht.

MQL5 v1.31: zwei sich oeffnende gepunktete Pfade, verkettet 30->60->120.
Startpunkt aus der PX-Zeile - die setzt g_conePx jetzt auch, wenn
InpShowPrice aus ist (sonst verliert der Faecher seinen Anker).

Config-Waechter in measurement_reminder.py (Antwort auf "sollten wir alle
verworfenen Backtests woechentlich neu rechnen?"): NEIN - eine Woche sind
~2000 Bars, und 18 Ideen x 52 Wochen = 936 Tests/Jahr erzeugen bei 5 %
Fehlalarmquote ~47 falsche "funktioniert jetzt!" pro Jahr. Stattdessen
EREIGNIS-gesteuert: CONFIG_DEPS verankert 8 config-abhaengige Messungen an
den Wert, gegen den sie validiert wurden (entry_room_atr 0,6 /
sr_close_pbreak 0,55 / breakout_k 0,3 / risk_pct 0 / margin_buffer_pct 95 /
adverse_15min_atr 0,5 / auto_signal_min_conf 75 / dead_hours leer). Weicht
einer ab, meldet der Timer welche Messung veraltet ist. Numerischer
Vergleich, damit 0.60 == 0.6. Mit 5 synthetischen Szenarien getestet.

Erledigt ausgetragen: Chartmuster-Kontrolltest (30.07., Muster schlagen die
Kontrolle in beiden Haelften +0,022/+0,108).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-31 08:25:29 +02:00
Axel HocksandClaude Opus 5 a6f370ac02 Wirtschaftskalender-Blackout + Konsolidierungs-Box beschriftet
core/econ_calendar.py (NEU): High-Impact-News-Fenster als Handels-Sperre.
Quelle Forex Factory JSON (kostenlos, kein Key, mit impact-Feld), beide
Wochen (thisweek endet Sa, Markt oeffnet So 23:00 -> sonst blinder Fleck),
1x/h im Daemon-Thread, dedupliziert. Filter: High+USD ODER Oil/OPEC-Titel.

WICHTIG - nicht gemessen: Events sind zu selten fuer eine 2-Stichproben-
Aussage. Das ist die Handbuch-Regel, kein belegter Edge. Deshalb bewusst
asymmetrisch: sperrt NUR die autonomen Entries (Auto-Squeeze + Auto-Signal,
ohne Dedup-Marker -> feuert nach dem Fenster nach), in der Entry-Checkliste
nur "warn" statt "fail". Manuelle Orders bleiben frei. Der gemessene
EIA-Blackout (Mi 15:30-16:30) bleibt unabhaengig aktiv und greift auch
ohne Netz.

Verifiziert: Live-Fetch (EIA korrekt Mi 16:30 Berlin, FOMC/GDP/PCE erkannt)
+ 4 synthetische Szenarien (5 min vor/nach Event, 50 min davor, disabled).

MQL5 v1.30: graue Konsolidierungs-Box beschriftet (User-Frage "was bedeutet
die graue Box") - sichtbares Label an der Oberkante, rechtsbuendig wie die
uebrigen: "Konsolidierung (10-Bar-Spanne)" bzw. bei Kompression
"Konsolidierung - komprimiert, Ausbruch steht bevor". 0 Fehler kompiliert.

Frontend v=122: #cal-note in der Meldungen-Karte (laufendes Fenster bzw.
Vorwarnung <=60 min).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 22:58:58 +02:00
Axel HocksandClaude Opus 4.8 11e13cdb5a MQL5 v1.29: Konsolidierungs-Box als Anzeige (CO;lo;hi;tight)
User: "schauen wir uns das mal an" (nach dem verworfenen Konsolidierungs-Backtest).

Der Bot exportiert die Spanne der letzten 10 M5-Bars -- exakt die Box, aus der der
validierte Squeeze-Ausbruch kommt (wave._squeeze_one liefert jetzt box_hi/box_lo in
allen Rueckgaben). Der Indikator zeichnet sie als transparentes blaues Rechteck;
ist sie KOMPRIMIERT (<=2.5xATR, also armed/active), wird sie mit doppelter Deckkraft
gezeichnet -> "Ausbruch steht bevor" ist auf einen Blick sichtbar.

Schalter: InpShowConsol / InpConsolColor / InpConsolAlpha / InpConsolBars.

⚠ REINE ANZEIGE. Alle Konsolidierungs-SETUPS sind gemessen verworfen
(backtest_consolidation.py: False Breakout, Distribution, Accumulation, Retest --
inkl. Kontrolltest, der die Distribution-Hypothese kippte). Die Box zeigt WO
gestaut wird, nicht WOHIN es geht. Validiert ist ausschliesslich der Ausbruch.

Verifiziert: CO;84.105;84.815;0 (0.710$ = 2.68xATR = knapp ueber der Schwelle,
daher korrekt als "nicht komprimiert" markiert).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 20:14:11 +02:00
Axel HocksandClaude Opus 4.8 2bda2680bb MQL5 v1.28: G/V der offenen Position unter dem Kurs
User-Wunsch. Der Bot exportiert PL;wert;waehrung, der Indikator zeigt es als
OBJ_LABEL direkt unter dem Kurs oben rechts (CORNER_RIGHT_UPPER, Y = Kurs-Y +
Schrifthoehe + Abstand), gruen im Plus / rot im Minus.

Wert ist NETTO wie im Dashboard: bei Gewinn abzueglich der WHT-Quellensteuer
([trading] wht_pct = 26.375), bei Verlust unveraendert (dort faellt keine an).
Ohne offene Position schickt der Bot keine PL-Zeile -> Redraw() raeumt das Label
per ObjectsDeleteAll(PFX) automatisch weg.

Verifiziert: PL;-20.59;EUR in sr_levels.csv, deckt sich mit dem Dashboard-Netto.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 19:20:49 +02:00
Axel HocksandClaude Opus 4.8 04ea6934ee MQL5 v1.27: S/R-Label zeigt nur die Prozentzahl
User: "entferne 'Durchbruch' bei S/R die Prozentzahl reicht mir".

  vorher: Widerstand 84.536  ·  Durchbruch 18%
  jetzt:  Widerstand 84.536  ·  18%

Der ausgeschriebene Hinweis bleibt im Tooltip der Linie erhalten.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 19:10:51 +02:00
Axel HocksandClaude Opus 4.8 770f994fd1 Timer-Erinnerung fuer alle ausstehenden Messungen + MQL5 v1.26
1) measurement_reminder.py + Task OilMeasurementReminder (taeglich 18:00):
   meldet per Popup, welche Messung genug Daten hat. Jeder Punkt mit PRUEFBARER
   Bedingung (Datenmenge/Datum), Meldung je Punkt 1x (Marker in .reminders/).
   Status: python measurement_reminder.py --status

   Direkt zwei FAELLIGE Punkte gefunden:
   - P(break)-Prognose-Genauigkeit: 2213 ausgewertete Vorhersagen (Schwelle 500),
     lag seit 2026-07-23 unbeachtet herum
   - Chartmuster-Kontrolltest (generischer Breakout): jederzeit machbar

   Noch sammelnd: verdict_votes 24%, AUTOSIG-Trades 0, M30-Level-Validierung 27%,
   M1-History 7%, News-Score 8%.

2) MQL5 v1.26: Beschriftungen UND Pfeile stehen jetzt ganz rechts am Chartrand,
   auf einer Linie mit dem Kurs-Label (User: "genau so angeordnet wie der aktuelle
   Kurs"). RightTime() rechnet das Ende des Shift-Bereichs aus
   (CHART_WIDTH_IN_BARS x InpShiftPct) statt fix 2 Kerzen hinter der letzten Bar.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 19:09:01 +02:00
Axel HocksandClaude Opus 4.8 b23a3d4e5c MQL5 v1.25: Durchbruchwahrscheinlichkeit an den S/R-Labels
User-Wunsch. Der Bot haengt P(break) als drittes CSV-Feld an (R;preis;pct /
S;preis;pct), der Indikator schreibt es ins Label:
  "Widerstand 84.536  ·  Durchbruch 34%"

Quelle = dasselbe kalibrierte Logit-Modell wie der S/R-Auto-Close, heute auf die
M30-Level nachtrainiert (AUC 0.72 out-of-sample, Kalibrierung geprueft).
Richtung: Widerstand = Bruch nach oben (+1), Support = nach unten (-1); Merkmale
identisch zu _sr_close_hint/_stop_approach_hint (M5-Momentum, EMA-Richtung,
Abstand/ATR). Abschaltbar via InpShowPBreak.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 19:01:23 +02:00
Axel HocksandClaude Opus 4.8 6238d6f12e MQL5 v1.24: Farb-Inputs umbenannt -- erzwingt die neuen Defaults
User: "die liquiditaetspfeile sind immer noch gold".

Ursache: MT5 speichert Input-Werte JE CHART-INSTANZ und ueberschreibt damit neue
Defaults -- auch nach einem Recompile. Die Pfeile blieben deshalb auf dem alten
Gold-Wert (v1.15-v1.22), obwohl der Code laengst neongruen/rot vorgab.

Loesung: die betroffenen Inputs umbenennen. MT5 findet dann keinen gespeicherten
Wert und uebernimmt den Default:
  InpWallBidColor  -> InpArrowUpColor    (neongruen #00FF7F)
  InpWallAskColor  -> InpArrowDownColor  (rot #FF4500)
  InpLiqTrendColor -> InpTrendLineColor  (neongruen)
  InpLiqZoneColor  -> InpZoneColor / InpLiqZoneAlpha -> InpZoneAlpha

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:56:43 +02:00
Axel HocksandClaude Opus 4.8 a58c6804ba MQL5 v1.23: Pfeile wieder gruen/rot, Beschriftungen weiss + rechtsbuendig-Fix
User-Vorgaben: Pfeile rot/gruen behalten, Beschriftungen komplett rechtsbuendig,
alle Beschriftungen weiss, Liquiditaets-Trendlinie neongruen wie der Up-Pfeil.

(a) Pfeile zurueck: Bid NEONGRUEN #00FF7F, Ask ROT #FF4500 (statt Gold).
(b) Liquiditaets-Trendlinie neongruen statt pink.
(c) FIX "nicht komplett rechtsbuendig": auf den Linien war OBJPROP_TEXT gesetzt --
    diesen Text zeichnet MT5 IMMER LINKS am Chartrand (Option
    "Objektbeschreibungen"). Jetzt OBJPROP_TOOLTIP + CHART_SHOW_OBJECT_DESCR=false.
    Betrifft S/R-Linien und Kanal.
(d) Alle Beschriftungen weiss (InpLabelColor) -- die Linien behalten ihre Farbe,
    nur der Text ist einheitlich. Kurs oben rechts ebenfalls weiss.
(e) MT5-Positions-Labels ("sell 0.36 ...") stehen systembedingt LINKS und lassen
    sich NICHT verschieben -- nur ab-/anschaltbar via InpShowTradeLevels.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:54:23 +02:00
Axel HocksandClaude Opus 4.8 73712b5ea7 Trade-Umrandungen entfernt + Darstellungsfehler behoben (MQL5 v1.22)
User: "entferne die umrandungen fuer trade open und close" + "das bild sieht
komiesch aus" (Screenshot).

(a) Trade-Umrandungen AUS: InpShowTrades=false UND Export im Bot abgeschaltet
    ([trading] export_trade_marks=false) -- spart auch die DB-Abfrage im
    5-s-Export-Takt. Code bleibt reaktivierbar.
(b) Liquiditaets-Trendlinie: RAY_RIGHT entfernt. Eine 60-min-Regression 100 Bars
    in die Zukunft zu verlaengern riss die Linie steil ins Bodenlose (im
    Screenshot deutlich zu sehen). Sie endet jetzt am aktuellen Rand.
(c) CHART_SHIFT_SIZE auf 12% begrenzt (InpShiftPct). Ohne Begrenzung war der
    Shift-Bereich so gross, dass der Kursverlauf links gequetscht stand.

Verifiziert: TR-Zeilen aus sr_levels.csv verschwunden, Rest unveraendert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:49:45 +02:00
Axel HocksandClaude Opus 4.8 e40e962db4 MQL5 v1.21: Beschriftungen rechtsbuendig + 4px groesser
User-Vorgaben: Beschriftung aller Linien rechtsbuendig, Schrift 4 Pixel groesser.

- Neue Hilfsfunktion RightTime() (rechter Chart-Rand im Shift-Bereich); die
  S/R-Labels werden dort erzeugt UND von RepositionLabels() dort gehalten
  (vorher zentriert via CenterTime).
- ANCHOR_RIGHT_LOWER: der Text ENDET am Anker und laeuft nach links -> ragt
  nicht ueber den Chartrand hinaus.
- Schriftgroesse 8 -> 12 (+4), einstellbar via InpLabelSize; gilt auch fuer das
  (per Default ausgeblendete) Trendlinien-Label.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:45:35 +02:00
Axel HocksandClaude Opus 4.8 6d279e0886 MQL5 v1.20: aktuelle Kurslinie weiss
User-Vorgabe. CHART_COLOR_BID/ASK/LAST auf InpThemeBidLine (clrWhite), Bid-Linie
explizit eingeschaltet -- hebt sich klar von den blau/roten Kerzen und den
farbigen Overlays ab.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:43:22 +02:00
Axel HocksandClaude Opus 4.8 4709410c51 MQL5 v1.19: Liquiditaetszone mit 10% Deckkraft (transparent)
User: "setze die transparenz der zone auf 10 %".

MT5 kann bei OBJ_RECTANGLE KEIN echtes Alpha (nur Canvas-Objekte koennten das).
Loesung: BlendBg() mischt die Fuellfarbe gegen den bekannten, einfarbigen
Chart-Hintergrund -- optisch identisch zu echter Transparenz.
  Gold #F59E0B bei 10% auf #0D1117 -> #241F15 (dezent)

InpLiqZoneAlpha = Deckkraft in % (Default 10). Farbe wird bei JEDEM Redraw neu
gesetzt, damit eine Alpha-Aenderung sofort greift (nicht erst beim Neuanlegen des
Objekts). Die gestrichelte Kante bleibt in voller Goldfarbe wie im Referenzbild.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:42:28 +02:00
Axel HocksandClaude Opus 4.8 03567adf6b MT5-Chart v1.18: Trade-Marker, Liquiditaetszonen, Kurs oben rechts + Pfeil-Bugfix
Pfeil-Bugfix (User: "liquiditaetspfeile werden immer noch nicht angezeigt"):
  (1) ANCHOR_LEFT ist fuer OBJ_ARROW UNGUELTIG (nur TOP/BOTTOM)
  (2) Pfeile sitzen rechts neben der letzten Kerze -> ohne CHART_SHIFT kein
      sichtbarer Bereich dort
Blink-Fix (User: "blinken nur manchmal auf"): hl_walls setzte den Cache bei jedem
Fehlschlag auf None -> LQ-Zeilen fehlten -> Indikator loeschte die Pfeile. Jetzt
letzter guter Stand 120s Grace.

Neu (alles reine Anzeige):
- TR;<O|C>;zeit  -> Kerze der Eroeffnung HELLGRUEN, des Close DUNKELGRUEN umrandet
- EQ;<H|L>;lo;hi;zeit -> Equal Highs/Lows aus M30-Pivots als goldenes Band +
  gestrichelte Kante (wie im User-Referenzbild). Als Signal gemessen verworfen.
- PX;bid -> aktueller Kurs fett oben rechts
- Beschriftung der Liquiditaets-Trendlinie per Default aus (v1.16)

Alles kompiliert und live in sr_levels.csv verifiziert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:36:22 +02:00
Axel HocksandClaude Opus 4.8 b75997d703 MQL5 v1.15: Chart-Theme wie im Dashboard (User-Vorgabe mit Referenzbild)
ApplyTheme() setzt beim Indikator-Start die Chart-Eigenschaften auf die
Dashboard-Palette:
  Bull #3B82F6 (blau) - Bear #EF4444 (rot) - BG #0D1117
  Gitter #10151C (dezent) - Text #8B949E - Kerzen gefuellt (CHART_CANDLES)
  Liquiditaets-Pfeile Gold #F59E0B (= "Liquiditaetszone" der Legende)
Periodentrenner aus, Bid/Ask in Bull/Bear-Farbe.

Abschaltbar via InpApplyTheme, alle Farben einzeln als Inputs ueberschreibbar.
WARNUNG dokumentiert: aendert das Chart dauerhaft (bleibt nach Entfernen des
Indikators bestehen).

Kompiliert. CLAUDE.md aktualisiert (Indikator-Stand v1.12 -> v1.15, inkl. der
v1.14-Umstellung auf "nur Pfeile rechtsbuendig").

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:18:00 +02:00
Axel HocksandClaude Opus 4.8 919fe61dc3 Entry-Checkliste im Order-Dialog + Liquiditaets-Pfeile rechtsbuendig (v=120, MQL5 v1.14)
1) Entry-Checkliste (User: "blende einen Hinweis ein wenn die Checkliste gegen
   meine Eroeffnung ist"): engine._entry_checklist prueft 7 Punkte mit Live-Daten
   -- Signal-Deckung, HTF-Trend M30+H1, Entry-Raum, News-Konflikt, Kosten,
   Verlust-Serie heute (Mental-Check), Nacht-Stunde. Snapshot checklist{long,short},
   Anzeige im Bestaetigungs-Dialog, blockt nicht. Kommt jetzt auch bei vorhandenem
   Signal (alter Dialog nur bei WARTEN/Gegen-Signal).
   Real beim Einbau: beide Richtungen "stop" (11 Verluste heute = 80% des Kontos).

2) MQL5 v1.14 (User: "blende die liquiditaetslinien aus, nur die Pfeile sollen
   rechtsbuendig angezeigt werden"): LQ-Linien + Text-Labels raus, nur noch der
   Pfeil auf dem Wand-Preis, rechtsbuendig am aktuellen Rand (in RepositionLabels
   nachgefuehrt, bleibt beim Scrollen rechts). Details im Tooltip. Pinke
   Liquiditaets-Trendlinie unveraendert. Kompiliert.

3) backtest_liquidity_sweep.py (SMC Equal Highs/Lows + Swing Liquidity, Multi-TF-
   und Session-Achse): faellt durch -- Details folgen in der Doku.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-30 18:15:03 +02:00
Axel HocksandClaude Opus 4.8 06b37a1474 Liquiditaets-Waende: Richtungs-Pfeil + pinke Liquiditaets-Trendlinie (v1.13)
User-Wunsch: "Kennzeiche die Liquiditaetslinie mit einem Pfeil in welche richtung
die linie den Kurs treibt. Zeichne mir eine Trendlnie in pink im mt5 auf basis
der liquiditaet ein".

(a) Pfeil je Wand in Wirkrichtung (Lesart "die Wand haelt": Nachfrage stuetzt hoch,
    Angebot deckelt runter); groessere Wand dicker + "<<". CSV-Format erweitert:
    LQ;<B|A>;preis;size;<U|D>;<1|0>.
    WICHTIG: Pfeilrichtung ist INTERPRETATION, nicht gemessen -- die Gegenthese
    ("Liquidity Grab", Kurs laeuft ZUR Wand) ist genauso verbreitet. Klaert
    analyze_bookflow.py Frage 3.

(b) Pinke Liquiditaets-Trendlinie LT;t1;p1;t2;p2;<U|D>: Regression ueber den
    VOLUMENGEWICHTETEN Wand-Schwerpunkt der letzten 60 min. Zeigt, wohin das
    Gewicht der RUHENDEN Orders wandert -- nicht der gehandelte Kurs.
    Zeiten im Bot in Broker-Zeit umgerechnet, Preise basis-korrigiert.

HL /api/walls liefert jetzt arrow_bid/arrow_ask/dominant/trend.
Verifiziert: LQ;B;84.182;2441;U;1 / LQ;A;84.223;2441;D;0 /
LT;1785427175;84.135;1785430664;83.978;D in sr_levels.csv. Indikator kompiliert.

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