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:
co-authored by
Claude Opus 4.8
parent
b77b3d60f5
commit
919fe61dc3
+31
-2
@@ -874,8 +874,37 @@ document.querySelectorAll(".btn[data-side]").forEach(btn => {
|
||||
if (btn.disabled) return;
|
||||
const side = btn.dataset.side;
|
||||
if (side === "long" || side === "short") {
|
||||
const info = recInfo(side); // WARTEN/Gegen-Signal → Hinweis, der
|
||||
if (info.danger) { // bestätigt werden muss (kein Block)
|
||||
// ── Entry-Checkliste (User-Vorgabe 2026-07-30): zeigt VOR der Eröffnung,
|
||||
// was dagegen spricht — auch dann, wenn ein Signal da ist (der alte Dialog
|
||||
// kam nur bei WARTEN/Gegen-Signal). Blockt nicht, macht nur sichtbar.
|
||||
const cl = (lastSnap.checklist || {})[side];
|
||||
const info = recInfo(side);
|
||||
if (cl && (cl.fails > 0 || cl.warns > 0)) {
|
||||
const ICON = { fail: "❌", warn: "⚠", ok: "✅" };
|
||||
const bad = cl.items.filter(x => x.state !== "ok");
|
||||
const good = cl.items.filter(x => x.state === "ok");
|
||||
let body = bad.map(x => `${ICON[x.state]} ${x.label}`
|
||||
+ (x.detail ? `\n ${x.detail}` : "")).join("\n");
|
||||
if (good.length) body += `\n\n${good.map(x => `✅ ${x.label}`).join("\n")}`;
|
||||
// Eigene Zahlen zur Ausrichtung ergänzen (gemessene Kern-Leckage)
|
||||
const al = lastSnap.alignment || null;
|
||||
const sigNow = (lastSnap.wave_signal || {}).signal || "WARTEN";
|
||||
const isWait0 = (sigNow === "WARTEN" || sigNow === "—");
|
||||
if (al && cl.items.some(x => x.key === "signal" && x.state === "fail")) {
|
||||
const grp = isWait0 ? al.none : al.against, ref = al.with;
|
||||
const f = g => (g && g.n >= 5)
|
||||
? `${g.wr}% Treffer · ${g.pnl >= 0 ? "+" : ""}${fmt(g.pnl, 0)} € (n${g.n})` : null;
|
||||
const own = f(grp), rf = f(ref);
|
||||
if (own) body += `\n\n📊 Deine Trades ${isWait0 ? "OHNE" : "GEGEN"} Signal: ${own}`;
|
||||
if (rf) body += `\n📊 Mit Signal: ${rf}`;
|
||||
}
|
||||
const head = cl.verdict === "stop"
|
||||
? `🛑 Checkliste sagt NEIN (${cl.fails} Punkte dagegen)`
|
||||
: `⚠ Checkliste: ${cl.fails} dagegen, ${cl.warns} Vorsicht`;
|
||||
const ok = await modal(head, body + `\n\n${side.toUpperCase()} trotzdem eröffnen?`,
|
||||
"confirm", true);
|
||||
if (!ok) return;
|
||||
} else if (info.danger) { // Fallback: alter Hinweis (kein Block)
|
||||
const sig = (lastSnap.wave_signal || {}).signal || "WARTEN";
|
||||
const isWait = (sig === "WARTEN" || sig === "—");
|
||||
const head = isWait
|
||||
|
||||
Reference in New Issue
Block a user