From e471170b017970e7f6394fe4f8b803e00503d763 Mon Sep 17 00:00:00 2001 From: Axel Hocks Date: Wed, 19 Aug 2026 00:10:56 +0200 Subject: [PATCH] Meldungen zentriert statt oben links (Indikator v1.40) User-Wunsch. MT5 kennt keine 'Mitte'-Ecke: der Bezugspunkt bleibt CORNER_LEFT_UPPER, aber der ANKER wird auf ANCHOR_UPPER (Text-Oberkante mittig) gesetzt und X auf die halbe Chartbreite. Damit waechst der Text nach beiden Seiten und bleibt bei jeder Fensterbreite zentriert. X wird bei JEDEM Redraw neu gesetzt, nicht nur beim Erzeugen -- sonst haengt die Zentrierung nach einer Fenster-Groessenaenderung auf der alten Breite fest. Startabstand von oben 40 -> 24, weil MT5s eigene Symbol-/Zeitrahmen-Zeile links steht und mittig nicht mehr im Weg ist. Weiterhin ueber InpMeldungY einstellbar, Zeilenabstand bleibt Faktor 2,0 der Schriftgroesse (v1.39). Kompiliert ins richtige Terminal: 0 errors, 0 warnings. Co-Authored-By: Claude Opus 5 --- mql5/SR_Levels.mq5 | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/mql5/SR_Levels.mq5 b/mql5/SR_Levels.mq5 index da81154..94e905e 100644 --- a/mql5/SR_Levels.mq5 +++ b/mql5/SR_Levels.mq5 @@ -12,7 +12,14 @@ //| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). | //+------------------------------------------------------------------+ #property copyright "Oil Trading Bot" -#property version "1.39" +#property version "1.40" +// v1.40 (2026-08-19): MELDUNGEN ZENTRIERT statt oben links (User-Wunsch). +// MT5 kennt keine "Mitte"-Ecke: Bezug bleibt CORNER_LEFT_UPPER, aber der +// ANKER wird ANCHOR_UPPER (Oberkante mittig) und X = halbe Chartbreite. +// X wird bei JEDEM Redraw neu gesetzt, sonst haengt die Zentrierung nach +// einer Fenster-Groessenaenderung auf der alten Breite fest. +// Startabstand 40 -> 24, weil MT5s eigene Symbol-Zeile links steht und +// mittig nicht mehr stoert. // v1.39 (2026-08-19): MELDUNGEN oben links neu positioniert (User: "die // Anzeigetexte ueberlagern sich"). Zwei Fehler: der Start lag bei y=16 // und damit in MT5s EIGENER Symbol-/OHLC-Zeile, und der Zeilenabstand @@ -245,7 +252,7 @@ input bool InpShowTradeLevels = true; // MT5-Positionslinien+Labels (st // (`[trading] export_meldungen=false`) ODER hier. input bool InpShowMeldungen = true; // Meldungen oben links einblenden input int InpMeldungSize = 10; // Schriftgroesse der Meldungen -input int InpMeldungY = 40; // Startabstand von oben (unter MT5s eigener Symbol-Zeile) +input int InpMeldungY = 24; // Startabstand von oben (zentriert -> MT5s Symbol-Zeile stoert nicht) input color InpMeldungColor = clrGainsboro; // Farbe der Meldungen // Zonen statt nackter Linien (User-Wunsch 2026-08-17). Die BREITE ist die echte // Spanne der Pivots im Cluster — NICHT Fibonacci (im Projekt gemessen und @@ -968,8 +975,12 @@ void Redraw() { ObjectCreate(0, mn, OBJ_LABEL, 0, 0, 0); ObjectSetInteger(0, mn, OBJPROP_CORNER, CORNER_LEFT_UPPER); - ObjectSetInteger(0, mn, OBJPROP_XDISTANCE, 12); - ObjectSetInteger(0, mn, OBJPROP_ANCHOR, ANCHOR_LEFT_UPPER); + // ⚠ ZENTRIERT (User-Wunsch 2026-08-19). MT5 kennt keine „Mitte"-Ecke: + // der Bezugspunkt bleibt LINKS OBEN, aber der ANKER wird auf + // ANCHOR_UPPER (Text-Oberkante MITTIG) gesetzt und der X-Abstand + // auf die halbe Chartbreite gelegt. Damit waechst der Text nach + // beiden Seiten und bleibt bei jeder Fensterbreite zentriert. + ObjectSetInteger(0, mn, OBJPROP_ANCHOR, ANCHOR_UPPER); ObjectSetString (0, mn, OBJPROP_FONT, "Arial"); ObjectSetInteger(0, mn, OBJPROP_FONTSIZE, InpMeldungSize); ObjectSetInteger(0, mn, OBJPROP_SELECTABLE, false); @@ -986,6 +997,11 @@ void Redraw() // 10 pt rendern je nach DPI-Skalierung 16-20 px hoch — bei 16 px // Zeilenabstand ueberlappen mehrere Meldungen zwangslaeufig. // Jetzt Faktor 2,0 (10 pt -> 20 px), das traegt auch 125 % DPI. + // ⚠ X JEDEN Redraw neu setzen, nicht nur beim Erzeugen: die Chartbreite + // aendert sich beim Groessenaendern des Fensters, sonst bliebe die + // Zentrierung auf der alten Breite haengen. + ObjectSetInteger(0, mn, OBJPROP_XDISTANCE, + (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS) / 2); ObjectSetInteger(0, mn, OBJPROP_YDISTANCE, InpMeldungY + msg_idx * (int)(InpMeldungSize * 2.0)); ObjectSetString (0, mn, OBJPROP_TEXT, p[1]);