Wirtschaftskalender-Blackout + Konsolidierungs-Box beschriftet
core/econ_calendar.py (NEU): High-Impact-News-Fenster als Handels-Sperre. Quelle Forex Factory JSON (kostenlos, kein Key, mit impact-Feld), beide Wochen (thisweek endet Sa, Markt oeffnet So 23:00 -> sonst blinder Fleck), 1x/h im Daemon-Thread, dedupliziert. Filter: High+USD ODER Oil/OPEC-Titel. WICHTIG - nicht gemessen: Events sind zu selten fuer eine 2-Stichproben- Aussage. Das ist die Handbuch-Regel, kein belegter Edge. Deshalb bewusst asymmetrisch: sperrt NUR die autonomen Entries (Auto-Squeeze + Auto-Signal, ohne Dedup-Marker -> feuert nach dem Fenster nach), in der Entry-Checkliste nur "warn" statt "fail". Manuelle Orders bleiben frei. Der gemessene EIA-Blackout (Mi 15:30-16:30) bleibt unabhaengig aktiv und greift auch ohne Netz. Verifiziert: Live-Fetch (EIA korrekt Mi 16:30 Berlin, FOMC/GDP/PCE erkannt) + 4 synthetische Szenarien (5 min vor/nach Event, 50 min davor, disabled). MQL5 v1.30: graue Konsolidierungs-Box beschriftet (User-Frage "was bedeutet die graue Box") - sichtbares Label an der Oberkante, rechtsbuendig wie die uebrigen: "Konsolidierung (10-Bar-Spanne)" bzw. bei Kompression "Konsolidierung - komprimiert, Ausbruch steht bevor". 0 Fehler kompiliert. Frontend v=122: #cal-note in der Meldungen-Karte (laufendes Fenster bzw. Vorwarnung <=60 min). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7e0d2a4563
commit
a6f370ac02
+16
@@ -666,6 +666,22 @@ function render(d) {
|
||||
if (txt) { ncEl.className = "news-conflict warn"; ncEl.textContent = txt; }
|
||||
else { ncEl.className = "news-conflict hidden"; ncEl.textContent = ""; }
|
||||
}
|
||||
// Wirtschaftskalender (2026-07-30): laufendes News-Fenster bzw. Vorwarnung ≤60 min.
|
||||
// ⚠ NICHT gemessen — Handbuch-Regel; der Bot pausiert im Fenster nur seine
|
||||
// AUTONOMEN Entries, manuelle Orders bleiben frei.
|
||||
const calEl = $("cal-note");
|
||||
if (calEl) {
|
||||
const c = d.calendar || {};
|
||||
let t = "";
|
||||
if (c.blackout) {
|
||||
const m = c.blackout.minutes;
|
||||
t = `📅 News-Fenster: ${c.blackout.title} ${m > 0 ? "in " + Math.round(m) + " min" : "vor " + Math.round(-m) + " min"} — Bot eröffnet gerade keine Auto-Trades`;
|
||||
} else if (c.next && c.next.minutes <= 60) {
|
||||
t = `📅 ${c.next.title} in ${c.next.minutes} min`;
|
||||
}
|
||||
if (t) { calEl.className = "news-conflict warn"; calEl.textContent = t; }
|
||||
else { calEl.className = "news-conflict hidden"; calEl.textContent = ""; }
|
||||
}
|
||||
// Schalter-Zustand: Auto-Close am S/R an/aus + Mindestgewinn
|
||||
const srBtn = $("srclose-btn");
|
||||
if (srBtn) {
|
||||
|
||||
+3
-2
@@ -6,7 +6,7 @@
|
||||
<meta name="theme-color" content="#0d1117">
|
||||
<title>Oil · MT5</title>
|
||||
<link rel="manifest" href="manifest.json">
|
||||
<link rel="stylesheet" href="style.css?v=121">
|
||||
<link rel="stylesheet" href="style.css?v=122">
|
||||
</head>
|
||||
<body>
|
||||
<!-- Modul-Menü (ganz oben) -->
|
||||
@@ -96,6 +96,7 @@
|
||||
<div class="pos-srhint hidden" id="pos-srhint"></div>
|
||||
<div class="pos-stophint hidden" id="pos-stophint"></div>
|
||||
<div class="news-conflict hidden" id="news-conflict"></div>
|
||||
<div class="news-conflict hidden" id="cal-note"></div>
|
||||
<div class="reasons" id="wave-reasons"></div>
|
||||
<div class="kv"><span>Setup</span><b id="wave-setup">—</b></div>
|
||||
<div class="kv"><span>Lauf</span><b id="wave-move">—</b></div>
|
||||
@@ -229,6 +230,6 @@
|
||||
<div id="toast" class="toast hidden"></div>
|
||||
|
||||
<script src="lightweight-charts.standalone.production.js?v=114"></script>
|
||||
<script src="app.js?v=121"></script>
|
||||
<script src="app.js?v=122"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user