Entry-Checkliste im Order-Dialog + Liquiditaets-Pfeile rechtsbuendig (v=120, MQL5 v1.14)

1) Entry-Checkliste (User: "blende einen Hinweis ein wenn die Checkliste gegen
   meine Eroeffnung ist"): engine._entry_checklist prueft 7 Punkte mit Live-Daten
   -- Signal-Deckung, HTF-Trend M30+H1, Entry-Raum, News-Konflikt, Kosten,
   Verlust-Serie heute (Mental-Check), Nacht-Stunde. Snapshot checklist{long,short},
   Anzeige im Bestaetigungs-Dialog, blockt nicht. Kommt jetzt auch bei vorhandenem
   Signal (alter Dialog nur bei WARTEN/Gegen-Signal).
   Real beim Einbau: beide Richtungen "stop" (11 Verluste heute = 80% des Kontos).

2) MQL5 v1.14 (User: "blende die liquiditaetslinien aus, nur die Pfeile sollen
   rechtsbuendig angezeigt werden"): LQ-Linien + Text-Labels raus, nur noch der
   Pfeil auf dem Wand-Preis, rechtsbuendig am aktuellen Rand (in RepositionLabels
   nachgefuehrt, bleibt beim Scrollen rechts). Details im Tooltip. Pinke
   Liquiditaets-Trendlinie unveraendert. Kompiliert.

3) backtest_liquidity_sweep.py (SMC Equal Highs/Lows + Swing Liquidity, Multi-TF-
   und Session-Achse): faellt durch -- Details folgen in der Doku.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-07-30 18:15:03 +02:00
co-authored by Claude Opus 4.8
parent b77b3d60f5
commit 919fe61dc3
5 changed files with 531 additions and 43 deletions
+40 -38
View File
@@ -12,7 +12,13 @@
//| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). |
//+------------------------------------------------------------------+
#property copyright "Oil Trading Bot"
#property version "1.13"
#property version "1.14"
// v1.14 (2026-07-30): Liquiditäts-LINIEN + Text-Labels ENTFERNT (User: „blende die
// liquiditätslinien aus, nur die Pfeile sollen rechtsbündig angezeigt werden").
// Es bleibt NUR der Pfeil auf dem Wand-Preis, RECHTSBÜNDIG am aktuellen Rand
// (wird in RepositionLabels() nachgeführt, bleibt beim Scrollen rechts).
// Details (Seite/Größe/Dominanz/Preis) jetzt im TOOLTIP statt im Chart.
// Die pinke Liquiditäts-Trendlinie bleibt unverändert.
// v1.13 (2026-07-30): Liquiditäts-Wände bekommen einen PFEIL in ihrer Wirkrichtung
// (Lesart „die Wand hält" — Nachfrage stützt hoch, Angebot deckelt runter;
// die GRÖSSERE Wand wird dicker gezeichnet + "<<"). NEU: pinke
@@ -95,6 +101,17 @@ void RepositionLabels()
ObjectMove(0, nm, 0, ct, pr);
}
}
// Liquiditäts-PFEILE rechtsbündig halten: die CSV ändert sich nicht bei jedem
// Tick, ohne Nachführung würden die Pfeile mit jeder neuen Kerze nach links
// wandern. Preis bleibt, nur die Zeit wird an den rechten Rand gezogen.
datetime rt = iTime(_Symbol, PERIOD_CURRENT, 0) + (datetime)(PeriodSeconds() * 2);
int na = ObjectsTotal(0, 0, OBJ_ARROW);
for(int i = 0; i < na; i++)
{
string nm = ObjectName(0, i, 0, OBJ_ARROW);
if(StringFind(nm, PFX + "ALQ_") == 0)
ObjectMove(0, nm, 0, rt, ObjectGetDouble(0, nm, OBJPROP_PRICE));
}
ChartRedraw();
}
//+------------------------------------------------------------------+
@@ -277,54 +294,39 @@ void Redraw()
if(lpx <= 0) continue;
bool isBid = (side == "B");
color lcol = isBid ? InpWallBidColor : InpWallAskColor;
string nm = PFX + "LQ_" + side;
if(ObjectCreate(0, nm, OBJ_HLINE, 0, 0, lpx))
{
ObjectSetInteger(0, nm, OBJPROP_COLOR, lcol);
ObjectSetInteger(0, nm, OBJPROP_STYLE, STYLE_DASH);
ObjectSetInteger(0, nm, OBJPROP_WIDTH, 2);
ObjectSetInteger(0, nm, OBJPROP_BACK, true);
ObjectSetInteger(0, nm, OBJPROP_SELECTABLE, false);
}
else
ObjectMove(0, nm, 0, 0, lpx);
// Pfeil = Wirkrichtung der Wand (Feld 4: U/D). Lesart „die Wand HÄLT":
// Nachfrage-Wand stützt von unten (hoch), Angebots-Wand deckelt (runter).
// Feld 5 = 1 bei der GRÖSSEREN der beiden Wände → dickere Linie + "<<".
// ⚠ 2026-07-30 (User): KEINE waagerechte Linie und KEIN Text-Label mehr —
// der Chart war zu voll. Es bleibt NUR der Pfeil, RECHTSBÜNDIG am aktuellen
// Rand, auf dem Preisniveau der Wand. Die Details (Seite/Größe/Dominanz)
// stehen im TOOLTIP (Maus drüber) statt fest im Chart.
string dirc = (k > 4) ? p[4] : (isBid ? "U" : "D");
bool isDom = (k > 5 && p[5] == "1");
string arrow = (dirc == "U" ? CharToString(94) : CharToString(118)); // ^ / v
if(isDom)
ObjectSetInteger(0, nm, OBJPROP_WIDTH, 3);
string llbl = arrow + " " + (isBid ? "Liquidität NACHFRAGE " : "Liquidität ANGEBOT ")
+ DoubleToString(lsz, 0) + (isDom ? " <<" : "");
string ltn = PFX + "TLQ_" + side;
if(ObjectCreate(0, ltn, OBJ_TEXT, 0, CenterTime(), lpx))
{
ObjectSetString (0, ltn, OBJPROP_TEXT, llbl);
ObjectSetInteger(0, ltn, OBJPROP_COLOR, lcol);
ObjectSetInteger(0, ltn, OBJPROP_FONTSIZE, 9);
ObjectSetInteger(0, ltn, OBJPROP_ANCHOR, ANCHOR_LOWER);
ObjectSetInteger(0, ltn, OBJPROP_SELECTABLE, false);
}
else
{
ObjectMove(0, ltn, 0, CenterTime(), lpx);
ObjectSetString(0, ltn, OBJPROP_TEXT, llbl);
}
// Echtes Pfeil-Objekt am rechten Rand (Wingdings 233 hoch / 234 runter) —
// deutlicher sichtbar als das Textzeichen im Label.
string an = PFX + "ALQ_" + side;
datetime atime = CenterTime() + (datetime)(PeriodSeconds() * 6);
// Rechter Rand = aktuelle (rechteste) Kerze + kleiner Versatz, damit der
// Pfeil frei neben dem Kursverlauf steht und beim Scrollen rechts bleibt.
datetime atime = iTime(_Symbol, PERIOD_CURRENT, 0)
+ (datetime)(PeriodSeconds() * 2);
if(ObjectCreate(0, an, OBJ_ARROW, 0, atime, lpx))
{
ObjectSetInteger(0, an, OBJPROP_ARROWCODE, (dirc == "U" ? 233 : 234));
ObjectSetInteger(0, an, OBJPROP_COLOR, lcol);
ObjectSetInteger(0, an, OBJPROP_WIDTH, (isDom ? 3 : 2));
ObjectSetInteger(0, an, OBJPROP_WIDTH, (isDom ? 4 : 2));
ObjectSetInteger(0, an, OBJPROP_ANCHOR, ANCHOR_LEFT);
ObjectSetInteger(0, an, OBJPROP_SELECTABLE, false);
}
else
{
ObjectMove(0, an, 0, atime, lpx);
ObjectSetInteger(0, an, OBJPROP_WIDTH, (isDom ? 4 : 2));
ObjectSetInteger(0, an, OBJPROP_COLOR, lcol);
ObjectSetInteger(0, an, OBJPROP_ARROWCODE, (dirc == "U" ? 233 : 234));
}
ObjectSetString(0, an, OBJPROP_TOOLTIP,
(isBid ? "Liquiditaet NACHFRAGE " : "Liquiditaet ANGEBOT ")
+ DoubleToString(lsz, 0) + (isDom ? " (dominant)" : "")
+ " @ " + DoubleToString(lpx, (int)_Digits));
// evtl. noch vorhandene Alt-Objekte (Linie/Label aus v1.13) entfernen
ObjectDelete(0, PFX + "LQ_" + side);
ObjectDelete(0, PFX + "TLQ_" + side);
continue;
}
// Liquiditäts-TRENDLINIE: LT;t1;p1;t2;p2;<U|D> (pink, nach rechts verlängert).