From 4709410c51d3e286d8feccaa335b6a196d8cb8b0 Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Thu, 30 Jul 2026 18:42:28 +0200 Subject: [PATCH] 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 --- CLAUDE.md | 2 +- mql5/SR_Levels.mq5 | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9b88d6a..536b04c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1202,7 +1202,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche: Daten älter als 60 s werden verworfen. **REINE ANZEIGE** — ob HL-Buch-Signale auf den CFD übertragbar sind, wird gerade gemessen (`analyze_bookflow.py` im HL-Projekt, Datensammlung seit 2026-07-30, Urteil in ~2 Wochen). Der Indikator - **`mql5/SR_Levels.mq5`** (**v1.18** — `LQ`-Handler zeichnet seit v1.14 **nur noch + **`mql5/SR_Levels.mq5`** (**v1.19** — `LQ`-Handler zeichnet seit v1.14 **nur noch den PFEIL**, rechtsbündig am aktuellen Rand (in `RepositionLabels()` nachgeführt, bleibt beim Scrollen rechts; Details im **Tooltip**) — Linie und Text-Label sind auf User-Wunsch raus („Chart zu voll"). **v1.15 = CHART-THEME** (User „Farben im diff --git a/mql5/SR_Levels.mq5 b/mql5/SR_Levels.mq5 index c7e6da5..2fd8382 100644 --- a/mql5/SR_Levels.mq5 +++ b/mql5/SR_Levels.mq5 @@ -12,7 +12,12 @@ //| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). | //+------------------------------------------------------------------+ #property copyright "Oil Trading Bot" -#property version "1.18" +#property version "1.19" +// v1.19 (2026-07-30): Liquiditaetszone TRANSPARENT (User: „Transparenz der Zone +// auf 10 %"). MT5 kann bei OBJ_RECTANGLE kein echtes Alpha -> BlendBg() +// mischt die Fuellfarbe gegen den (bekannten, einfarbigen) Chart-Hintergrund; +// das Ergebnis sieht identisch aus. InpLiqZoneAlpha = Deckkraft in %. +// Die gestrichelte Kante bleibt in voller Farbe (wie im Referenzbild). // v1.18 (2026-07-30): NEU (User-Wuensche) — (a) LIQUIDITAETSZONEN: Equal Highs / // Equal Lows aus den M30-Pivots als goldenes Band + gestrichelte Kante, // nach rechts verlaengert (EQ;;lo;hi;zeit). REINE ANZEIGE, als Signal @@ -75,7 +80,8 @@ input bool InpShowTrades = true; // Trade-Kerzen umranden (Eroeffn input color InpTradeOpenColor = C'134,239,172'; // Eroeffnung — hellgruen input color InpTradeCloseColor = C'21,128,61'; // Close — dunkelgruen input bool InpShowLiqZones = true; // Liquiditaetszonen (Equal Highs/Lows) -input color InpLiqZoneColor = C'146,94,10'; // Zonen-Band (gedaempftes Gold) +input color InpLiqZoneColor = C'245,158,11'; // Zonen-Grundfarbe (Gold #F59E0B) +input int InpLiqZoneAlpha = 10; // Deckkraft der Zonenfuellung in % (10 = sehr transparent) input bool InpShowPrice = true; // aktuellen Kurs oben rechts anzeigen input int InpPriceSize = 20; // Schriftgroesse des Kurses input color InpPriceColor = C'230,237,243'; // Kurs-Farbe @@ -112,6 +118,25 @@ int OnInit() //| Kerzen werden GEFÜLLT gezeichnet (Body in Bull-/Bear-Farbe), damit| //| es aussieht wie im Referenzbild. | //+------------------------------------------------------------------+ +//+------------------------------------------------------------------+ +//| Farbe mit dem Chart-Hintergrund mischen — simuliert TRANSPARENZ. | +//| ⚠ MT5 kann bei OBJ_RECTANGLE KEIN echtes Alpha (nur Canvas- | +//| Objekte könnten das). Da der Hintergrund bekannt und einfarbig | +//| ist, sieht die Mischung exakt aus wie eine transparente Füllung. | +//| pct = Deckkraft in % (10 = sehr transparent, 100 = voll deckend). | +//+------------------------------------------------------------------+ +color BlendBg(color c, int pct) +{ + if(pct >= 100) return c; + if(pct < 0) pct = 0; + color bg = (color)ChartGetInteger(0, CHART_COLOR_BACKGROUND); + double a = pct / 100.0; + int r = (int)((c & 0xFF) * a + (bg & 0xFF) * (1 - a)); + int g = (int)(((c >> 8) & 0xFF) * a + ((bg >> 8) & 0xFF) * (1 - a)); + int b = (int)(((c >> 16)& 0xFF) * a + ((bg >> 16)& 0xFF) * (1 - a)); + return (color)(r | (g << 8) | (b << 16)); +} +//+------------------------------------------------------------------+ void ApplyTheme() { ChartSetInteger(0, CHART_MODE, CHART_CANDLES); @@ -417,9 +442,9 @@ void Redraw() if(zlo <= 0 || zhi <= 0 || zt <= 0) continue; datetime zend = iTime(_Symbol, PERIOD_CURRENT, 0) + (datetime)(PeriodSeconds() * 3); string zn = PFX + "EQZ_" + zs; + color zfill = BlendBg(InpLiqZoneColor, InpLiqZoneAlpha); if(ObjectCreate(0, zn, OBJ_RECTANGLE, 0, zt, zlo, zend, zhi)) { - ObjectSetInteger(0, zn, OBJPROP_COLOR, InpLiqZoneColor); ObjectSetInteger(0, zn, OBJPROP_STYLE, STYLE_SOLID); ObjectSetInteger(0, zn, OBJPROP_WIDTH, 1); ObjectSetInteger(0, zn, OBJPROP_FILL, true); @@ -434,6 +459,9 @@ void Redraw() ObjectMove(0, zn, 0, zt, zlo); ObjectMove(0, zn, 1, zend, zhi); } + // Farbe IMMER setzen (auch beim Bewegen) — sonst bliebe nach einer + // Alpha-Änderung die alte Füllung stehen, bis das Objekt neu entsteht. + ObjectSetInteger(0, zn, OBJPROP_COLOR, zfill); // gestrichelte Kante auf Höhe des Levels (wie im Bild) string zl = PFX + "EQL_" + zs; double edge = (zs == "H" ? zhi : zlo);