trail_start gemessen: keine Aenderung -- und der gepaarte Test kippt das Ergebnis

User-Frage "warum wurden meine Trades automatisch geschlossen". Am Log und an
der DB beantwortet: 9 von 11 sl-Closes seit dem 13.08. waren der NACHGEZOGENE
Stop (-75,90 EUR), einer der echte Initial-SL (-113,94), und der groesste
Verlust (-215,60) war eine MANUELLE SL-Aenderung, nach der sich das Trailing
per Konstruktion abschaltet.

Der Mechanismus ist Arithmetik: der Trail sitzt 1,0xATR hinter dem Bestkurs und
erreicht den Einstieg damit erst bei 1,0xATR Gewinn -- aktiviert wird er aber
schon bei 0,3xATR. Dazwischen liegt der Stop zwangslaeufig im Verlust.

GEMESSEN (backtest_trail_start.py, 80k M5, Squeeze-Entries, nur trail_start):

  trail_start   "war im Plus, schloss im Minus"   H1 / H2
  0,3 (live)                                      47,6 % / 38,2 %
  0,8                                             27,7 % / 19,4 %
  1,0                                             12,0 % /  6,9 %
  1,3                                              0,0 % /  0,5 %

Das beobachtete Verhalten ist damit bestaetigt und quantifiziert.

ABER DER ERTRAG TRAEGT NICHT. Sequentiell sahen vier Werte in beiden Haelften
besser aus (0,5/0,8/1,3/1,5, Delta bis +0,101). Der GEPAARTE Test dreht das:
alle 12 Intervalle enthalten die Null, und in H2 kippt das Vorzeichen
(0,8: -0,006 · 1,3: -0,023 · 1,5: -0,023).

Grund: ein spaeterer Trail-Start haelt Trades laenger, also passen ANDERE Trades
in den EINEN Slot. Der scheinbare Gewinn war ein SELEKTIONSEFFEKT, kein
Exit-Effekt -- exakt die Falle aus backtest_exit_combo.py (31.07.). Der gepaarte
Vergleich ist hier der einzig gueltige Test und zugleich trennschaerfer als die
Einzel-Intervalle.

KEINE AENDERUNG. trail_start bleibt 0,3. Nichts am Live-System angefasst.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-14 09:10:39 +02:00
co-authored by Claude Opus 5
parent 44191947ac
commit 276c8c7f07
2 changed files with 280 additions and 0 deletions
+55
View File
@@ -5780,6 +5780,61 @@ erfundene Zeilen ein echtes Risiko. `tests/conftest.py` entfernt den
`FileHandler` des `oil`-Loggers jetzt für die Sitzung — **vierte Grundregel der
Suite.** Verifiziert: Log-Größe vor und nach einem Komplettlauf **identisch**.
### ⚠⚠ „WARUM WURDEN MEINE TRADES AUTOMATISCH GESCHLOSSEN?" — es war das TRAILING (2026-08-14)
User-Frage. Am Log und an der DB beantwortet, nicht vermutet. 11 Closes mit
Grund `sl` seit dem 13.08., **richtungsrichtig** aufgeschlüsselt (bei SELL zieht
das Trailing den Stop nach UNTEN — ein Exit darüber ist Slippage, kein Trailing):
| Ursache | n | Summe |
|---|---|---|
| **Trailing-Stop (nachgezogen)** | **9** | **75,90 €** |
| echter Initial-SL | 1 | 113,94 € |
| ⚠ **manuelle SL-Änderung** | 1 | 215,60 € |
**`closed_by='sl'` heisst nur „Broker-Stop erreicht", nicht „Initial-Stop".**
**DER MECHANISMUS IST ARITHMETIK, KEIN DEFEKT.** Der Trail sitzt `mult`×ATR
(=1,0) hinter dem Bestkurs und erreicht den Einstieg damit erst bei **1,0×ATR
Gewinn** — aktiviert wird er aber schon bei **0,3×ATR** (`trail_start`). Im Band
dazwischen liegt der Stop zwangsläufig auf der VERLUSTSEITE. Real (50023965):
Einstieg 82,283 · Bestkurs 82,141 (0,47×ATR im Plus) · Stop 82,141+0,305 =
**82,456** = 0,173 ÜBER dem Einstieg.
⚠ Der grösste Verlust war **nicht** automatisch: Log 13.08. 16:30:59 „Manuelle
SL/TP-Änderung erkannt (SL 81.468≠81.151) → Trailing abgeschaltet". Ab da
verfolgt die Engine SL-Änderungen nicht mehr — ob der Exit bei 81,758 eine
weitere Handeingabe war oder Slippage, ist aus dem Log **nicht** entscheidbar.
**GEMESSEN: späterer `trail_start`?** (`backtest_trail_start.py`, 80k M5,
Squeeze-Entries, nur `trail_start` variiert)
| trail_start | H1 „war im Plus, schloss im Minus" | H2 |
|---|---|---|
| **0,3 (live)** | **47,6 %** | **38,2 %** |
| 0,8 | 27,7 % | 19,4 % |
| 1,0 | 12,0 % | 6,9 % |
| **1,3** | **0,0 %** | **0,5 %** |
**Das beobachtete Verhalten ist damit bestätigt und quantifiziert** — es ist
eine Auszählung, keine Schätzung, und sie fällt monoton.
⚠⚠ **ABER DER ERTRAG TRÄGT NICHT — und der Weg dahin ist die eigentliche
Lehre.** Sequentiell sahen **vier** Werte in beiden Hälften besser aus (0,5 · 0,8
· 1,3 · 1,5, Δ bis +0,101). **Der GEPAARTE Test dreht das:**
| gegen 0,3 | H1 Δ je Trade | H2 Δ je Trade |
|---|---|---|
| 0,8 | +0,048 [0,047 … +0,150] | **0,006** [0,083 … +0,074] |
| 1,3 | +0,077 [0,062 … +0,219] | **0,023** [0,127 … +0,088] |
| 1,5 | +0,143 [0,014 … +0,299] | **0,023** [0,137 … +0,098] |
**Alle 12 gepaarten Intervalle enthalten die Null**, und in H2 kippt das
Vorzeichen gegenüber dem sequentiellen Lauf.
⚠ **Grund: ein späterer Trail-Start hält Trades länger, also passen ANDERE
Trades in den EINEN Slot.** Der scheinbare Gewinn war ein **Selektionseffekt**,
kein Exit-Effekt — exakt die Falle aus `backtest_exit_combo.py` (31.07.):
verschiedene Trade-Folgen sind nicht vergleichbar. Der gepaarte Vergleich
(gleiche Entries, nur der Exit variiert) ist hier der einzig gültige Test, und
er ist zugleich **trennschärfer** als die Einzel-Intervalle.
**KEINE ÄNDERUNG.** `trail_start` bleibt 0,3.
⚠ Wer die kleinen Verluste trotzdem loswerden will, tauscht sie gegen **weniger
Trefferquote im Ertrag** ein — es ist eine Komfort-, keine Edge-Entscheidung.
Zahlen dafür liegen jetzt vor (1,3 → 0 % solcher Fälle, WR 36 → 56 %).
### ✅ S/R-AUTO-CLOSE WIEDER AN (User-Entscheidung 2026-08-11)
Frage war: „sollten wir Trades bei einem S/R-Bounce automatisch schliessen?"