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>
This commit is contained in:
Axel Hocks
2026-07-30 19:20:49 +02:00
co-authored by Claude Opus 4.8
parent 04ea6934ee
commit 2bda2680bb
3 changed files with 54 additions and 2 deletions
+38 -1
View File
@@ -12,7 +12,11 @@
//| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). |
//+------------------------------------------------------------------+
#property copyright "Oil Trading Bot"
#property version "1.27"
#property version "1.28"
// v1.28 (2026-07-30): G/V der offenen Position direkt UNTER dem Kurs oben rechts
// (User-Wunsch) — PL;wert;waehrung, NETTO wie im Dashboard (WHT-Quellensteuer
// bei Gewinn bereits abgezogen). Gruen im Plus, rot im Minus; ohne offene
// Position schickt der Bot keine PL-Zeile -> Label verschwindet.
// v1.27 (2026-07-30): S/R-Label zeigt nur noch die Prozentzahl statt
// „Durchbruch 34%" (User-Wunsch) — der ausgeschriebene Text bleibt im Tooltip.
// v1.26 (2026-07-30): Beschriftungen + Pfeile stehen jetzt GANZ rechts am
@@ -132,6 +136,9 @@ input int InpLabelSize = 12; // Schriftgroesse der Linien-Besc
input bool InpShowPBreak = true; // Durchbruchwahrscheinlichkeit am S/R-Label
input color InpLabelColor = clrWhite; // Farbe ALLER Linien-Beschriftungen (User-Wunsch: weiss)
input color InpPriceColor = clrWhite; // Kurs oben rechts (weiss)
input bool InpShowPnL = true; // G/V der offenen Position unter dem Kurs
input color InpPnLUpColor = C'0,255,127'; // G/V im Plus (neongruen)
input color InpPnLDownColor = C'255,69,0'; // G/V im Minus (rot)
// ── Chart-THEME (User-Vorgabe 2026-07-30 „Farben im MT5 wie im Bild") ────────
// Setzt beim Start die Chart-Eigenschaften auf die Dashboard-Palette, damit MT5
// und die PWA gleich aussehen. Farben in MQL5-Notation C'R,G,B'.
@@ -594,6 +601,36 @@ void Redraw()
ObjectSetInteger(0, pn, OBJPROP_COLOR, InpPriceColor);
continue;
}
// G/V der offenen Position — direkt UNTER dem Kurs (User-Wunsch 2026-07-30):
// PL;wert;waehrung. Wert ist NETTO (Bot rechnet die WHT-Quellensteuer schon
// raus, wie im Dashboard). Gruen im Plus, rot im Minus. Ohne offene Position
// schickt der Bot keine PL-Zeile -> das Label wird unten geloescht.
if(typ == "PL")
{
if(k < 2) continue;
if(!InpShowPnL) continue;
double plv = StringToDouble(p[1]);
string cur = (k > 2) ? p[2] : "";
string qn = PFX + "PNL";
if(ObjectFind(0, qn) < 0)
{
ObjectCreate(0, qn, OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, qn, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(0, qn, OBJPROP_XDISTANCE, 12);
// direkt unter dem Kurs: dessen Y (14) + Schrifthoehe + kleiner Abstand
ObjectSetInteger(0, qn, OBJPROP_YDISTANCE, 14 + InpPriceSize + 10);
ObjectSetInteger(0, qn, OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);
ObjectSetString (0, qn, OBJPROP_FONT, "Arial Black");
ObjectSetInteger(0, qn, OBJPROP_SELECTABLE, false);
}
ObjectSetInteger(0, qn, OBJPROP_FONTSIZE, (int)MathMax(8, InpPriceSize - 4));
ObjectSetString (0, qn, OBJPROP_TEXT,
(plv >= 0 ? "+" : "") + DoubleToString(plv, 2)
+ (StringLen(cur) > 0 ? " " + cur : ""));
ObjectSetInteger(0, qn, OBJPROP_COLOR,
(plv >= 0 ? InpPnLUpColor : InpPnLDownColor));
continue;
}
// TRADE-MARKER: TR;<O|C>;<broker_time> → die Kerze, in der eröffnet bzw.
// geschlossen wurde, wird umrandet (User-Vorgabe 2026-07-30):
// O = Eröffnung → HELLGRÜN · C = Close → DUNKELGRÜN