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:
Axel Hocks
2026-07-30 22:58:58 +02:00
co-authored by Claude Opus 5
parent 7e0d2a4563
commit a6f370ac02
6 changed files with 284 additions and 8 deletions
+28 -6
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.29"
#property version "1.30"
// v1.30 (2026-07-30): 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".
// v1.29 (2026-07-30): KONSOLIDIERUNGS-BOX (CO;lo;hi;tight) — die Spanne der letzten
// 10 M5-Bars, aus der der validierte Squeeze-Ausbruch kommt. Komprimiert
// (<=2,5xATR) wird sie deutlicher gezeichnet. ⚠ REINE ANZEIGE: alle
@@ -621,11 +625,29 @@ void Redraw()
ObjectSetInteger(0, cn, OBJPROP_COLOR,
BlendBg(InpConsolColor, tight ? InpConsolAlpha * 2
: InpConsolAlpha));
ObjectSetString (0, cn, OBJPROP_TOOLTIP,
(tight ? "Konsolidierung (komprimiert - Ausbruch steht bevor)"
: "aktuelle 10-Bar-Spanne")
+ " " + DoubleToString(clo, (int)_Digits) + " - "
+ DoubleToString(chi, (int)_Digits));
string ctip = (tight ? "Konsolidierung (komprimiert - Ausbruch steht bevor)"
: "aktuelle 10-Bar-Spanne")
+ " " + DoubleToString(clo, (int)_Digits) + " - "
+ DoubleToString(chi, (int)_Digits);
ObjectSetString (0, cn, OBJPROP_TOOLTIP, ctip);
// SICHTBARE BESCHRIFTUNG (User-Frage 2026-07-30 „was bedeutet die graue Box"):
// eigenes OBJ_TEXT an der OBERKANTE, rechtsbündig wie alle anderen Labels
// (Name mit PFX+"T" → RepositionLabels() führt es beim Scrollen nach).
string ctn = PFX + "TCONSOL";
if(ObjectCreate(0, ctn, OBJ_TEXT, 0, RightTime(), chi))
{
ObjectSetInteger(0, ctn, OBJPROP_COLOR, InpLabelColor);
ObjectSetInteger(0, ctn, OBJPROP_FONTSIZE, InpLabelSize);
ObjectSetInteger(0, ctn, OBJPROP_ANCHOR, ANCHOR_RIGHT_LOWER);
ObjectSetInteger(0, ctn, OBJPROP_BACK, false);
ObjectSetInteger(0, ctn, OBJPROP_SELECTABLE, false);
}
else
ObjectMove(0, ctn, 0, RightTime(), chi);
ObjectSetString(0, ctn, OBJPROP_TEXT,
tight ? "Konsolidierung - komprimiert, Ausbruch steht bevor"
: "Konsolidierung (10-Bar-Spanne)");
ObjectSetString(0, ctn, OBJPROP_TOOLTIP, ctip);
continue;
}
// AKTUELLER KURS oben rechts, fett (User-Wunsch): PX;bid