Chartmuster im MT5-Terminal zeichnen (Datei-Bridge + SR_Levels.mq5 v1.11)

Engine schreibt die top-2 erkannten Muster als PT;name;dir;trigger;target;status
in sr_levels.csv; SR_Levels.mq5 zeichnet Trigger-/Nackenlinie (rot=bear/gruen=bull,
kraeftig) + gepunktete Ziel-Linie + Label. Reine Anzeige. Indikator nach Update
mit F7 neu kompilieren.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-07-27 18:59:25 +02:00
co-authored by Claude Opus 4.8
parent 9dc26ad48f
commit 21d855b163
3 changed files with 81 additions and 4 deletions
+63 -1
View File
@@ -12,7 +12,10 @@
//| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). |
//+------------------------------------------------------------------+
#property copyright "Oil Trading Bot"
#property version "1.10"
#property version "1.11"
// v1.11: zeichnet zusätzlich erkannte Chartmuster (PT;… aus der CSV) — Trigger-/
// Nackenlinie (rot/grün) + gepunktete Ziel-Linie + Label. Reine Anzeige.
// ⚠ nach dem Update den Indikator NEU mit F7 kompilieren.
#property indicator_chart_window
#property indicator_plots 0
@@ -241,6 +244,65 @@ void Redraw()
}
continue;
}
// Chartmuster: PT;name;dir;trigger;target;status → kräftige Trigger-/Nacken-
// linie (rot=bear/grün=bull/grau=neutral) + gepunktete Ziel-Linie + Labels.
// REINE ANZEIGE (im Bot als Signal noch unbelegt).
if(typ == "PT")
{
if(k < 4) continue;
string pname = p[1];
string pdir = p[2];
double ptrig = StringToDouble(p[3]);
double ptgt = (k > 4 && StringLen(p[4]) > 0) ? StringToDouble(p[4]) : 0.0;
if(ptrig <= 0) continue;
color pcol = (pdir == "bull" ? clrLime : (pdir == "bear" ? clrRed : clrSilver));
// Trigger-/Nackenlinie (WIDTH 2 → hebt sich von den dünnen S/R-Linien ab)
string nm = PFX + "PT_" + IntegerToString(idx);
if(ObjectCreate(0, nm, OBJ_HLINE, 0, 0, ptrig))
{
ObjectSetInteger(0, nm, OBJPROP_COLOR, pcol);
ObjectSetInteger(0, nm, OBJPROP_STYLE, STYLE_SOLID);
ObjectSetInteger(0, nm, OBJPROP_WIDTH, 2);
ObjectSetInteger(0, nm, OBJPROP_BACK, true);
ObjectSetInteger(0, nm, OBJPROP_SELECTABLE, false);
}
string lbl = (ptgt > 0)
? pname + " -> Ziel " + DoubleToString(ptgt, (int)_Digits)
: pname + " (Trigger " + DoubleToString(ptrig, (int)_Digits) + ")";
string tn = PFX + "TPT_" + IntegerToString(idx);
if(ObjectCreate(0, tn, OBJ_TEXT, 0, CenterTime(), ptrig))
{
ObjectSetString (0, tn, OBJPROP_TEXT, lbl);
ObjectSetInteger(0, tn, OBJPROP_COLOR, pcol);
ObjectSetInteger(0, tn, OBJPROP_FONTSIZE, 9);
ObjectSetInteger(0, tn, OBJPROP_ANCHOR, ANCHOR_LOWER);
ObjectSetInteger(0, tn, OBJPROP_SELECTABLE, false);
}
// Ziel-Linie (gepunktet) + Label, falls Ziel bekannt
if(ptgt > 0)
{
string tg = PFX + "PTG_" + IntegerToString(idx);
if(ObjectCreate(0, tg, OBJ_HLINE, 0, 0, ptgt))
{
ObjectSetInteger(0, tg, OBJPROP_COLOR, pcol);
ObjectSetInteger(0, tg, OBJPROP_STYLE, STYLE_DOT);
ObjectSetInteger(0, tg, OBJPROP_WIDTH, 1);
ObjectSetInteger(0, tg, OBJPROP_BACK, true);
ObjectSetInteger(0, tg, OBJPROP_SELECTABLE, false);
}
string tgn = PFX + "TPTG_" + IntegerToString(idx);
if(ObjectCreate(0, tgn, OBJ_TEXT, 0, CenterTime(), ptgt))
{
ObjectSetString (0, tgn, OBJPROP_TEXT, "Ziel " + pname);
ObjectSetInteger(0, tgn, OBJPROP_COLOR, pcol);
ObjectSetInteger(0, tgn, OBJPROP_FONTSIZE, 8);
ObjectSetInteger(0, tgn, OBJPROP_ANCHOR, ANCHOR_LOWER);
ObjectSetInteger(0, tgn, OBJPROP_SELECTABLE, false);
}
}
idx++;
continue;
}
// ("Z;"-Zonen-Zeilen schreibt der Bot nicht mehr — die dynamische Handels-
// Range zeichnet DrawRange() selbst aus den Chart-Kerzen.)
}