Kosten-Gate gegen Stunden-Gate gemessen: Nachtsperre ist auf falscher Population begruendet
backtest_cost_gate.py — echte _squeeze_one, kanonischer Exit, Echtkosten,
80k M5, 2 Halbjahre, geteilte Entry-Liste + sequentielle 1-Slot-Sim.
(a) Kein Kosten-Gate ersetzt das Stunden-Gate nach der vorab fixierten Regel.
(b) Das Stunden-Gate selbst kostet in BEIDEN Haelften: sequentiell SigmaR
-42 (H1) / -243 (H2) gegen "kein Gate". Die geblockten Ausbrueche sind
in beiden Haelften positiv (OeR +0,496/+0,589).
Mechanismus belegt: die Nacht-Kostenfalle ist echt (alle Nacht-Bars Median
0,333 / Mittel 0,387 xATR, reproduziert backtest_realcosts), gilt aber nicht
fuer Squeeze-Ausbrueche (0,183/0,191 = Tag-Niveau). Der Squeeze verlangt
anziehenden ATR und selektiert sich damit aus der Falle heraus. Gemessen am
Wellensignal, angewandt auf den Squeeze = Deployment-Drift Fall 6.
KEINE Aenderung vorgenommen: Slippage ist nicht modelliert (groesste
Bedrohung des Befunds), die duenne Live-Stichprobe sagt das Gegenteil, und
der Beaufsichtigungs-Grund ist eine Praeferenz. auto_squeeze_skip_night
bleibt true.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c9f1e8d039
commit
cdee6eced7
@@ -1454,9 +1454,57 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
**Kosten**-Aussage (Spread÷ATR 0,32–0,50). In dieser Nacht lagen die realen Kosten
|
||||
bei **0,11–0,22×ATR**, also klar UNTER der Falle — weil der ATR hoch war. Ein
|
||||
**kosten-basiertes statt stunden-basiertes Gate** („blocke, wenn Spread/ATR > X")
|
||||
würde genau solche Nächte durchlassen und ruhige weiter sperren. **Ungemessen** —
|
||||
vor dem Bau 2-Stichproben-Test gegen das Stunden-Gate; und es hebelt den
|
||||
Beaufsichtigungs-Grund aus, ist also zusätzlich eine User-Entscheidung.
|
||||
würde genau solche Nächte durchlassen und ruhige weiter sperren.
|
||||
⚠⚠ **GEMESSEN am selben Tag (`backtest_cost_gate.py`, 80k M5, 2 Halbjahre,
|
||||
kanonischer Exit, Echtkosten, ECHTE `_squeeze_one`) — und das Ergebnis fällt
|
||||
anders aus als die Frage lautete.**
|
||||
**(a) Kein Kosten-Gate ersetzt das Stunden-Gate** nach der vorab fixierten Regel
|
||||
(ΣR **und** ØR in beiden Hälften ≥ Stunden-Gate, plus Nachbar-Schwellen): alle 7
|
||||
Schwellen 0,15–0,50 fallen durch.
|
||||
**(b) Der eigentliche Befund: das STUNDEN-Gate selbst kostet Geld — in BEIDEN
|
||||
Hälften.** Sequentiell mit EINEM Positions-Slot (die konto-relevante Rechnung;
|
||||
ein geblockter Nacht-Trade gibt den Slot frei):
|
||||
| Variante | H1 ΣR | H2 ΣR |
|
||||
|---|---|---|
|
||||
| **ohne Gate** | **+369,5** | **+778,1** |
|
||||
| Stunden-Gate 0–7 (live) | +327,1 | +535,5 |
|
||||
| Kosten-Gate 0,30 | +356,3 | +760,1 |
|
||||
| Kosten-Gate 0,35 | +369,3 | +781,9 |
|
||||
→ das Live-Gate kostet **−42 R (H1) und −243 R (H2)**. Die von ihm GEBLOCKTEN
|
||||
Ausbrüche sind in beiden Hälften **positiv** (ØR +0,496/+0,589) — in H1 sogar
|
||||
besser als die behaltenen (+0,382). Es wirft gute Trades weg.
|
||||
⚠⚠ **MECHANISMUS BELEGT — die Nachtsperre ist auf der FALSCHEN Population
|
||||
begründet (Deployment-Drift, Fall 6).** Die Nacht-Kostenfalle ist echt und
|
||||
reproduziert (`backtest_realcosts.py`): über ALLE Nacht-Bars Median **0,333** /
|
||||
Ø **0,387** ×ATR gegen Tag 0,163/0,185. **Aber der Squeeze feuert dort gar nicht** —
|
||||
er verlangt einen Ausbruch, also anziehenden ATR. Seine Nacht-Ausbrüche kosten nur
|
||||
**Median 0,183 / Ø 0,191** (Tag 0,156/0,162), liegen also praktisch auf Tag-Niveau
|
||||
und weit unter der Falle. **Der Squeeze selektiert sich aus der Kostenfalle
|
||||
heraus.** Gemessen wurde die Falle am Wellensignal, angewandt wird das Gate auf den
|
||||
Squeeze — dieselbe Fehlerklasse wie bei der 15-Minuten-Regel (auf Wave-Entries
|
||||
kalibriert, auf alle Bot-Trades angewandt, auf Squeeze gemessen schädlich).
|
||||
⚠ Nebenbefund: **ein Kosten-Gate TRENNT tatsächlich** in die richtige Richtung
|
||||
(bei 0,30 hat die geblockte Gruppe H1 WR 44,9 % / ØR +0,175 gegen +0,485 behalten)
|
||||
— nur ist auch sie noch positiv, deshalb kostet jedes Blocken ΣR. Bester ΣR-Wert
|
||||
ist 0,35, und der blockt praktisch nichts mehr (1 bzw. 10 Trades) = faktisch „kein
|
||||
Gate".
|
||||
⚠ **Methodik-Lehre zur eigenen Regel:** „ΣR UND ØR ≥ Referenz" ist als
|
||||
Entscheidungsregel schlecht spezifiziert, wenn die Varianten unterschiedlich viele
|
||||
Trades handeln — ØR und ΣR laufen dann mechanisch gegeneinander (0,30 schlägt das
|
||||
Stunden-Gate im ΣR um +29/+225, verfehlt das ØR in H2 um 0,004). Die Regel wurde
|
||||
**nicht nachträglich gelockert**; stattdessen ist der Vergleich „Gate gegen KEIN
|
||||
Gate" separat ausgewiesen — er stand ohnehin in derselben Tabelle.
|
||||
⚠⚠ **DREI Gründe, warum daraus NICHT automatisch „Nachtsperre aus" folgt:**
|
||||
(1) **Slippage ist nicht modelliert** — nachts ist das Buch dünner, der gemessene
|
||||
Tail liegt bei 0,75×ATR über den Stop hinaus (`analyze_execution.py`). Das trifft
|
||||
Nacht-Trades selektiv und ist die größte Bedrohung des Befunds. (2) **Live sagt das
|
||||
Gegenteil**, wenn auch dünn: von den 31 Squeeze-Trades des B4-Fensters waren 12
|
||||
Nacht-Trades mit **−78,92 €** — allerdings alle VOR den Exit-Reparaturen vom 31.07.
|
||||
(P(break) nachtrainiert, 15-Min-Regel aus, Trail 1,5→1,0). (3) Der
|
||||
**Beaufsichtigungs-Grund** („kein Trade soll feuern, während ich schlafe",
|
||||
User-Vorgabe 2026-07-24) ist eine Präferenz und wird von keiner Zahl berührt.
|
||||
✅ **Deshalb KEINE Änderung vorgenommen** — `auto_squeeze_skip_night` bleibt `true`.
|
||||
Die Messung liegt vor, die Entscheidung ist eine Nutzungs-, keine Messfrage.
|
||||
**Stop-&-Reverse = AUS (Default, `[trading] auto_squeeze_reverse=false`,
|
||||
`_squeeze_reverse`; User-Vorgabe 2026-07-17):** War kurz scharf, dann abgeschaltet —
|
||||
nur der **flat-Entry ist gemessen-validiert**, der Reverse ist unbelegt, verdoppelt
|
||||
@@ -2772,6 +2820,7 @@ Bedingungen BETRIEBEN als VALIDIERT. An EINEM Tag wurden drei Fälle gefunden:
|
||||
| 2 | `breakout_k=0,3` | **feste** Zeitebene | TF wechselt 33×/Tag, löscht den Anker | 43 % → **93 % WARTEN** |
|
||||
| 3 | Trailing `mult` | **1,5** | **1,5–3,0** je nach TF | H1 ΣR −249 → **−1367**, Worst −1,50 → −2,50 |
|
||||
| 4 | `_broker_offset_s()` | **frischem** Tick | Tick beliebig alt (Wochenende) | Offset **−9,5 h statt +3 h** → `open_time` 12,5 h in der Zukunft, **Time-Stop-Alter negativ** |
|
||||
| 6 | `auto_squeeze_skip_night` | Nacht-Kostenfalle am **Wellensignal** (alle Nacht-Bars: 0,333×ATR) | **Squeeze**-Ausbrüche, die nur bei anziehendem ATR feuern (0,183×ATR = Tag-Niveau) | Gate kostet ΣR **−42 (H1) / −243 (H2)**; geblockte Ausbrüche sind in beiden Hälften positiv |
|
||||
| 5 | `backtest_auto_signal.py` | **ohne Winkel** (`_build` ohne `angle=` → Default 90 → `ad=0`) | Winkel steuert einen **Signalzweig** (Reversal) UND **±15 Konfidenzpunkte** | Urteil vom 30.07. beschrieb weder das alte noch das neue System; der Winkelterm allein hebt H1 bei conf 75 von **−0,123 auf −0,047** |
|
||||
|
||||
Keiner wäre durch MEHR Backtesting gefunden worden — die Backtests waren korrekt.
|
||||
|
||||
Reference in New Issue
Block a user