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:
co-authored by
Claude Opus 4.8
parent
03567adf6b
commit
4709410c51
+31
-3
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user