MQL5 v1.29: Konsolidierungs-Box als Anzeige (CO;lo;hi;tight)

User: "schauen wir uns das mal an" (nach dem verworfenen Konsolidierungs-Backtest).

Der Bot exportiert die Spanne der letzten 10 M5-Bars -- exakt die Box, aus der der
validierte Squeeze-Ausbruch kommt (wave._squeeze_one liefert jetzt box_hi/box_lo in
allen Rueckgaben). Der Indikator zeichnet sie als transparentes blaues Rechteck;
ist sie KOMPRIMIERT (<=2.5xATR, also armed/active), wird sie mit doppelter Deckkraft
gezeichnet -> "Ausbruch steht bevor" ist auf einen Blick sichtbar.

Schalter: InpShowConsol / InpConsolColor / InpConsolAlpha / InpConsolBars.

⚠ REINE ANZEIGE. Alle Konsolidierungs-SETUPS sind gemessen verworfen
(backtest_consolidation.py: False Breakout, Distribution, Accumulation, Retest --
inkl. Kontrolltest, der die Distribution-Hypothese kippte). Die Box zeigt WO
gestaut wird, nicht WOHIN es geht. Validiert ist ausschliesslich der Ausbruch.

Verifiziert: CO;84.105;84.815;0 (0.710$ = 2.68xATR = knapp ueber der Schwelle,
daher korrekt als "nicht komprimiert" markiert).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-07-30 20:14:11 +02:00
co-authored by Claude Opus 4.8
parent 0d2d8679a7
commit 11e13cdb5a
4 changed files with 75 additions and 6 deletions
+15
View File
@@ -2024,6 +2024,21 @@ class TradingEngine:
lines.append(f"EQ;{tag};{z['lo']};{z['hi']};{int(z['t'])}")
except Exception:
pass
# KONSOLIDIERUNGS-BOX (M5, dieselbe wie der validierte Squeeze):
# CO;lo;hi;<0|1> — letztes Feld 1 = komprimiert (≤2,5×ATR, Ausbruch steht
# bevor), 0 = nur die aktuelle 10-Bar-Spanne. ⚠ REINE ANZEIGE: die
# Konsolidierungs-SETUPS (False Breakout, Distribution, Accumulation,
# Retest) sind gemessen ALLE verworfen (`backtest_consolidation.py`);
# validiert ist nur der Squeeze-AUSBRUCH. Die Box zeigt also, WO gerade
# gestaut wird — nicht, wohin es geht.
try:
_sq = (self.wave.snapshot() or {}).get("squeeze") or {}
_lo, _hi = _sq.get("box_lo"), _sq.get("box_hi")
if _lo and _hi and _hi > _lo:
_tight = 1 if _sq.get("state") in ("armed", "active") else 0
lines.append(f"CO;{_lo};{_hi};{_tight}")
except Exception:
pass
# Aktueller Kurs für die fette Anzeige oben rechts (User-Wunsch): PX;bid
try:
_bid = (self.data.snapshot() or {}).get("bid")