Erfolgskontrolle fuer den Stop-Order-Umbau: Skript + Reminder
analyze_squeeze_entry_gap.py fuehrt die zwei noetigen Quellen zusammen - das Ausbruchs-Level steht NUR im Log, der tatsaechliche Fill NUR in trades - und splittet am Umbau-Stichtag. Die Erfolgsmeldung ist paradox: eine per Pending gefuellte Order erzeugt KEINE AUTO-SQUEEZE-ENTRY-Logzeile (die entsteht nur im Market-Fallback), Squeeze-Trades ohne Log-Treffer sind also der Erfolg. Das Skript weist sie deshalb getrennt aus. Als Messung squeeze_entry_gap im measurement_reminder.py hinterlegt (>=12 Squeeze-Trades ab dem Umbau). Stichtag exakt 05.08. 08:55 statt Mitternacht - der 08:33-Trade lief noch ueber die Market-Order und haette die Zaehlung verfaelscht (0/12 statt faelschlich 1/12). Zahlen-Korrektur: die zuerst dokumentierten +0,306 / +0,741 xATR stammten aus einer Scratchpad-Auswertung mit FESTEM Stundenversatz. DST-korrekt ueber zoneinfo sind es +0,275 / +0,686 (n=34 unveraendert). In CLAUDE.md, engine.py, trader.py und der ini nachgezogen; die Schlussfolgerung aendert sich nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
5e0e8b00ca
commit
5f70980e59
@@ -1466,8 +1466,8 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
**`backtest_breakout_squeeze.py` steigt AM LEVEL ein** (`sim(lvl, …)`). Live schickt
|
||||
`_check_auto_squeeze` eine **MARKET**-Order, sobald `state=='active'` — der Kurs ist
|
||||
dann schon ein Stück weiter. **Aus 34 echten Live-Entries (Logs 16.07.–05.08.,
|
||||
Level aus der Log-Zeile × Einstiegspreis aus der DB): Median +0,306×ATR über dem
|
||||
Level**, Mittel +0,741 · 75 % +0,863 · Max +4,339; nur **18 %** liegen innerhalb
|
||||
Level aus der Log-Zeile × Einstiegspreis aus der DB): Median +0,275×ATR über dem
|
||||
Level**, Mittel +0,686 · 75 % +0,744 · Max +4,339; nur **18 %** liegen innerhalb
|
||||
0,10×ATR, **53 % über 0,30×ATR**.
|
||||
**Was dieser Preisunterschied kostet** (80k M5, 2 Halbjahre, sequentiell EIN Slot,
|
||||
kanonischer Exit, Echtkosten):
|
||||
@@ -1477,7 +1477,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
| **B Einstieg am Bar-Close** (≈ live) | **−0,158 / −125,9** | **−0,006 / −7,6** | 37/42 % |
|
||||
**Allein der Einstiegspreis dreht das Setup — −0,61 ØR in BEIDEN Hälften, WR bricht
|
||||
von 56 auf 37 %.** Modell B ist dabei **nicht pessimistisch**: sein Median-Abstand
|
||||
(0,38×ATR) liegt nah am LIVE gemessenen (0,31×ATR); der Live-Betrieb liegt also
|
||||
(0,38×ATR) liegt nah am LIVE gemessenen (0,28×ATR); der Live-Betrieb liegt also
|
||||
~80 % des Weges von A nach B, also grob bei **breakeven bis leicht negativ** —
|
||||
nicht bei den dokumentierten +0,14…+0,23.
|
||||
⚠⚠ **Das ordnet den B4-Befund vom 01.08. NEU ein.** Dort stand: „Mechanik +0,102 vs.
|
||||
@@ -1520,7 +1520,7 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
**Selbst mit 0,20×ATR unterstellter Fill-Slippage — dem ~9-fachen des Median-Spreads
|
||||
— bleibt es in BEIDEN Hälften klar positiv.**
|
||||
⚠⚠ **Der Schlüssel ist nicht der Median, sondern der SCHWANZ.** Live ist der
|
||||
Median-Abstand +0,306×ATR, der **Mittelwert aber +0,741** (Max +4,339). Eine
|
||||
Median-Abstand +0,275×ATR, der **Mittelwert aber +0,686** (Max +4,339). Eine
|
||||
Stop-Order **deckelt den Einstiegspreis konstruktiv**; die Market-Order auf dem
|
||||
5-s-Poll tut das nicht. Die Extremfälle (+3,5 / +4,3×ATR) stammen erkennbar aus
|
||||
**blockiert-dann-freigegebenen** Ausbrüchen: feuert der Squeeze, während eine
|
||||
@@ -1560,9 +1560,23 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
Live verifiziert am Snapshot: `squeeze_pending=true`, `squeeze_max_chase_atr=0.2`,
|
||||
`squeeze_pending_levels` (leer, weil eine Position offen war = korrektes Verhalten).
|
||||
**Zurück zum alten Verhalten: `squeeze_pending_entry=false`.**
|
||||
⚠ **B4-Pflicht:** der Live-Abstand Einstieg↔Level muss jetzt gegen ~0 gehen
|
||||
(vorher Median +0,306×ATR). Das ist die Erfolgskontrolle — nachrechnen wie in
|
||||
diesem Abschnitt (Log-Zeile „Ausbruch <level>" × `trades.entry_price`).
|
||||
⚠ **B4-Pflicht + Werkzeug:** der Live-Abstand Einstieg↔Level muss jetzt gegen ~0
|
||||
gehen (vorher Median +0,275×ATR). Dafür gibt es jetzt
|
||||
**`analyze_squeeze_entry_gap.py`** (führt die zwei nötigen Quellen zusammen: das
|
||||
Level steht NUR im Log, der Fill NUR in `trades`) — mit Vorher/Nachher-Split am
|
||||
Umbau-Stichtag. ⚠ **Die Erfolgsmeldung ist paradox:** eine per Pending gefüllte
|
||||
Order erzeugt **keine** `AUTO-SQUEEZE-ENTRY`-Logzeile (die entsteht nur im
|
||||
Market-Fallback). Squeeze-Trades **ohne** Log-Treffer sind also der Erfolg, nicht
|
||||
ein Fehler — das Skript weist sie deshalb getrennt aus. Überwacht als Messung
|
||||
`squeeze_entry_gap` im `measurement_reminder.py` (≥12 Squeeze-Trades ab dem
|
||||
Umbau; Stichtag exakt 05.08. 08:55, nicht Mitternacht — der 08:33-Trade lief noch
|
||||
über Market). Bleibt der Abstand bei ~0,3×ATR, füllt die Pending nicht → Broker-
|
||||
Mindestabstand und die Logzeile „Squeeze-Pending nicht platzierbar" prüfen.
|
||||
⚠ **Zahlen-Korrektur (05.08.):** zuerst standen hier Median +0,306 / Ø +0,741 —
|
||||
das war eine Scratchpad-Auswertung mit FESTEM Stundenversatz. `analyze_squeeze_
|
||||
entry_gap.py` rechnet DST-korrekt über `zoneinfo` und liefert **+0,275 / +0,686**
|
||||
(n=34 unverändert). Gültig sind die zweiten Werte; die Schlussfolgerung ändert
|
||||
sich nicht.
|
||||
- **Auto-Squeeze-Entry = LIVE AUTONOM (User-Vorgabe 2026-07-16, `[trading]
|
||||
auto_squeeze=true`, Default FALSE):** der Bot eröffnet **selbständig eine echte
|
||||
Order**, sobald der **gemessen-validierte** Squeeze-Ausbruch feuert (`wave.squeeze.
|
||||
@@ -3019,7 +3033,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** |
|
||||
| 7 | Auto-Squeeze-**Einstiegspreis** | Fill **AM Ausbruchs-Level** (`backtest_breakout_squeeze.py`) | **MARKET**-Order, live median **+0,306×ATR** über dem Level (34 echte Entries) | ØR **+0,456 → −0,158** (H1) bzw. **+0,611 → −0,006** (H2); WR 56 → 37 % |
|
||||
| 7 | Auto-Squeeze-**Einstiegspreis** | Fill **AM Ausbruchs-Level** (`backtest_breakout_squeeze.py`) | **MARKET**-Order, live median **+0,275×ATR** über dem Level (34 echte Entries) | ØR **+0,456 → −0,158** (H1) bzw. **+0,611 → −0,006** (H2); WR 56 → 37 % |
|
||||
| 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** |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user