Liquiditaets-Waende: Richtungs-Pfeil + pinke Liquiditaets-Trendlinie (v1.13)

User-Wunsch: "Kennzeiche die Liquiditaetslinie mit einem Pfeil in welche richtung
die linie den Kurs treibt. Zeichne mir eine Trendlnie in pink im mt5 auf basis
der liquiditaet ein".

(a) Pfeil je Wand in Wirkrichtung (Lesart "die Wand haelt": Nachfrage stuetzt hoch,
    Angebot deckelt runter); groessere Wand dicker + "<<". CSV-Format erweitert:
    LQ;<B|A>;preis;size;<U|D>;<1|0>.
    WICHTIG: Pfeilrichtung ist INTERPRETATION, nicht gemessen -- die Gegenthese
    ("Liquidity Grab", Kurs laeuft ZUR Wand) ist genauso verbreitet. Klaert
    analyze_bookflow.py Frage 3.

(b) Pinke Liquiditaets-Trendlinie LT;t1;p1;t2;p2;<U|D>: Regression ueber den
    VOLUMENGEWICHTETEN Wand-Schwerpunkt der letzten 60 min. Zeigt, wohin das
    Gewicht der RUHENDEN Orders wandert -- nicht der gehandelte Kurs.
    Zeiten im Bot in Broker-Zeit umgerechnet, Preise basis-korrigiert.

HL /api/walls liefert jetzt arrow_bid/arrow_ask/dominant/trend.
Verifiziert: LQ;B;84.182;2441;U;1 / LQ;A;84.223;2441;D;0 /
LT;1785427175;84.135;1785430664;83.978;D in sr_levels.csv. Indikator kompiliert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-07-30 15:58:50 +02:00
co-authored by Claude Opus 4.8
parent f64677895e
commit 06b37a1474
4 changed files with 127 additions and 8 deletions
+81 -3
View File
@@ -12,7 +12,14 @@
//| 4) Der Bot muss laufen (schreibt die CSV alle ~5 s). |
//+------------------------------------------------------------------+
#property copyright "Oil Trading Bot"
#property version "1.12"
#property version "1.13"
// 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
// LIQUIDITÄTS-TRENDLINIE (LT;…) = Regression über den volumengewichteten
// Wand-Schwerpunkt der letzten ~60 min — zeigt, wohin das Gewicht der
// RUHENDEN Orders wandert (nicht der gehandelte Kurs).
// ⚠ Pfeilrichtung ist INTERPRETATION, nicht gemessen (s. analyze_bookflow.py).
// v1.12 (2026-07-30): Chartmuster-Linien (PT;…) ENTFERNT (User-Wunsch, Chart war zu
// voll — Kachel/PWA-Anzeige bleibt). NEU: ECHTE Liquiditäts-Wände (LQ;…) aus
// dem Hyperliquid-L2-Orderbuch, basis-korrigiert auf CFD-Niveau — die einzigen
@@ -36,6 +43,8 @@ input color InpChanColor = clrYellow; // Kanal-Farbe
input bool InpShowWalls = true; // echte Liquiditäts-Wände (Hyperliquid-Orderbuch)
input color InpWallBidColor = clrMediumSpringGreen; // Nachfrage-Wand (Bid, Käufer)
input color InpWallAskColor = clrOrangeRed; // Angebots-Wand (Ask, Verkäufer)
input bool InpShowLiqTrend = true; // Liquiditäts-Trendlinie zeichnen
input color InpLiqTrendColor = clrMagenta; // Liquiditäts-Trend (pink)
const string PFX = "SRB_"; // Präfix S/R-Linien (aus Datei)
const string RPFX = "SRR_"; // Präfix dynamische Range (aus Chart)
@@ -279,8 +288,16 @@ void Redraw()
}
else
ObjectMove(0, nm, 0, 0, lpx);
string llbl = (isBid ? "Liquidität NACHFRAGE " : "Liquidität ANGEBOT ")
+ DoubleToString(lsz, 0);
// 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 + "<<".
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))
{
@@ -295,6 +312,67 @@ void Redraw()
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);
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_SELECTABLE, false);
}
else
ObjectMove(0, an, 0, atime, lpx);
continue;
}
// Liquiditäts-TRENDLINIE: LT;t1;p1;t2;p2;<U|D> (pink, nach rechts verlängert).
// Regression über den VOLUMENGEWICHTETEN Schwerpunkt der beiden Wände über die
// letzten ~60 min: zeigt, wohin das Gewicht der RUHENDEN Orders wandert —
// NICHT wohin der gehandelte Kurs läuft. Steigt sie, ziehen die Käufer ihre
// großen Gebote hoch. Zeiten kommen bereits in Broker-Zeit aus dem Bot.
if(typ == "LT")
{
if(k < 5) continue;
if(!InpShowLiqTrend) continue;
datetime t1 = (datetime)StringToInteger(p[1]);
double q1 = StringToDouble(p[2]);
datetime t2 = (datetime)StringToInteger(p[3]);
double q2 = StringToDouble(p[4]);
string td = (k > 5) ? p[5] : "";
if(t1 <= 0 || t2 <= 0 || q1 <= 0 || q2 <= 0) continue;
string nm = PFX + "LIQTREND";
if(ObjectCreate(0, nm, OBJ_TREND, 0, t1, q1, t2, q2))
{
ObjectSetInteger(0, nm, OBJPROP_COLOR, InpLiqTrendColor);
ObjectSetInteger(0, nm, OBJPROP_STYLE, STYLE_SOLID);
ObjectSetInteger(0, nm, OBJPROP_WIDTH, 2);
ObjectSetInteger(0, nm, OBJPROP_RAY_RIGHT, true);
ObjectSetInteger(0, nm, OBJPROP_RAY_LEFT, false);
ObjectSetInteger(0, nm, OBJPROP_BACK, true);
ObjectSetInteger(0, nm, OBJPROP_SELECTABLE, false);
}
else
{
ObjectMove(0, nm, 0, t1, q1);
ObjectMove(0, nm, 1, t2, q2);
}
string tl = PFX + "TLIQTREND";
string tt = "Liquiditäts-Trend " + (td == "U" ? CharToString(94) : CharToString(118));
if(ObjectCreate(0, tl, OBJ_TEXT, 0, t2, q2))
{
ObjectSetString (0, tl, OBJPROP_TEXT, tt);
ObjectSetInteger(0, tl, OBJPROP_COLOR, InpLiqTrendColor);
ObjectSetInteger(0, tl, OBJPROP_FONTSIZE, 9);
ObjectSetInteger(0, tl, OBJPROP_ANCHOR, ANCHOR_LOWER);
ObjectSetInteger(0, tl, OBJPROP_SELECTABLE, false);
}
else
{
ObjectMove(0, tl, 0, t2, q2);
ObjectSetString(0, tl, OBJPROP_TEXT, tt);
}
continue;
}
// ("Z;"-Zonen-Zeilen schreibt der Bot nicht mehr — die dynamische Handels-