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
+50
-4
@@ -429,9 +429,15 @@ function render(d) {
|
||||
const storm = (d.news_storm || {}).level;
|
||||
if (storm === "storm") stxt = `📰 NEWS-STURM · ${stxt}`;
|
||||
else if (storm === "elevated") stxt = `📰 viele News · ${stxt}`;
|
||||
// Marktstatus VOR die Session-Zeile: bei geschlossenem Markt ist die Phase
|
||||
// ("Wochenende") allein zu leise — der eingefrorene Kurs sah live aus.
|
||||
if (d.market_closed) {
|
||||
stxt = `🔒 MARKT ZU · ${stxt}`; // HL-Kurs steht jetzt im Header
|
||||
}
|
||||
$("session").textContent = stxt;
|
||||
$("session").className = "session-line " +
|
||||
(storm === "storm" ? "warn"
|
||||
(d.market_closed ? "warn"
|
||||
: storm === "storm" ? "warn"
|
||||
: (_h === 21 || _h === 22) ? "warn"
|
||||
: ses.just_opened ? "warn" : (ses.active && ses.active.length) ? "ok" : "dim");
|
||||
|
||||
@@ -464,16 +470,56 @@ function render(d) {
|
||||
}
|
||||
|
||||
// ── Header: Kurs (färbt sich nahe S/R) + G/V der offenen Position (netto) ──
|
||||
// ⚠ MARKT ZU (User 2026-08-01): Pepperstone handelt WTI nicht am Wochenende, der
|
||||
// Kurs friert dann auf dem Freitags-Stand ein — sichtbar war das NICHT (der grüne
|
||||
// Punkt im Header ist die VERBINDUNG, nicht der Marktstatus). Hyperliquid läuft
|
||||
// 24/7 weiter, also zeigen wir dessen Kurs (basis-korrigiert = MT5-vergleichbar)
|
||||
// statt des eingefrorenen — deutlich als „HL" gekennzeichnet, damit niemand ihn
|
||||
// für einen Broker-Kurs hält.
|
||||
// ⚠ Der BROKER-Kurs bleibt der Hauptkurs (erster Entwurf ersetzte ihn bei
|
||||
// geschlossenem Markt durch den HL-Kurs — der User wollte stattdessen BEIDE
|
||||
// nebeneinander, was ehrlicher ist: man sieht die Abweichung statt einer
|
||||
// stillen Vertauschung).
|
||||
$("hdr-price").textContent = m.bid != null ? fmt(m.bid) : "—";
|
||||
$("hdr-price").className = priceCls;
|
||||
$("hdr-price-lbl").textContent = d.market_closed ? "KURS · ZU" : "KURS";
|
||||
$("hdr-price-lbl").title = d.market_closed
|
||||
? `Pepperstone geschlossen — letzter Tick vor ${Math.round((d.tick_age_s || 0) / 60)} min`
|
||||
: "";
|
||||
|
||||
// Hyperliquid daneben: basis-korrigiert (= MT5-Niveau), mit Abweichung im Tooltip.
|
||||
const hl = d.hl_live || null;
|
||||
const hlEl = $("hdr-hl");
|
||||
if (hl && hl.mid_mt5 != null) {
|
||||
const arr = hl.trend === "up" ? "▲" : hl.trend === "down" ? "▼" : "";
|
||||
hlEl.textContent = fmt(hl.mid_mt5) + (arr ? " " + arr : "");
|
||||
const dv = hl.vs_mt5;
|
||||
hlEl.className = d.market_closed ? "hl-price"
|
||||
: (dv != null && Math.abs(dv) >= 0.15) ? "hl-price" : "";
|
||||
hlEl.title = `Hyperliquid xyz:CL ${fmt(hl.hl_mid)} + gemessene Basis `
|
||||
+ `${hl.basis >= 0 ? "+" : ""}${fmt(hl.basis, 3)} = ${fmt(hl.mid_mt5)} · `
|
||||
+ `${fmt(hl.age_s, 0)} s alt`
|
||||
+ (dv != null ? ` · ggü. Broker ${dv >= 0 ? "+" : ""}${fmt(dv, 3)}` : "");
|
||||
} else {
|
||||
hlEl.textContent = "—"; hlEl.className = ""; hlEl.title = "";
|
||||
}
|
||||
|
||||
const hpos = d.position || {};
|
||||
if (hpos.ticket) {
|
||||
const wht = d.wht_pct || 0;
|
||||
const raw = hpos.pnl || 0;
|
||||
// ⚠ Bei geschlossenem Markt steht der Broker-P&L still (der Kurs ist eingefroren).
|
||||
// Dann die HL-SCHÄTZUNG zeigen (User 2026-08-01) — klar als Schätzung markiert:
|
||||
// Swap/Kommission der Wochenendtage fehlen und HL ist ein anderer Kontrakt.
|
||||
const useHl = d.market_closed && d.pnl_hl != null;
|
||||
const raw = useHl ? d.pnl_hl : (hpos.pnl || 0);
|
||||
const netHdr = raw > 0 ? raw * (1 - wht / 100) : raw;
|
||||
$("hdr-pnl").textContent = (netHdr >= 0 ? "+" : "") + cs + fmt(netHdr, 2);
|
||||
$("hdr-pnl").textContent = (useHl ? "≈" : "") + (netHdr >= 0 ? "+" : "") + cs + fmt(netHdr, 2);
|
||||
$("hdr-pnl").className = netHdr > 0 ? "up" : netHdr < 0 ? "down" : "";
|
||||
} else { $("hdr-pnl").textContent = "—"; $("hdr-pnl").className = ""; }
|
||||
$("hdr-pnl").title = useHl
|
||||
? `Schätzung auf Basis des Hyperliquid-Kurses — der Broker-Kurs ist eingefroren `
|
||||
+ `(Broker-P&L ${fmt(hpos.pnl || 0, 2)} ${cs}). Ohne Swap/Kommission des Wochenendes.`
|
||||
: "";
|
||||
} else { $("hdr-pnl").textContent = "—"; $("hdr-pnl").className = ""; $("hdr-pnl").title = ""; }
|
||||
|
||||
// ── S/R-Annäherungs-Warnung (Position-Kachel) — NUR wenn kein reicherer
|
||||
// Positions-Hint (pos-srhint) läuft, sonst doppeltes „nähert sich Widerstand".
|
||||
|
||||
Reference in New Issue
Block a user