Sieben Verbesserungen umgesetzt: Breaker scharf, B5 entschieden, 5 Werkzeuge
1) CIRCUIT-BREAKER SCHARF -- daily_loss_limit_pct 0 -> 8. Live verifiziert:
enabled=True, limit_eur 89,44. Steht nicht in runtime_state.json, die ini
greift direkt. Begruendung: MaxDD 82,8 % auf dem gemessenen IST-Pfad,
schlechtester Einzeltrade -381 EUR.
2) B5-DEADLOCK RECHNERISCH AUFGELOEST -- die Regel ist ENTSCHIEDEN, nicht
vertagt. Stand 11/20: Verhaeltnis 0,14 (Latte 1,0), PF 0,39 (Latte 1,0).
Was die 9 Rest-Trades leisten muessten:
9/0 Gewinner -> 165,72 EUR je Trade = 12,2x der bisherige Schnitt
7/2 -> 186,17 EUR
5/4 -> 222,99 EUR
Der groesste Squeeze-Gewinn des Zeitraums war 77,34 EUR -- selbst der beste
Fall verlangt 2,1x den Rekord, neunmal in Folge. Latte nicht mehr erreichbar.
auto_squeeze bleibt FALSE. Wiederaufnahme waere eine NEUE Entscheidung mit
NEUER, vorab fixierter Latte.
3) core/kontrolle.py -- Kontroll-Fixture mit den Referenzwerten. Bricht bewusst
NICHT ab: ein Backtest darf abweichen, er muss es nur wissen und sagen.
4) core/live_config.py -- EINE Quelle der Live-Parameter (ini + runtime_state in
der Vorrangfolge des Engine-Starts). Dritte Instanz derselben Fehlerklasse:
ATRMIN_STD 0,12 statt 0,06, fehlendes set_entry_room, nachgebauter Cluster.
5) stichprobe.paarweise()/zeig_paarweise() -- gepaarter Vergleich. Anlass:
trail_start sah sequentiell besser aus, gepaart kippte das Vorzeichen
(Selektions- statt Exit-Effekt). Selbsttest in drei Richtungen bestanden.
6) tools/check_konstanten.py -- Waechter fuer veraltete Zahlen.
Erster Lauf: zwei Befunde, BEIDE Fehler in meiner eigenen Ableitung (Margin
aus Balance geschaetzt statt vom Broker gelesen; Elliott ohne
Gueltigkeitsfenster gezaehlt). Beide korrigiert.
Danach ein ECHTER Fund: meine am 13.08. notierten "~405 EUR/Lot" sind falsch,
der exakte Broker-Wert ist 712,84 -- die urspruenglich notierten 670 lagen
naeher als meine Korrektur. Lehre: eine abgeleitete Zahl ist keine gemessene.
Stand jetzt 0 Befunde.
7) Puls-Waechter bedingungs-bewusst: PULS traegt je Zeile die Vorbedingung,
bedingte Tabellen erscheinen als Hinweis statt als Ausfall. 0 Zeilen bleibt
IMMER ein Befund (der rec_outcomes-Fall). Grund: ein Waechter mit
Fehlalarmen wird ignoriert -- so ist der Divergenz-Waechter verstummt.
Pipeline gruen (85 Tests), Deployment ueber deploy.py --feld circuit_breaker
verifiziert, genau eine Instanz je Port.
Nicht angefasst: Sizing (User-Entscheidung) und die 44 Backtests mit eigener
Exit-Kopie (Migrations-Regel).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9dbc5d0452
commit
792355e8f9
@@ -5626,8 +5626,16 @@ Folge der S/R-Widerlegung: der Hebel zeigt auf die GRÖSSE. Pfad-Simulation übe
|
||||
**1.278 geschlossene Trades (08.05.–13.08.)**, `pnl/lots` als größenunabhängiges
|
||||
Ergebnis, Lots aus der jeweils simulierten Equity abgeleitet.
|
||||
⚠ Zwei dokumentierte Zahlen stimmen nicht mehr und wurden **aus den Daten neu
|
||||
geschätzt**: EUR je $ und Lot = **86,90** (notiert 87,6) und Margin je Lot
|
||||
**~405 €** (notiert 670 — bei 1.279 € Balance und ~3 Lots).
|
||||
geschätzt**: EUR je $ und Lot = **86,90** (notiert 87,6).
|
||||
⚠⚠ **KORREKTUR MEINER EIGENEN KORREKTUR (2026-08-17, vom Konstanten-Wächter
|
||||
gefunden):** hier stand „Margin je Lot **~405 €** (notiert 670)". **Die 405 waren
|
||||
falsch.** Ich hatte sie aus `Balance × 95 % / Lots` abgeleitet — das unterstellt,
|
||||
jede Position sei auf volle 95 % gesized. Der **exakte** Wert kommt vom Broker
|
||||
(`position.margin / position.lots`) und beträgt **~713 €/Lot**; die ursprünglich
|
||||
notierten 670 lagen also deutlich näher als meine „Korrektur".
|
||||
**Lehre: eine abgeleitete Zahl ist keine gemessene.** Wo der Broker die Größe
|
||||
selbst ausrechnet, gehört sie von dort geholt — `tools/check_konstanten.py`
|
||||
macht das jetzt.
|
||||
|
||||
**(1) DER IST-PFAD IST DIE EIGENTLICHE BOTSCHAFT:**
|
||||
| | |
|
||||
@@ -5975,6 +5983,85 @@ Funding trägt nicht); und der einzige je gemessene grosse Hebel war die
|
||||
zusammen). Eine neue Datenquelle müsste diese Latte schlagen, nicht nur „auch
|
||||
Information enthalten".
|
||||
|
||||
### ✅✅ SIEBEN VERBESSERUNGEN UMGESETZT (User-Auftrag 2026-08-17)
|
||||
|
||||
**1 · CIRCUIT-BREAKER SCHARF** — `[trading] daily_loss_limit_pct = 0 → 8`
|
||||
(Backup `…bak-2026-08-17-breaker`). Live verifiziert: `enabled=True`,
|
||||
`limit_eur` **89,44 €**. ⚠ Steht **nicht** in `runtime_state.json` — die ini
|
||||
greift direkt (die Falle, durch die `auto_signal` am 31.07. unbemerkt lief).
|
||||
Begründung: der gemessene IST-Pfad hat **MaxDD 82,8 %** und einen schlechtesten
|
||||
Einzeltrade von **−381 €**; der Breaker kostet an normalen Tagen nichts und
|
||||
greift nur in der Serie. ⚠ Ehrlich: 70 % des gemessenen Nutzens stammten aus
|
||||
EINEM Tag — das ist das Wesen einer Versicherung, aber die +739 € sind eine
|
||||
Realisierung, keine Erwartung. **Zurück: `= 0`.**
|
||||
|
||||
**2 · B5-DEADLOCK RECHNERISCH AUFGELÖST — die Regel ist ENTSCHIEDEN.**
|
||||
Stand 11/20: ØGewinn 13,62 gegen ØVerlust 94,15 = **Verhältnis 0,14** (Latte
|
||||
1,0), **PF 0,39** (Latte 1,0). Nachgerechnet, was die 9 Rest-Trades leisten
|
||||
müssten:
|
||||
| Rest-Szenario | nötiger Ø-Gewinn | ר bisher |
|
||||
|---|---|---|
|
||||
| 9 Gewinner / 0 Verlierer | **165,72 €** | **12,2×** |
|
||||
| 7 / 2 | 186,17 € | 13,7× |
|
||||
| 5 / 4 | 222,99 € | 16,4× |
|
||||
⚠ Der **grösste** Squeeze-Gewinn des Zeitraums war **77,34 €** — selbst der
|
||||
beste Fall verlangt **2,1× den Rekord**, neunmal in Folge. **Die Latte ist nicht
|
||||
mehr erreichbar.** Auf 20 zu warten hätte den Zustand nie entschieden, zumal der
|
||||
Trader seit 11.08. aus ist und der Zähler damit einfror (der Deadlock).
|
||||
`auto_squeeze` bleibt **FALSE**. ⚠ Eine Wiederaufnahme wäre eine **NEUE**
|
||||
Entscheidung mit **NEUER, vorab fixierter** Latte — nicht die Fortsetzung dieser.
|
||||
|
||||
**3 · `core/kontrolle.py` — Kontroll-Fixture.** Referenzwerte (Squeeze
|
||||
Touchfill +0,124/+0,292 · Close-Bruch +0,456/+0,611 · Markt −0,158/−0,006) plus
|
||||
`pruefe_squeeze()`. Anlass: zwei Messungen am 13.08. konnten die Referenz nicht
|
||||
reproduzieren, wodurch ihre Absolutwerte unbrauchbar waren. ⚠ Es bricht **nicht
|
||||
ab** — ein Backtest darf abweichen, er muss es nur WISSEN und sagen; ein harter
|
||||
Abbruch würde legitime Varianten unmöglich machen, eine stille Abweichung
|
||||
erzeugt genau die Fehlschlüsse.
|
||||
|
||||
**4 · `core/live_config.py` — EINE Quelle der Live-Parameter.** Liest ini +
|
||||
`runtime_state.json` in derselben Vorrangfolge wie der Engine-Start. ⚠ Anlass
|
||||
ist die **dritte** Instanz derselben Fehlerklasse: `ATRMIN_STD`=0,12 statt live
|
||||
0,06 (13.08.), `set_entry_room(0.6)` vergessen (05.08.), nachgebauter
|
||||
Level-Cluster (07.08.). **Ein aufgerufenes Gate ist nicht dasselbe wie ein
|
||||
aktives.** Aufruf: `python -m core.live_config`.
|
||||
|
||||
**5 · `stichprobe.paarweise()` / `zeig_paarweise()`.** Anlass: beim
|
||||
`trail_start`-Sweep (14.08.) sahen sequentiell vier Werte beidhälftig besser aus
|
||||
— gepaart kippte in H2 das Vorzeichen, weil ein anderer Exit ANDERE Trades in
|
||||
den EINEN Slot lässt (Selektions- statt Exit-Effekt). ⚠ Der gepaarte Test ist
|
||||
nicht nur richtiger, sondern **trennschärfer**: er misst die Streuung des
|
||||
UNTERSCHIEDS, nicht die der Trades. Selbsttest: identisch → KI [0,0000 … 0,0000],
|
||||
+0,30 → KI ohne Null, Rauschen → KI mit Null.
|
||||
|
||||
**6 · `tools/check_konstanten.py` — Wächter für veraltete Zahlen.** Leitet vier
|
||||
tragende Grössen aus den Daten ab und hält sie gegen CLAUDE.md.
|
||||
⚠⚠ **Er hat beim ersten Lauf zwei Befunde geliefert — beide waren FEHLER IN
|
||||
MEINER EIGENEN ABLEITUNG**, also genau die Fehlalarme, gegen die Punkt 7 gebaut
|
||||
ist: „Margin je Lot" war aus `Balance × 95 % / Lots` geschätzt (unterstellt volle
|
||||
Auslastung), „Elliott-Stimmanteil" zählte über ALLE Zeilen statt über das
|
||||
dokumentierte Fenster vor der Entmachtung. Beide korrigiert.
|
||||
✅ **Danach fand er einen ECHTEN veralteten Wert — meinen:** die am 13.08. von
|
||||
mir notierten „~405 €/Lot" sind falsch; der exakte Broker-Wert
|
||||
(`position.margin/lots`) ist **712,84 €/Lot**, die ursprünglich notierten 670
|
||||
lagen also näher als meine „Korrektur". **Lehre: eine abgeleitete Zahl ist keine
|
||||
gemessene.** Stand jetzt: **0 Befunde** über alle vier Grössen.
|
||||
|
||||
**7 · Puls-Wächter bedingungs-bewusst.** Er meldete `pbreak_predictions` als
|
||||
„63,5 h still" — die Tabelle schreibt aber nur bei **frischem Level-Touch auf
|
||||
der Ziel-Seite einer OFFENEN Position**. `PULS` trägt jetzt je Zeile ihre
|
||||
**Vorbedingung**; bedingte Tabellen erscheinen als **ⓘ Hinweis** statt als
|
||||
Ausfall. ⚠ **0 Zeilen bleibt IMMER ein Befund** — „hat nie geschrieben" lässt
|
||||
sich nicht wegerklären (das war der `rec_outcomes`-Fall). Grund: ein Wächter mit
|
||||
Fehlalarmen wird ignoriert, und mit ihm die eine echte Meldung — genau das ist
|
||||
dem Divergenz-Wächter passiert (6 Tage Dauerwarnung).
|
||||
|
||||
✅ Pipeline grün (85 Tests), Deployment über `tools/deploy.py --feld
|
||||
circuit_breaker` verifiziert, genau eine Instanz je Port.
|
||||
⚠ **Nicht angefasst:** das Sizing (95 % Margin) — Ihre mehrfach bestätigte
|
||||
Entscheidung; und die 44 Backtests mit eigener Exit-Kopie (Migrations-Regel:
|
||||
ihre publizierten Zahlen würden sich verschieben).
|
||||
|
||||
### ✅ S/R-AUTO-CLOSE WIEDER AN (User-Entscheidung 2026-08-11)
|
||||
|
||||
Frage war: „sollten wir Trades bei einem S/R-Bounce automatisch schliessen?"
|
||||
|
||||
Reference in New Issue
Block a user