Live-Code von Backtest-Skript entkoppelt: core/squeeze_scan.py
core/engine.py (squeeze_monitor) und weekly_review.py importierten
backtest_breakout_squeeze - die Abhaengigkeitsrichtung war verkehrt:
ein Fehler im Backtest konnte den laufenden Bot treffen.
Schwerer wog, WIE die Parameter hineinkamen:
BQ._N = _SQ_N; BQ._K = _SQ_K
Das mutiert Modul-Globale eines Backtests, wirkt prozessweit und damit auf
jeden anderen Nutzer desselben Moduls im selben Prozess. Die Werte weichen
real ab (Backtest _N=12, live _SQ_N=10).
Geloest ueber core/squeeze_scan.py - Parameter stehen in der Signatur.
backtest_breakout_squeeze.py leitet nur noch weiter, damit es EINE
Implementierung gibt statt zweier (der sim_run/_ema_series-Fehler).
Der Exit ist bewusst NICHT mitrepariert: exit_legacy ist eine bitgenaue
Kopie inkl. seiner Abweichungen vom kanonischen Exit (Trail 1,5 statt 1,0,
kein Lock/Time-Stop/TP, max_hold 288 statt 200). Damit misst der B4-Monitor
gegen einen veralteten Exit - separater, offener Befund. Ihn hier still
mitzuaendern haette die Vergleichsgrundlage verschoben.
Bitgenauigkeit bewiesen (tests/test_squeeze_scan.py): die alte Fassung liegt
eingefroren im Test und laeuft gegen die neue ueber 500 synthetische Reihen
x 3 Multiplikatoren. Ein Vorher/Nachher-Lauf waere ungueltig gewesen - der
Backtest zieht Bars live aus MT5, das Fenster verschiebt sich staendig.
Test selbst per Mutationsprobe geprueft: 5 von 6 eingebauten Fehlern schlagen
an, der sechste (d>0 -> d>=0) ist beweisbar aequivalent, da d nur +-1 ist.
Live-Gegenprobe auf 9000 M5-Bars: n=112, Treffer 44%, OeR +0,178, PF 1,26.
Aktivierung beim naechsten Neustart - bei offener Position kein Neustart fuer
eine verhaltensneutrale Aenderung.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
a35a0e7006
commit
fd3c7f57a5
+7
-4
@@ -43,12 +43,15 @@ def _squeeze_section(m5) -> list:
|
||||
if not m5 or len(m5.get("C") or []) < 300:
|
||||
return ["", "SQUEEZE-BREAKOUT (B4): keine M5-Daten — übersprungen."]
|
||||
try:
|
||||
import backtest_breakout_squeeze as BQ
|
||||
# ⚠ s. Kommentar in `engine.squeeze_monitor`: die Mechanik liegt jetzt in
|
||||
# `core/squeeze_scan.py`, die Live-Parameter stehen in der Signatur statt
|
||||
# als mutierte Modul-Globale eines Backtests.
|
||||
from core.squeeze_scan import atr_series, scan
|
||||
from core.wave_rec import _SQ_N, _SQ_MULT, _SQ_K
|
||||
BQ._N = _SQ_N; BQ._K = _SQ_K # live-Params in den Scanner
|
||||
H, L, C, SP = m5["H"], m5["L"], m5["C"], m5["SP"]
|
||||
A = BQ._atr_series(H, L, C)
|
||||
sq, _ = BQ.scan(H, L, C, A, SP, 1.0, 0, len(C), _SQ_MULT) # SP schon in Preis
|
||||
A = atr_series(H, L, C)
|
||||
sq, _ = scan(H, L, C, A, SP, 1.0, 0, len(C), _SQ_MULT,
|
||||
box_n=_SQ_N, k=_SQ_K) # SP schon in Preis
|
||||
out = ["", "-" * 92,
|
||||
f"SQUEEZE-BREAKOUT (B4-Monitor · ~30 Tage M5 neu gerechnet · live-Params "
|
||||
f"Box={_SQ_N}/k={_SQ_K}/≤{_SQ_MULT}×ATR):"]
|
||||
|
||||
Reference in New Issue
Block a user