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:
co-authored by
Claude Opus 4.8
parent
04ea6934ee
commit
2bda2680bb
@@ -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
|
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,
|
CFD übertragbar sind, wird gerade gemessen (`analyze_bookflow.py` im HL-Projekt,
|
||||||
Datensammlung seit 2026-07-30, Urteil in ~2 Wochen). Der Indikator
|
Datensammlung seit 2026-07-30, Urteil in ~2 Wochen). Der Indikator
|
||||||
**`mql5/SR_Levels.mq5`** (**v1.23** — `LQ`-Handler zeichnet seit v1.14 **nur noch
|
**`mql5/SR_Levels.mq5`** (**v1.28** — `LQ`-Handler zeichnet seit v1.14 **nur noch
|
||||||
den PFEIL**, rechtsbündig am aktuellen Rand (in `RepositionLabels()` nachgeführt,
|
den PFEIL**, rechtsbündig am aktuellen Rand (in `RepositionLabels()` nachgeführt,
|
||||||
bleibt beim Scrollen rechts; Details im **Tooltip**) — Linie und Text-Label sind
|
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
|
auf User-Wunsch raus („Chart zu voll"). **v1.15 = CHART-THEME** (User „Farben im
|
||||||
|
|||||||
@@ -2031,6 +2031,21 @@ class TradingEngine:
|
|||||||
lines.append(f"PX;{_bid}")
|
lines.append(f"PX;{_bid}")
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
# G/V der offenen Position, direkt unter dem Kurs (User-Wunsch 2026-07-30):
|
||||||
|
# PL;wert;waehrung. **NETTO** wie im Dashboard — bei Gewinn abzüglich der
|
||||||
|
# WHT-Quellensteuer, die der Broker einbehält (`[trading] wht_pct`); bei
|
||||||
|
# Verlust unverändert (da fällt keine Steuer an). Ohne Position keine Zeile
|
||||||
|
# → der Indikator löscht das Label.
|
||||||
|
try:
|
||||||
|
_ps = self.trader.snapshot()
|
||||||
|
if _ps.get("ticket") and _ps.get("pnl") is not None:
|
||||||
|
_p = float(_ps["pnl"])
|
||||||
|
if _p > 0 and self._wht_pct > 0:
|
||||||
|
_p *= (1.0 - self._wht_pct / 100.0)
|
||||||
|
_cur = (self.data.snapshot() or {}).get("currency") or ""
|
||||||
|
lines.append(f"PL;{_p:.2f};{_cur}")
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
# Trade-Marker: TR;<O|C>;<broker_time> → der Indikator umrandet die Kerze,
|
# Trade-Marker: TR;<O|C>;<broker_time> → der Indikator umrandet die Kerze,
|
||||||
# in der eröffnet (hellgrün) bzw. geschlossen (dunkelgrün) wurde
|
# in der eröffnet (hellgrün) bzw. geschlossen (dunkelgrün) wurde
|
||||||
# (User-Vorgabe 2026-07-30). Offene Position + die letzten Trades des Tages.
|
# (User-Vorgabe 2026-07-30). Offene Position + die letzten Trades des Tages.
|
||||||
|
|||||||
+38
-1
@@ -12,7 +12,11 @@
|
|||||||
//| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). |
|
//| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). |
|
||||||
//+------------------------------------------------------------------+
|
//+------------------------------------------------------------------+
|
||||||
#property copyright "Oil Trading Bot"
|
#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
|
// v1.27 (2026-07-30): S/R-Label zeigt nur noch die Prozentzahl statt
|
||||||
// „Durchbruch 34%" (User-Wunsch) — der ausgeschriebene Text bleibt im Tooltip.
|
// „Durchbruch 34%" (User-Wunsch) — der ausgeschriebene Text bleibt im Tooltip.
|
||||||
// v1.26 (2026-07-30): Beschriftungen + Pfeile stehen jetzt GANZ rechts am
|
// 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 bool InpShowPBreak = true; // Durchbruchwahrscheinlichkeit am S/R-Label
|
||||||
input color InpLabelColor = clrWhite; // Farbe ALLER Linien-Beschriftungen (User-Wunsch: weiss)
|
input color InpLabelColor = clrWhite; // Farbe ALLER Linien-Beschriftungen (User-Wunsch: weiss)
|
||||||
input color InpPriceColor = clrWhite; // Kurs oben rechts (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") ────────
|
// ── 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
|
// 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'.
|
// 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);
|
ObjectSetInteger(0, pn, OBJPROP_COLOR, InpPriceColor);
|
||||||
continue;
|
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.
|
// TRADE-MARKER: TR;<O|C>;<broker_time> → die Kerze, in der eröffnet bzw.
|
||||||
// geschlossen wurde, wird umrandet (User-Vorgabe 2026-07-30):
|
// geschlossen wurde, wird umrandet (User-Vorgabe 2026-07-30):
|
||||||
// O = Eröffnung → HELLGRÜN · C = Close → DUNKELGRÜN
|
// O = Eröffnung → HELLGRÜN · C = Close → DUNKELGRÜN
|
||||||
|
|||||||
Reference in New Issue
Block a user