Hyperliquid-Kurs neben dem Broker-Kurs + G/V-Schaetzung bei geschlossenem Markt

User: "wenn Pepperstone closed ist trotzdem Kurs und Liquiditaet von
Hyperliquid einbinden" -> nachgeschaerft zu "blende den HL-Kurs NEBEN den
Pepperstone-Kurs ein" (ehrlicher als ein stiller Tausch) -> plus "bei
geschlossenem Markt auch den G/V mit HL berechnen".

Snapshot: hl_live {mid_mt5, hl_mid, basis, age_s, bid/ask, bid_sz/ask_sz,
imb5, trend, slope_per_h, vs_mt5} - IMMER befuellt. mid_mt5 = HL-Mid +
gemessene Basis, also direkt mit dem Broker-Kurs vergleichbar. Dazu
market_closed, tick_age_s, pnl_hl.
core/hl_walls.py liefert jetzt zusaetzlich hl_mid/mid_mt5/age_s.

Dashboard v=129: eigene Header-Box "HL" neben KURS mit Tooltip (Rohkurs,
Basis, Alter, Abweichung). Bei geschlossenem Markt: Label "KURS · ZU",
Session-Zeile "MARKT ZU", und das G/V wechselt auf die HL-Schaetzung, mit
"≈" markiert.

MT5 v1.34: HL;<mt5_aequiv>;<alter>;<bid>;<ask>;<U|D|-> -> bernsteinfarbenes
Label unter Kurs und G/V (InpShowHL/InpHLColor).

DREI SACKGASSEN dokumentiert, damit sie niemand wiederholt:
1) tick_local_ts ist die ABHOLZEIT, nicht das Tick-Alter.
2) tick_server_ts minus _broker_offset_s() ist ZIRKULAER - die
   Offset-Funktion leitet den Versatz selbst aus dem letzten Tick ab und
   misst bei geschlossenem Markt die Veraltung (-7,41 h statt +3 h); das
   Alter hebt sich auf (-347 s).
3) pnl / Kursbewegung als EUR-je-Punkt ergab 155 statt ~86, weil
   trader.pnl den Wochenend-Swap enthaelt.

Verwendet wird stattdessen: Markt zu = der Kurs hat sich seit 180 s nicht
BEWEGT (_last_bid/_last_bid_move_ts). Und der G/V nutzt die vorhandene,
korrekte trader.live_pnl(bid, ask) mit dem HL-Kurs +- halbem Spread.

Live verifiziert: market_closed=True nach 198 s, Broker 86.333 eingefroren,
HL 86.349 (7 s alt), Broker-P&L -15,02 -> HL-Schaetzung -14,37 EUR.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-01 09:31:01 +02:00
co-authored by Claude Opus 5
parent 35f9b567c8
commit 7427c36922
7 changed files with 264 additions and 9 deletions
+41 -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.33"
#property version "1.34"
// v1.34 (2026-08-01): HYPERLIQUID-KURS (HL;...) unter Kurs und G/V oben rechts,
// bernstein. HL handelt 24/7, Pepperstone nicht - am Wochenende der einzige
// lebende Kurs; die Basis (~0,45 $ Kontrakt-Differenz) ist herausgerechnet,
// der Wert also direkt mit dem Broker-Kurs vergleichbar. InpShowHL/InpHLColor.
// v1.33 (2026-07-31): Konsens-Pfeil (K) per Default AUS + Pfeile kuerzer (8 statt
// 14 Bars). Grund: L und K starten am selben Punkt und zeigten oft in
// ENTGEGENGESETZTE Richtungen - zwei divergierende Linien aus einem Punkt
@@ -185,6 +189,8 @@ input color InpArrConsensus = C'139,148,158'; // Konsens der Module (NICHT kali
input bool InpShowConsensus = false; // Konsens-Pfeil zusaetzlich zeichnen
input int InpArrBars = 8; // Pfeil-Laenge in Bars (kuerzer = Spitze sichtbar)
input color InpConeColor = C'139,148,158'; // Kegel-Farbe (neutral grau - bewusst KEINE Richtungsfarbe)
input bool InpShowHL = true; // Hyperliquid-Kurs unter dem Broker-Kurs
input color InpHLColor = C'232,160,0'; // HL-Kurs (bernstein, klar unterscheidbar)
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)
@@ -798,6 +804,40 @@ void Redraw()
ObjectSetString(0, atn, OBJPROP_TEXT, " " + a_txt);
continue;
}
// HYPERLIQUID-KURS unter dem Broker-Kurs: HL;<mt5_aequiv>;<alter_s>;<bid>;<ask>;<U|D|->
// HL (`xyz:CL`) handelt 24/7, Pepperstone nicht - am Wochenende der einzige
// lebende Kurs. Bereits basis-korrigiert, also direkt vergleichbar.
if(typ == "HL")
{
if(k < 6) continue;
if(!InpShowHL) continue;
double hlp = StringToDouble(p[1]);
if(hlp <= 0) continue;
int hage = (int)StringToInteger(p[2]);
string htr = p[5];
string hn = PFX + "HLPX";
if(ObjectFind(0, hn) < 0)
{
ObjectCreate(0, hn, OBJ_LABEL, 0, 0, 0);
ObjectSetInteger(0, hn, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(0, hn, OBJPROP_XDISTANCE, 12);
// unter Kurs (14) und G/V (14+PriceSize+6) einreihen
ObjectSetInteger(0, hn, OBJPROP_YDISTANCE, 14 + InpPriceSize + 6 + InpPriceSize - 4);
ObjectSetInteger(0, hn, OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);
ObjectSetInteger(0, hn, OBJPROP_SELECTABLE, false);
ObjectSetString (0, hn, OBJPROP_FONT, "Arial");
}
ObjectSetInteger(0, hn, OBJPROP_FONTSIZE, (int)MathMax(10, InpPriceSize - 7));
ObjectSetInteger(0, hn, OBJPROP_COLOR, InpHLColor);
ObjectSetString (0, hn, OBJPROP_TEXT,
"HL " + DoubleToString(hlp, (int)_Digits)
+ (htr == "U" ? " ^" : htr == "D" ? " v" : ""));
ObjectSetString (0, hn, OBJPROP_TOOLTIP,
"Hyperliquid xyz:CL, basis-korrigiert auf MT5-Niveau - "
+ IntegerToString(hage) + " s alt. Waende "
+ p[3] + " / " + p[4]);
continue;
}
// AKTUELLER KURS oben rechts, fett (User-Wunsch): PX;bid
if(typ == "PX")
{