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:
co-authored by
Claude Opus 5
parent
35f9b567c8
commit
7427c36922
+41
-1
@@ -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")
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user