backtest_squeeze_m1.py: Squeeze auf M1 gemessen (Variante B)
Nicht ausgeschlossen — aber in JEDER Variante schlechter je Trade als die M5-Kontrolle auf demselben Fenster (beste M1-Variante +0,474/+0,387 gegen +0,605/+0,491). Alle Nachbar-Parameter halten, Einstiegs-Slippage bis 0,20xATR haelt, der skalierte ATR-Floor erzeugt den Befund nicht (Kontrolle ohne Floor bestaetigt), Broker blockt nicht (trade_stops_level = 0). Entscheidend ist die EXIT-Slippage, und sie trifft M1 doppelt so hart, weil sie absolut ist: M1 kippt bei ~0,04 $, M5 erst bei ~0,09 $ (Faktor 2,2 = das ATR-Verhaeltnis). Gemessener Median 0,017 $ -> beide halten; gemessener Ø 0,234 $ -> beide fallen. Die entscheidende Zahl — Slippage bedingt auf Haltedauern <30 min — ist ungemessen. Urteil: nicht umstellen. M1s Vorteil kommt allein aus der 4,3-fachen Frequenz, und genau die multipliziert die ungemessene Groesse. Zwei Methodik-Lehren dokumentiert: der Haertetest lief zuerst auf der schwaechsten statt der besten Variante (Auswahl nach Reihenfolge statt nach Ergebnis), und die Regel "nicht schlechter als die Kontrolle" war wieder unterspezifiziert (ØR und ΣR zeigen gegenlaeufig) — deshalb gibt zeig() jetzt beide Spalten aus. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c888bcc3e8
commit
92187d7d32
@@ -329,6 +329,68 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
10–17 Uhr, mit ruhender Stop-Order. Das ist kein neues Signal, sondern eine
|
||||
validierte Regel auf einer feineren Ebene; die 80 Tage reichen für ein
|
||||
**Ausschluss**-Urteil (nicht für eine Bestätigung).
|
||||
- **⚠⚠ SQUEEZE AUF M1 (Variante B) GEMESSEN — NICHT ausgeschlossen, aber in JEDER
|
||||
Variante schlechter je Trade als M5; die Entscheidung hängt an EINER ungemessenen
|
||||
Zahl (`backtest_squeeze_m1.py`, 2026-08-06).** 80.000 M1-Bars (18.05.–06.08.),
|
||||
echte `_squeeze_one`-Regel, Einstieg als ruhende Stop-Order am Level, kanonischer
|
||||
Exit, Echtkosten, sequentiell EIN Slot, **M5-Kontrolle auf DEMSELBEN Fenster**
|
||||
(weil beide Hälften im selben Regime liegen — der interne Vergleich ist der
|
||||
belastbare Teil, nicht die Absolutwerte).
|
||||
| Variante | H1 ØR / ΣR | H2 ØR / ΣR | n (H1) |
|
||||
|---|---|---|---|
|
||||
| **M5-Kontrolle** (live laufende Ebene) | **+0,605 / +163** | **+0,491 / +132** | 270 |
|
||||
| A) M1, Stop aus ATR_M1, alle Stunden | +0,405 / **+473** | +0,385 / **+476** | 1168 |
|
||||
| **C) A + nur 10–17 Uhr** (beste M1) | **+0,474 / +201** | **+0,387 / +189** | 424 |
|
||||
| B) M1-Einstieg, Stop aus ATR_M5 | +0,207 / +176 | +0,137 / +118 | 848 |
|
||||
| D) B + nur 10–17 Uhr | +0,231 / +73 | +0,130 / +44 | 316 |
|
||||
| A ohne ATR-Floor (Selektions-Kontrolle) | +0,385 / +457 | +0,342 / +442 | 1186 |
|
||||
**Nichts fällt durch:** alle Varianten beidhälftig positiv, alle 5 Nachbar-Kombis
|
||||
(Box 10/15/20 × k 0,1/0,2) ebenfalls, Einstiegs-Slippage hält bis 0,20×ATR
|
||||
(+0,254/+0,130). Auch die Selektions-Kontrolle ohne ATR-Floor bestätigt — der
|
||||
massstabsgerecht skalierte Floor (0,024 statt 0,06) erzeugt den Befund nicht.
|
||||
Kein Broker-Hindernis: `trade_stops_level = 0`, ein 2×ATR_M1-Stop (0,159 $) ist
|
||||
platzierbar.
|
||||
⚠⚠ **DER ENTSCHEIDENDE BEFUND IST DIE EXIT-SLIPPAGE — und sie trifft M1 doppelt
|
||||
so hart, genau wie vorhergesagt.** Slippage ist eine **absolute** Größe; sie frisst
|
||||
von einem kleinen M1-Stop einen viel größeren Anteil. In DOLLAR angesetzt, auf
|
||||
beide Ebenen gleich:
|
||||
| Exit-Slippage | M1 (Variante C) | M5-Kontrolle |
|
||||
|---|---|---|
|
||||
| 0,000 $ | +0,474 / +0,387 | +0,605 / +0,491 |
|
||||
| **0,017 $** (gemessener **Median**) | +0,309 / +0,196 | +0,511 / +0,384 |
|
||||
| **0,050 $** | **−0,012 / −0,175 ❌** | +0,330 / +0,176 |
|
||||
| 0,100 $ | −0,499 / −0,737 ❌ | −0,139 (H2) ❌ |
|
||||
**M1 kippt bei ~0,04 $, M5 erst bei ~0,09 $** — Faktor ~2,2, praktisch das
|
||||
ATR-Verhältnis (0,198/0,079 = 2,5). Gemessen (`analyze_execution.py`):
|
||||
**Median 0,017 $** (beide halten) · **Ø 0,234 $** (beide fallen, M1 weit
|
||||
deutlicher) · Max 4,192 $.
|
||||
⚠ **Was fehlt, ist genau die entscheidende Zahl:** die Slippage-Verteilung
|
||||
**bedingt auf kurze Intraday-Haltedauern**. Ein M1-Trade lebt ≤24 min
|
||||
(`LIVE.timestop`=24 Bars), hat also kaum Gap-Exposure — der Ø von 0,234 $ stammt
|
||||
aus wenigen Ausreißern länger gehaltener Trades (4,192 nahe Marktschluss). Aber
|
||||
**2 der 5 großen Fälle waren intraday** (30.07. 09:35 = 0,971 $ · 30.06. 15:36 =
|
||||
0,751 $), und beide liegen im 10–17-Fenster der Variante C. Überschlag: ~0,8 %
|
||||
solcher Trades ergäben zusammen mit dem Median ~0,024 $ — **unter, aber nah an
|
||||
der M1-Kippgrenze**. Das ist ein Überschlag, keine Messung.
|
||||
✅ **Urteil: NICHT umstellen.** Nicht weil M1 durchfällt, sondern weil (a) es je
|
||||
Trade in **jeder** Variante unter M5 liegt, (b) beide um denselben EINEN
|
||||
Positions-Slot konkurrieren, (c) der Vorteil ausschließlich aus der 4,3-fachen
|
||||
Frequenz kommt — und genau diese Frequenz multipliziert die Slippage, deren wahre
|
||||
Höhe ungemessen ist. **Der eine billige, entscheidende nächste Schritt** wäre, die
|
||||
Exit-Slippage aus der echten Trade-Historie **nach Haltedauer** auszuwerten: liegt
|
||||
sie für <30-min-Trades unter ~0,03 $, ist M1 ernsthaft ein Kandidat; darüber ist
|
||||
es erledigt.
|
||||
⚠ **Zwei Methodik-Lehren aus dem Lauf selbst:**
|
||||
(1) **Der Härtetest lief zuerst auf der SCHWÄCHSTEN Variante.** `beste = "D" if …`
|
||||
wählte nach Reihenfolge statt nach Ergebnis — D (+0,231/+0,130) statt C
|
||||
(+0,474/+0,387). Ein Robustheitstest auf der falschen Variante beweist nichts.
|
||||
(2) **Die vorab fixierte Regel „nicht schlechter als die M5-Kontrolle" war wieder
|
||||
unterspezifiziert** — M1 verliert in ØR und gewinnt in ΣR um das Dreifache.
|
||||
Dieselbe Falle wie am 05.08. beim Kosten-Gate. Die Regel wurde **nicht
|
||||
nachträglich gelockert**; stattdessen zeigt `zeig()` jetzt beide Spalten, damit
|
||||
die Auswahl nicht stillschweigend passiert.
|
||||
⚠ **80 Tage = EIN Regime** (Broker-Deckel). Ein ✅ heißt hier „nicht
|
||||
ausgeschlossen", **nicht** „bestätigt".
|
||||
Snapshot **`wave.squeeze {state, dir, level, box_atr}`**: `active` = Ausbruch (echtes
|
||||
Signal LONG/SHORT) · `armed` = komprimiert, Ausbruch steht bevor · None = keine
|
||||
Kompression (transient — der Ausbruch weitet die Box, Signal klärt sich selbst).
|
||||
|
||||
Reference in New Issue
Block a user