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>
This commit is contained in:
Axel Hocks
2026-07-30 18:42:28 +02:00
co-authored by Claude Opus 4.8
parent 03567adf6b
commit 4709410c51
2 changed files with 32 additions and 4 deletions
+31 -3
View File
@@ -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;<H|L>;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);