Squeeze-Einstieg ueber ruhende Stop-Orders + Meta-Labeling gemessen (verworfen)
1) STOP-ORDER STATT MARKET (gebaut, live). engine._manage_squeeze_pending haelt beide Box-Grenzen mit BUY_STOP/SELL_STOP bestueckt, solange der Squeeze armed ist; trader.place_stop/cancel_pending/pending_orders neu. Groesse und SL kommen aus denselben Funktionen wie die Market-Order, nur bezogen auf den Trigger. OCO-Ersatz: faellt eine Seite, wird die andere im selben Tick storniert. Der kritische Punkt bei einer ruhenden Order sind die Gates - sie waren bisher Laufzeit-Checks im Market-Pfad. Neu: engine._squeeze_guard() als EINE Quelle fuer beide Wege, jeden Tick neu bewertet; schlaegt ein Gate zu, werden die Orders storniert. Market bleibt Fallback mit Nachjagd-Bremse squeeze_max_chase_atr=0.20 (gemessen der noch positive Bereich). Behandelt: Broker-Mindestabstand, falsche Marktseite, Toleranz 0,02 xATR gegen Order-Churn, Log nur bei Fehleraenderung, Startup-Schonfrist. 10 Szenarien getestet, live am Snapshot verifiziert. 2) META-LABELING (backtest_metalabel.py) - VERWORFEN. Zweitmodell auf 12 kausalen Merkmalen, Fit/Test in BEIDEN Richtungen: AUC 0,508 und 0,479 = Muenzwurf, Kalibrierung im Top-Bucket 74 % vorhergesagt gegen 39 % real, und 8 von 12 Gewichten kippen das Vorzeichen. Die scheinbar besseren Schwellen sind reine Handelsvermeidung und reproduzieren gegenlaeufig nicht. 23. verworfener Signal-Eingriff - deckt sich mit dem Caveat der Quelle. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3b00820c15
commit
5e0e8b00ca
@@ -1236,6 +1236,32 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
**21. verworfener Signal-Eingriff.** ⚠ Grenzen: eine Schwung-Definition (M15-Pivots
|
||||
k=3, ≥2×ATR); die Pivot-Kontrolle ist dünner (n=173/224). Der Vergleich ist aber
|
||||
design-intern, die relative Aussage damit robuster als die Absolutwerte.
|
||||
- **Meta-Labeling (López de Prado) auf dem Wellensignal = VERWORFEN (gemessen
|
||||
`backtest_metalabel.py`, 2026-08-05, aus der Web-Recherche „Best Practices"):**
|
||||
Kein 23. Filter, sondern ein **Zweitmodell**, das für ein bereits erzeugtes Signal
|
||||
P(Gewinn) schätzt — dieselbe Machinerie wie das erfolgreiche P(break)-Modell
|
||||
(12 kausale Merkmale: Konfidenz · Überdehnung · HTF/H1-Übereinstimmung · Kosten ·
|
||||
Vola-Regime · mom3/mom6 · Efficiency Ratio · Nacht · Entry-Raum · Winkel;
|
||||
logistische Regression, Fit auf einer Hälfte, Test auf der anderen, **in BEIDEN
|
||||
Richtungen**). Population = der volle Live-Gate-Stack (929 bzw. 1316 Signale).
|
||||
**Fällt klar durch:**
|
||||
| | Fit H1 → Test H2 | Fit H2 → Test H1 |
|
||||
|---|---|---|
|
||||
| **AUC oos** | **0,508** | **0,479** |
|
||||
| Kalibrierung | 49,3 % vorhergesagt vs. **38,6 %** real | 37,2 vs. 38,0 % |
|
||||
| Top-Bucket (p≥0,55) | **74,1 % vorhergesagt, 39,1 % real** | (existiert nicht) |
|
||||
Münzwurf in beiden Richtungen (P(break) erreicht 0,65), und **8 von 12
|
||||
Merkmalsgewichten kippen das Vorzeichen** zwischen den Fits — das Modell lernt
|
||||
nichts Stabiles. Die im H1→H2-Lauf scheinbar „besseren" Schwellen (p≥0,45…0,55)
|
||||
sind reine **Handelsvermeidung** (ΣR steigt nur, weil n fällt; ØR bleibt negativ)
|
||||
und reproduzieren in der Gegenrichtung nicht. **23. verworfener Signal-Eingriff.**
|
||||
⚠ Deckt sich exakt mit dem Caveat der Quelle (Hudson & Thames): *„if the algorithm
|
||||
is bad then meta-labeling would likely only reduce the downside."* Das Wellensignal
|
||||
ist in H1 gemessen negativ — ein Zweitmodell rettet ein schwaches Primärsignal nicht.
|
||||
✅ **Was das positiv zeigt:** die Trennung „am Signal ist nichts zu holen, der Hebel
|
||||
liegt in **Ausführung** und Verhalten" hält auch gegen die aktuelle Lehrmeinung.
|
||||
Am selben Tag hat der Ausführungs-Hebel (Stop-Order statt Market) **+0,61 ØR**
|
||||
gebracht — mehr als alle 23 Signal-Ideen zusammen.
|
||||
- **„Erst messen, dann umbauen":** Strategie-Änderungen per Backtest belegen, nicht
|
||||
raten. Gegen-Trend verliert; nicht bei WARTEN handeln. **Stichproben ~28 Tage** —
|
||||
ein Trend-Regime; Befunde später auf mehr/andere History gegenprüfen.
|
||||
@@ -1500,14 +1526,43 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
|
||||
**blockiert-dann-freigegebenen** Ausbrüchen: feuert der Squeeze, während eine
|
||||
Position offen ist (oder Nacht-/News-Fenster), wird KEIN Dedup-Marker gesetzt — der
|
||||
Entry kommt später zum dann gültigen Marktpreis, u. U. weit hinter dem Level.
|
||||
⚠ **Noch NICHT gebaut** — Umsetzung hat echte Fallstricke: die Guards (Nacht,
|
||||
News-Blackout, Cooldowns, flat-Prüfung) wirken heute als Laufzeit-Checks; mit einer
|
||||
ruhenden Order müssten sie über **Platzieren/Stornieren** durchgesetzt werden, sonst
|
||||
feuert eine vergessene Pending-Order in einem gesperrten Fenster. Dazu: MT5-Mindest-
|
||||
abstand (`SYMBOL_TRADE_STOPS_LEVEL`) kann die Platzierung ablehnen, wenn der Kurs
|
||||
schon zu nah am Level steht, und die Order muss storniert werden, sobald der Squeeze
|
||||
sich klärt. **Das ist der stärkste offene Hebel im Projekt** — größer als jeder der
|
||||
22 verworfenen Signal-Eingriffe.
|
||||
✅✅ **GEBAUT & LIVE (2026-08-05, User-Vorgabe „setze alle Vorschläge um"),
|
||||
`[trading] squeeze_pending_entry=true`.** `engine._manage_squeeze_pending` (im
|
||||
`_pos_loop`, VOR dem Market-Pfad) hält **beide Box-Grenzen** mit ruhenden
|
||||
`BUY_STOP`/`SELL_STOP` bestückt, solange der Squeeze `armed` ist:
|
||||
`trader.place_stop/cancel_pending/pending_orders` (Größe und SL aus **denselben**
|
||||
Funktionen wie die Market-Order, nur bezogen auf den Trigger-Preis — sonst wäre der
|
||||
SL-Abstand ein anderer als validiert). **OCO-Ersatz:** füllt eine Seite, existiert
|
||||
eine Position → die Bedingung „soll liegen" wird falsch und die Gegenseite wird im
|
||||
selben Tick storniert (MT5 kennt kein natives OCO).
|
||||
⚠ **Der kritische Punkt bei einer RUHENDEN Order: die Gates.** Nacht-Fenster,
|
||||
News-Blackout, Circuit-Breaker und der An/Aus-Schalter waren bisher Laufzeit-Checks
|
||||
im Market-Pfad; eine liegende Order würde sie schlicht ignorieren. Deshalb neu
|
||||
**`engine._squeeze_guard()` als EINE Quelle für beide Wege** — jeden Tick neu
|
||||
bewertet, und sobald ein Gate zuschlägt, werden die Orders **storniert**. Zwei
|
||||
Kopien derselben Gates wären genau die Divergenz, die hier siebenmal als
|
||||
Deployment-Drift dokumentiert ist.
|
||||
⚠ **Market bleibt nur noch FALLBACK — mit Nachjagd-Bremse** (`squeeze_max_chase_atr`
|
||||
= **0,20**): greift keine Pending (Broker-Mindestabstand, Squeeze sprang direkt auf
|
||||
`active`, Order-Fehler), wird nur noch eingestiegen, solange der Kurs **höchstens
|
||||
0,20×ATR** über dem Level steht — genau der Bereich, der gemessen in beiden Hälften
|
||||
positiv ist (+0,244/+0,426). Darüber: Ausbruch auslassen, Log „⏭ Auto-Squeeze
|
||||
übersprungen". `_squeeze_last_sig` wird dabei NICHT gesetzt → läuft der Kurs zum
|
||||
Level zurück, darf der Entry noch kommen.
|
||||
⚠ Weitere Fallstricke, alle behandelt: **Broker-Mindestabstand**
|
||||
(`trade_stops_level`) wird VOR dem Senden geprüft und der Fehler nur bei ÄNDERUNG
|
||||
geloggt (sonst 1 Zeile/Sekunde, wenn der Kurs an der Box-Grenze klebt) · Order auf
|
||||
der falschen Marktseite wird abgelehnt · **Toleranz 0,02×ATR**, damit nicht jede
|
||||
ATR-Zuckung die Orders löscht und neu setzt · Startup-Schonfrist gilt auch hier.
|
||||
**Mit 10 Szenarien getestet** (setzen · Idempotenz beim zweiten Tick · Fill →
|
||||
Gegenseite weg · Squeeze klärt sich · Gate schlägt zu · Schonfrist · Feature aus ·
|
||||
Box verschiebt sich · Broker lehnt ab · Nachjagd-Bremse in beide Richtungen).
|
||||
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`).
|
||||
- **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.
|
||||
|
||||
Reference in New Issue
Block a user