fbc1e96b072a130d3f4635ffc974c25bb245cf66
318
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d9ff48b5be |
Knopf 'STOPP' in 'CIRCUIT BREAKER' umbenannt (v=179)
Nur Beschriftung: Button-Label, Toast-Text und die beiden Tooltip-Varianten. Funktion, Endpunkt und Persistenz unveraendert. Dazu eine CSS-Zeile, damit das laengere Label auf schmalen Displays umbricht statt ueberzulaufen -- sechs Knoepfe teilen sich die Leistenbreite. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
c0293ece01 |
S/R-Auto-Close-Schalter in die Aktionsleiste + Doku nachgetragen (v=178)
Den S/R-Schalter gab es nur in der Trade-Leiste -- die ist aber nur bei OFFENER Position sichtbar, also genau dann nicht, wenn man ihn VOR einem Trade setzen will. Jetzt zusaetzlich in der Aktionsleiste neben STOPP. Der alte Knopf bleibt; beide lesen auto_sr_close aus demselben Snapshot und koennen nicht auseinanderlaufen. Live getestet: aus -> an, Endzustand AN. Ausserdem die Doku zu den heutigen UI-/Telegram-Aenderungen nachgetragen, die beim vorigen Versuch am Encoding-Fehler gescheitert war -- inklusive der Lehre: Emoji nie als getrennte Unicode-Escapes, immer erst nach .tmp schreiben und die Groesse gegen das Original pruefen, und eine Syntaxpruefung ersetzt die Groessenpruefung nicht (eine leere Datei besteht node --check und jeden Hook). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
880bf1075e |
CLAUDE.md wiederhergestellt + UI/Telegram-Aenderungen dokumentiert
Der vorige Commit hat CLAUDE.md mit 0 Bytes eingecheckt: ein Emoji als zwei getrennte \u-Escapes erzeugt in Python lone surrogates, die sich nicht nach UTF-8 kodieren lassen -- und io.open(p,'w') kuerzt die Datei VOR dem Schreiben. Der pre-commit-Hook prueft Python und JS, nicht die Doku, also ging der Commit gruen durch. Inhalt aus HEAD~1 wiederhergestellt. Zweiter Totalverlust derselben Ursache am selben Tag (vorher web/app.js). Regel ab hier ausnahmslos: keine Emoji als getrennte \u-Surrogate; immer erst nach .tmp schreiben, Groesse gegen das Original pruefen, dann os.replace. Eine Syntaxpruefung ersetzt die Groessenpruefung nicht -- eine leere Datei besteht node --check und jeden Hook. Inhaltlich dokumentiert: Einsatz-Felder entfernt, BRK-Schalter durch Circuit-Breaker-Schalter ersetzt, Telegram auf 'Trade geschlossen' reduziert (eine Filterstelle, ein Bypass fuer die FEHLGESCHLAGEN-Meldung). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
e48ad80c0a |
UI aufgeraeumt + Telegram auf Closes reduziert (v=177)
Vier User-Vorgaben:
1. Einsatz-Felder entfernt. Backend bleibt vollstaendig -- Folge: der
Prozentsatz ist ohne UI nur ueber ini + Neustart aenderbar.
2. BRK-Schalter entfernt, dafuer STOPP (Circuit-Breaker). Bewusster Tausch mit
Konsequenz: der An/Aus-Schalter des AUTONOMEN Pfads ist aus der App weg (nur
noch POST bzw. ini), sein Zustand bleibt in der Breakout-Karte sichtbar.
Dafuer ist die Notbremse bedienbar, die am 17.08. real ausgeloest hat.
set_circuit_breaker + POST /api/circuit + runtime_state (cb_limit_pct,
cb_remember -- ohne das Gedaechtnis waere die Prozentzahl nach einmal
Ausschalten fuer immer weg).
3. Telegram nur noch bei geschlossenen Trades: EINE Filterstelle vor
_send_telegram_roh statt 17 Einzeleingriffe, _TG_ERLAUBT = ('Trade
geschlossen',). Umkehren = Liste erweitern. Tages-/Wochenreport wird nur auf
dem Telegram-Weg still, die E-Mail laeuft weiter.
EINE Ausnahme mit Bypass: '<ok_word> FEHLGESCHLAGEN' beim Notfall-Close --
dort ist die Position NICHT zu und es braucht eine Handeingabe.
Verifiziert: /api/circuit vorher 405, nachher 200; Toggle aus->an->8 %/57,94 EUR
persistiert; 85 Tests, node --check, check_nfalle gruen; 0 verwaiste
JS-Referenzen; genau eine Instanz je Port.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
32c064a1a6 |
Einsatz 95 % -> 40 % + Breakout-Karte aktiv (v=176)
Nach dem Schliessen der Position ausgefuehrt. Der Trade schloss mit rund -152 EUR (Equity 877 -> 725) -- genau die Groessenordnung, die diese Aenderung adressiert. margin_buffer_pct in ini UND runtime_state auf 40. Bei 725 EUR freier Margin sind das ~0,41 statt ~0,97 Lot, Risiko je 2xATR-Stop ~20 statt ~46 EUR. Gilt fuer alle neuen Positionen, auch die autonomen. Beide Stellen angeglichen: set_margin_pct persistiert als 'margin_pct' (nicht 'margin_buffer_pct'), _load_runtime_state (Z.487) laeuft nach dem ini-Lesen (Z.176) und gewinnt. Die ini wurde mitgezogen, damit ein geloeschtes runtime_state.json nicht still auf 95 % zurueckfaellt. Karte #card-brk live: squeeze_b5 liefert n=11/20, ratio 0,14, PF 0,39, -173,46 EUR. Deploy ueber tools/deploy.py --feld squeeze_b5, alle fuenf Schritte gruen. Offen bleibt Punkt 2 der User-Idee (50 % Reserve): technisch moeglich, aber Kern-Umbau und gegen die Messung. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
30cb77b795 |
Breakout-Karte vorbereitet (inaktiv bis Neustart) + Bewertung der Margin-Idee
User-Idee: 40 % Margin manuell, 50 % fuer Breakout reservieren, neue Karte. Bewertung: (1) 40 % ist der groesste gemessene Hebel (MaxDD 82,8 %) und ein Schalter ohne Neustart. (2) Reserve ist technisch moeglich (Konto ist RETAIL_HEDGING), aber _check_auto_squeeze feuert 'nur FLAT' und engine.py hat 17 Einzel-Positions-Annahmen -- Kern-Umbau, kein Parameter. Zudem steht die Zuteilung gegen die Messung: autonom -4,71 EUR/Lot gegen Mensch +1,56 EUR/Lot. Live-Befund macht (1) dringlich: freie Margin -6,21 EUR, Margin-Level 99,3 %. Es gibt derzeit nichts zu reservieren. Gebaut (inaktiv): history.fetch_squeeze_since, engine._squeeze_b5_cached (120 s gecacht), Snapshot-Feld squeeze_b5, Karte #card-brk. Eigenes Fenster ab 01.08. -- squeeze_monitor.live rechnet ueber alle 42 Trades, B5 zaehlt 11. Die Karte zeigt beide Zahlen, weil der Monitor 'ontrack' aus der MECHANIK meldet, waehrend live Verhaeltnis 0,14 / PF 0,39 steht. Live aendert sich nichts: Karte ist hidden, renderBrk blendet sie aus solange squeeze_b5 fehlt. Aktiv nach dem naechsten Neustart (wartet auf den Trade). BEINAHE-SCHADEN: ein UnicodeEncodeError liess web/app.js mit 0 Bytes zurueck. node --check bestand trotzdem -- eine leere Datei ist gueltiges JS. Gefangen hat es erst der Groessenvergleich. Neue Regel: erst .tmp schreiben, Groesse pruefen, dann os.replace. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
3affe51030 |
BRK bleibt an (User): Zustand konsistent, 13-Tage-Flaute war kein Defekt
User-Auftrag: Breakout-Squeeze an lassen, neu rechnen und pruefen.
Zustand: ini / runtime_state.json / Snapshot stehen alle drei auf true --
nichts umzuschalten. Die Doku-Zeile vom 17.08. ('bleibt FALSE') war stale.
Auffaellig war: seit 06.08. kein Squeeze-Trade. Drei Hypothesen geprueft:
- Markt? Nein: die echte squeeze_scan liefert 57 Ausbrueche in 19,5 Tagen,
53 ausserhalb des Nachtfensters (~19/Woche), zuletzt 14./17./18.08.
- Slot belegt? Nein: flat zu 57,8 %.
- Pending-Pfad defekt? Nein: SQZ-STOP 0, 'nicht platzierbar' 0, 0 ERROR.
Die Logzeile loest es: '2026-08-19 11:03:18 [WEB] Auto-Squeeze-Entry AN' --
er war vom 11.08. 14:10 bis heute schlicht AUS.
Nebenbefund: der Circuit-Breaker hat am 17.08. 18:35 zum ersten Mal ausgeloest
(-82,42 <= -81,45 EUR, Position geschlossen), zwei Tage nach dem Scharfstellen.
B5 unveraendert 11/20: Verhaeltnis 0,14, PF 0,39, Summe -173,46 EUR. Die Latte
ist rechnerisch unerreichbar (12,2x den Oe-Gewinn bzw. 2,1x den Rekord, neunmal
in Folge). Die -173 EUR kommen aus drei planmaessigen 2xATR_M15-Stops mal
Positionsgroesse, nicht aus dem Exit -- sr_close trug +15,98 EUR bei.
B5 wird NICHT nachtraeglich gesenkt, sondern als durch User-Entscheidung
ueberstimmt vermerkt. Eine Ersatzregel muesste vorab und auf einem neuen
Zaehlfenster fixiert werden.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
496d65aab5 |
Vier weitere ebooks ausgewertet: drei ohne Ertrag, das vierte widerlegt eine Projekt-Regel
Sechs PDFs in ebooks/, zwei davon heute schon ausgewertet. Die vier neuen als Text extrahiert (346k Woerter) und gegen das Gemessene gescannt statt gelesen. - 'Day-Trading Attention' ist KEIN Trading-Buch: Vaynerchuks Social-Media- Marketing-Titel, ein Wortspiel. Null TA-Begriffe im ganzen Text. - 'Die Kunst des technischen und algorithmischen Tradings' (656 S.): RSI/MACD/ ADX 165x, Elliott 35x, Kerzen 37x, Fibonacci 18x, Bollinger 17x -- alles hier bereits gemessen und verworfen. Keine pruefbare Regel, kein CRV-Kapitel. - 'KDP968 4 in 1': ausdruecklich fuer Einsteiger, unter dem Projektstand. - 'Ein Fuchs namens Risiko': das einzige mit pruefbaren Aussagen, weil seine Kapitel ueber REIHENFOLGE und ABSTAND von Trades sprechen. Gemessen auf 1.318 eigenen Trades (analyze_verhalten.py, je Lot, Bootstrap-KI): keine der vier Behauptungen reproduziert. Revenge-Trading und Overtrading zeigen sogar in die Gegenrichtung (< 5 min nach Verlust -1,53 gegen > 2 h -16,16; 3.-5. Trade -7,23 gegen 11.+ +1,00). DER EIGENTLICHE BEFUND: die Projekt-eigene Checklisten-Regel 'nach 2 Losses Session beenden' (seit 30.07. Punkt 6) ist auf den eigenen Trades NICHT gestuetzt -- keine monotone Verschlechterung, der 3.-Verlust-Bucket ist wieder positiv, alle vier KI enthalten die Null. Uebernommen aus der Literatur, nie geprueft. Nicht ueberinterpretieren: ~20 Zellen getestet, ~1 Fehlalarm erwartbar, zwei schliessen die Null aus. Beobachtungsdaten, keine Zuweisung. Nichts gebaut. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
af5190cf9e |
Raum je Richtung auf die Order-Knoepfe (v=175)
Gemessen auf 27 eigenen manuellen Trades: Raum < 0,6xATR zum naechsten Level in Trade-Richtung = 79 % Trefferquote und trotzdem -7,57 bzw. -11,51 EUR/Lot. Das ist die Klein-Close-Falle (Gewinn am Level gedeckelt, Verlust laeuft bis zum Stop), ueber 80k Bars als PF 0,42/0,66 belegt. Die Zahl stand nur in Gate 3b der M15-Karte -- seit dem Entfernen des Entry-Dialogs am 11.08. war sie im Moment des Klicks unsichtbar. Jetzt als zweite Zeile auf dem LONG-/SHORT-Knopf, bernstein unter dem Gate. REINE ANZEIGE: kein Block, keine Sperre, kein Dialog -- Uebersteuerungen laufen gemessen 68 % WR. Kein Backend, kein Neustart: die Daten lagen bereits im Snapshot (m15_setup.motor.raum) und werden NICHT neu gerechnet. Bewusst kein eigener Layout-Block, weil #actions ein flex ohne wrap ist. Verifiziert: node --check als Modul, check_nfalle sauber, beide IDs im ausgelieferten HTML, live LONG 0,07xATR (unter Gate) / SHORT 1,49xATR. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
5eec4517f8 |
KI-Buch (Illab) ausgewertet: Workflow statt Signale, echte Luecke ist die Validierungsmethode
Zweites eingereichtes Buch, anderes Genre: Co-Piloten, No-Code-Bots, Scanner, Agenten-Pipelines. Triage gegen den Projektstand: 10 von 12 Kapitel-Konzepten sind gebaut (Copilot, Circuit-Breaker, Logs, Slippage-Messung, Dedup, Tagesreport, Provider-Fallback) oder gemessen verworfen (Muster, Momentum, Sentiment). Alt-Daten und Rebalancing sind fuer einen WTI-CFD gegenstandslos. DIE EINE ECHTE LUECKE: Kap. 9.2 empfiehlt WALK-FORWARD, dieses Projekt prueft mit ZWEI STICHPROBEN -- das Wort kommt in CLAUDE.md nie vor. Zwei Haelften haben genau zwei Vorzeichen; ein Setup, das in der Haelfte aller Zeitbloecke negativ ist, kann trotzdem 'beidhaelftig positiv' aussehen. Genau so ist das P(break)-Modell ausgefallen (H1->H2 AUC 0,715, live 0,368). Gemessen am Squeeze, gleiche Daten/Regel/Exit, variiert nur die Zeitaufteilung: 2 Haelften: H1 -0,134 / H2 +0,036 8 Bloecke: - - - + + + - + = 4 von 8 positiv, Spanne -0,301 .. +0,214 Die einzigen zwei Bloecke mit KI ohne Null sind BEIDE negativ. Kein Block ist gesichert positiv. Die Haelften-Sicht verdeckt nichts, zeigt aber auch nichts. Keine Code-Aenderung: die 2-Stichproben-Regel bleibt die Mindesthuerde (sie hat 28 Eingriffe korrekt abgewiesen), ist aber eine Aussage ueber zwei Regime, nicht ueber Stabilitaet ueber die Zeit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
adda5b0ccc |
Trading-Buch ausgewertet: 17/20 schon gemessen, die 3 Luecken fallen durch
User reichte 'Praktisches Trading 2.0' (Risueno Gomez) ein. Triage statt alles nachmessen: 17 der ~20 Konzepte sind im Projekt bereits gemessen und ueberwiegend verworfen. Ungemessen waren genau drei -- Bollinger, RSI-Divergenz, Drei Soldaten/Kraehen. Alle drei mit Kontrollgruppe gemessen, keines besteht. 1 Bollinger-Squeeze ist SCHLECHTER als die live laufende ATR-Box (H2 -0,133 gegen -0,031, bei halb so vielen Trades). Der wertvollste Test, weil es kein neues Signal ist, sondern eine Variante des einzigen validierten Setups. 2 RSI-Divergenz kippt; die Gegenrichtung schlaegt sie in H1 mit KI ohne Null. 3 Drei Soldaten/Kraehen beidhaelftig negativ, Gegenrichtung besser. In ALLEN DREI ist die Kontrollgruppe besser als die Buch-Lesart -- fuenfte Bestaetigung derselben Inversion (Kerzen 4x, Winkel, Reversal). Die Erfolgsraten-Tabelle S. 203 (Kopf-Schulter 83 %) ist unbelegt und widerspricht der eigenen Messung (Ziel-Trefferquote 13-38 %). Was das Buch BESTAETIGT ist sein Risikomanagement-Kapitel: nicht die Trefferquote entscheidet, sondern OeGewinn/OeVerlust und 1-2 % Risiko je Trade. Genau das misst dieses Projekt unabhaengig (Squeeze 73 % Treffer, PF 0,39, Verhaeltnis 0,14; MaxDD 82,8 % gegen 22,2 % bei 0,5 % Risiko) -- und es ist der einzige Punkt, an dem noch nichts umgesetzt ist. 26., 27. und 28. verworfener Signal-Eingriff. 40k Bars = Ausschluss-Urteil. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
71bd836f56 |
Klein-Close-Falle auf eigenen Trades belegt + Breaker-Korrektur
Suche nach weiteren Optimierungen. Zwei Befunde: 1 ctx_*-Telemetrie erstmals auf der Ausfuehrungs-Achse ausgewertet (121 manuelle Trades, je Lot). Die beiden entry_room-Zonen (<0,6xATR) sind die einzigen mit zweistellig negativem Ertrag: -7,57 und -11,51 EUR/Lot -- bei 79 % bzw. 54 % Trefferquote. Das ist die ueber 80k Bars gemessene Klein-Close-Falle, jetzt auf eigenem Geld. Kontrolle auf der Gegen-Seite zeigt das Muster NICHT, es ist also spezifisch die Ziel-Seite. n=14/13, Intervalle breit -> Bestaetigung, kein Beleg. Die Zahl ist seit dem Entfernen des Entry-Dialogs (11.08.) im Moment der Entscheidung unsichtbar. Vorschlag (nicht gebaut): Raum je Richtung in die Order-Leiste -- sichtbar machen, nicht bevormunden. 2 KORREKTUR zu meinem Eintrag vom 17.08.: die zitierten +739 EUR stammen aus einer Simulation, die nach dem Ausloesen ALLE Trades des Tages sperrt. Live sperrt der Breaker nur die autonomen -- und die sind 36 von 461 (7,8 %). Die sperrende Haelfte ist damit praktisch inert. Das SCHLIESSEN der offenen Position wirkt weiter und war der groesste Posten der Simulation. 8 % bleiben gesetzt, die erwartete Wirkung ist kleiner als zitiert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
f15a36138f |
Konfidenz-Schwelle und M15-Selektivitaet gemessen: keine Aenderung
(2) conf_pct trennt im Markt-Modus NICHT: der Bandverlauf ist nicht gleichgerichtet (H1 bestes Band 0-44, schlechtestes 55-64), und die Schwelle bewegt nichts -- >=0 liefert H1 -0,189, >=55 liefert -0,197. 11,4 % Signalmenge fuer 0,017 R. Mit ruhender Order trennt die obere Haelfte: >=75 schlaegt die Live-Schwelle im OeR beidhaelftig (-0,001/+0,147 gegen -0,070/+0,081), aber die Summe faellt (+82,8 gegen +146,1). Regel verlangte beides -> nicht geaendert, Regel NICHT nachtraeglich gelockert. 27. verworfener Signal-Eingriff. Dritte unabhaengige Bestaetigung des Ausfuehrungs-Hebels am selben Tag: Level gegen Markt +0,127/+0,096 R, groessengleich zu backtest_entryroom_level. (3) M15-Karte steht 37,8 % der ZEIT gruen (in Wechseln gerechnet waeren es 49 % -- gruene Phasen sind kuerzer). Handlungsrelevanter Zustand entkoppelt 54,1 % / 51,5 %, beide KI enthalten die 50 %. 205 von 350 unabhaengigen Faellen, also in gut zwei Wochen entscheidbar. Die Hysterese vom 12.08. wirkt (53 -> 54,1 %). Gate 3b ins Banner zu ziehen ist durch den Entry-Raum-Lauf schon beantwortet: diese Dimension trennt nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
be9f444507 |
Entry-Raum-Gate gegen Ausfuehrung gemessen: nicht gebaut
User fragte nach Verbesserungen der Empfehlung. entry_room blockt 60,6 % (gerichtet nur 2,7 %) und ist damit der groesste Blocker -- kalibriert aber 2026-07-16 mit MARKT-Einstieg. Seit 05./06.08. ist belegt, dass eine ruhende Order AM Level etwas Gegenteiliges ist (in die Wand kaufen vs. aus ihr ausbrechen). Das Gate blockt beide. Regel vorab fixiert, verfehlt: H1 bleibt in allen Varianten und ueber alle vier Nachbarn negativ. Nichts gebaut. 26. verworfener Signal-Eingriff. Drei Befunde, die mehr wiegen als die Ausgangsfrage: 1 Die ruhende Order ist auf DENSELBEN Signalen beidhaelftig besser als der Markt (+0,109 / +0,088 R). Der Ausfuehrungs-Hebel ist real, reicht aber nicht. 2 Das Gate ist in Wahrheit BINAER: von 4258 Signalen fallen 4 in 'Level vorhanden aber weit genug'. Es fragt praktisch nur, OB ein M5-Pivot existiert. 3 Was es durchlaesst, ist selbst beidhaelftig negativ (-0,145 / -0,071) und in H2 schlechter als die geblockte Gruppe. Das Gate sortiert Verluste um. Deckt sich mit rec_outcomes (49,2 % / 48,3 % Treffer, n=61), das den Muenzwurf-Befund jetzt live reproduziert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
5b01610634 |
Einsatz-Feld: feste Breiten durch mitwachsende ersetzt (v=174)
User: das Einsatz-Feld ist nicht breit genug. Die Trade-Leiste hatte width:88px fest, die Order-Leiste 74px. Der Einsatz zeigt Betraege wie '712.84 EUR' -- bei fett und 0,94rem passt das in 88px nicht (das sind ~9,7 Zeichen Platz bei 10 benoetigten). Jetzt in ch statt px: 1ch ist die Breite einer Ziffer und haengt damit an der Schriftgroesse -- skaliert also mit der fluiden Wurzel mit, was ein px-Wert nicht tut. Anzeige-Werte bekommen width:auto + min-width:7.5ch und duerfen bei laengeren Betraegen darueber hinaus wachsen statt abzuschneiden; Eingabefelder bleiben bei 8ch als feste, aber mitskalierende Basis. Order-Leiste 74px -> 7ch. Das war dieselbe Klasse wie die px-Abstaende von heute frueh: eine feste Pixelzahl in einem Layout, dessen Schrift skaliert. Verifiziert: min-width:7.5ch im ausgelieferten CSS, HTML zieht v=174. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
496713b396 |
Meldungen vor Marktkontext (v=173)
User-Wunsch. Reihenfolge im Dashboard war: Trade-Leiste -> M15 -> Marktkontext -> Meldungen. Jetzt: Trade-Leiste -> M15 -> Meldungen -> Marktkontext. Sachlich passend: die Meldungen sind der LIVE-Strom zum laufenden Trade (Squeeze, Ueberdehnung, S/R-Naehe, News-Konflikt), der Marktkontext dagegen Hintergrund ohne Handlungsbezug. Was handlungsrelevant ist, gehoert nach oben. Umgesetzt als reiner Markup-Umzug (kompletter <section>-Block inkl. passendem </section> ueber Tiefenzaehlung, nicht per Zeilennummer). Von hinten nach vorn ersetzt, sonst verschieben sich die Indizes. Verifiziert: Tag-Balance 18/18, 0 doppelte IDs, 0 verwaiste app.js-Referenzen, ausgeliefert steht card-pos jetzt vor card-kontext. Backup index.html.bak-2026-08-19-reihenfolge. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
3b5706c6bb |
Picos Formular-Hoehe zurueckgenommen (v=172)
User: die Textfelder des laufenden Trades sind viel zu hoch.
ZWEI Pico-Regeln waren schuld:
(1) input{height:calc(1rem*line-height + spacing-vertical*2 + border*2)} --
mit --pico-form-element-spacing-vertical:0.75rem sind das ~3rem = 48px.
Unsere .tb-field-Regel setzt nur padding, KEINE Hoehe -- also gewann Pico.
(2) input{margin-bottom:var(--pico-spacing)} -- nochmal 0,7rem darunter.
height:auto laesst wieder das eigene Padding die Hoehe bestimmen; margin-bottom:0
entfernt den Formular-Abstand. Checkbox/Radio/Range ausgenommen (eigene
Groessenlogik).
Rechnerisch am Handy (Wurzel 16px): vorher ~50px, jetzt ~30px.
Das ist die erste Stelle, an der Pico sichtbar durchgeschlagen hat -- genau der
Fall, den ich beim Einbau angekuendigt habe. Die Bruecke im Kopf von style.css
ist der Ort fuer weitere solche Ruecknahmen.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
572c6c0253 |
PicoCSS v2.1.1 als Basisschicht eingebunden (v=171)
User-Wunsch "schreibe auf pico css um".
⚠ EHRLICH ZUM UMFANG: Pico ist KLASSENLOS -- es stylt semantisches HTML
(button, input, article, nav), nicht die ~60 Trading-Klassen (.card, .tb-field,
.m15-item, .px ...). Ein echtes "Umschreiben" ist damit gar nicht moeglich; was
geht, ist eine SCHICHT: Pico liefert Typografie, Formulare, Buttons und
Fokus-Ringe, style.css steht DANACH und gewinnt bei Konflikten.
LOKAL eingebunden (83 KB), kein CDN: die PWA laeuft ueber WireGuard und muss
offline funktionieren; ein CDN-Link waere zudem CSP-blockiert.
Damit Pico das Dashboard nicht in sein Standard-Blau umfaerbt, sind seine
Variablen auf die BESTEHENDE Palette gemappt (--pico-* -> --bg/--card/--accent
...). Zwei Pico-Defaults bewusst ausgeschaltet:
- --pico-font-size: 100% -- Picos eigene fluide Schrift wuerde sich mit
html{font-size:clamp(...)} vom 13.08. MULTIPLIZIEREN.
- Block-Abstaende auf 0,7rem gezaehmt; die Karten bringen ihre eigenen mit.
Dazu drei Ruecknahmen, wo Picos Container-Regeln mit dem Grid kollidieren.
Verifiziert am laufenden Server: pico.min.css HTTP 200 (83.319 Bytes),
style.css 200, data-theme=dark im ausgelieferten HTML, und die Reihenfolge
stimmt (Pico Zeile 14, style.css Zeile 15).
Nebenbefund: das CDN antwortete sofort -- das Netz ist in Ordnung, nur Gitea
ist weiterhin nicht erreichbar.
Backups: index.html.bak-2026-08-19-pico, style.css.bak-2026-08-19
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
d03d6a1a50 |
Dashboard wirklich responsive: Hauptgitter selbstregelnd, Abstaende in rem (v=170)
User: am Handy passen sich die Groessen nicht an.
HAUPTBEFUND: main hatte FESTE 2 Spalten und brach erst bei <=360px um --
moderne Handys haben 390-430 CSS-Pixel. Auf dem Geraet standen also zwei
Spalten a ~190px nebeneinander. Der Breakpoint war schlicht zu schmal geraten.
Jetzt selbstregelnd, ohne geratenen Breakpoint:
main{grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
360/390/430px -> 1 Spalte · 768 -> 2 · 1024 -> 3 · 1440 -> 4
ZWEITER BEFUND: 138 Abstaende in px, 0 in rem -- die Schrift skalierte seit dem
13.08., die Polster nicht. Damit sass der Text am Handy eng und auf dem Desktop
verloren. Jetzt 122 von 138 auf rem umgestellt (Basis 18px, passend zur fluiden
Wurzel); die verbleibenden 29 sind Werte < 4px, wo Rundung mehr schadet als
nuetzt. Rahmen, Radien und Punktgroessen bleiben BEWUSST px -- die sollen nicht
mitwachsen.
Auch .trades (5 feste Spalten, sprengte 390px) auf auto-fit umgestellt.
Ausgeliefert verifiziert: auto-fit im CSS, 122 rem-Abstaende, HTML zieht v=170.
Backup web/style.css.bak-2026-08-19.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
3a1d8f7687 |
Y-Stapel oben rechts: gemessen statt geschaetzt (Indikator v1.42)
User: oben rechts ueberlagern die Texte immer noch.
ZWEI Fehler in meinem eigenen v1.41-Fix:
(1) Die Y-Zuweisungen standen INNERHALB von if(ObjectFind < 0) -- sie griffen
also nur beim ERZEUGEN. Ein bereits vorhandenes Label behielt seine alte
Position. Denselben Fehler hatte ich bei der X-Zentrierung schon gefangen
und hier trotzdem wiederholt.
(2) Der Faktor 1,8 px je Punkt war nur die NAECHSTE Schaetzung. Bei anderer
DPI-Skalierung waere er wieder falsch gewesen.
Jetzt: LabelH() misst die TATSAECHLICHE Pixelhoehe ueber TextGetSize
(TextSetFont nimmt 1/10 Punkt bei negativer Groesse) und gibt sie +6 px Luft
zurueck; Rueckfall size*2, falls die Messung 0 liefert. Y wird bei JEDEM Redraw
gesetzt.
⚠ TextGetSize verlangt uint& -- mit int& kompiliert es nicht (error 246).
Kompiliert ins richtige Terminal: 0 errors, 0 warnings, .ex5 frisch.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
e1a671a137 |
Y-Stapel oben rechts korrigiert (Indikator v1.41)
User: oben rechts die Texte ueberlagern sich. Dieselbe Punkt-statt-Pixel- Rechnung wie gestern links -- OBJPROP_FONTSIZE ist in PUNKT, die alten Formeln behandelten sie wie Pixel. Bei InpPriceSize=20 stand: Kurs y=14, 20 pt -> belegt 14..50 G/V y=44 -> lag MITTEN im Kurs HL y=56 -> lag MITTEN im G/V Jetzt gestapelt mit Faktor 1,8 px je Punkt (konservativ zwischen 1,6 und 2,0, traegt auch 125 % DPI): Kurs 14 · G/V 50 · HL 78 Die Positionen werden deterministisch aus den Schriftgroessen berechnet, nicht ueber eine laufende Variable -- die CSV-Zeilen kommen nicht in garantierter Reihenfolge, ein Akkumulator waere davon abhaengig. Kompiliert ins richtige Terminal: 0 errors, 0 warnings, .ex5 frisch. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
e471170b01 |
Meldungen zentriert statt oben links (Indikator v1.40)
User-Wunsch. MT5 kennt keine 'Mitte'-Ecke: der Bezugspunkt bleibt CORNER_LEFT_UPPER, aber der ANKER wird auf ANCHOR_UPPER (Text-Oberkante mittig) gesetzt und X auf die halbe Chartbreite. Damit waechst der Text nach beiden Seiten und bleibt bei jeder Fensterbreite zentriert. X wird bei JEDEM Redraw neu gesetzt, nicht nur beim Erzeugen -- sonst haengt die Zentrierung nach einer Fenster-Groessenaenderung auf der alten Breite fest. Startabstand von oben 40 -> 24, weil MT5s eigene Symbol-/Zeitrahmen-Zeile links steht und mittig nicht mehr im Weg ist. Weiterhin ueber InpMeldungY einstellbar, Zeilenabstand bleibt Faktor 2,0 der Schriftgroesse (v1.39). Kompiliert ins richtige Terminal: 0 errors, 0 warnings. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
046d9c6948 |
Meldungen oben links neu positioniert (Indikator v1.39)
User: die Anzeigetexte oben links ueberlagern sich. Zwei Fehler im alten
'16 + i*(size+6)':
(1) START zu hoch -- MT5 zeichnet oben links SELBST die Symbol-/Zeitrahmen-
Zeile; y=16 landete mitten darin. Beleg: es ueberlagerte sich, obwohl nur
EINE MS-Zeile aktiv war -- es konnten also gar nicht zwei Meldungen sein.
(2) ABSTAND zu knapp -- OBJPROP_FONTSIZE ist PUNKT, nicht Pixel; 10 pt rendern
je nach DPI 16-20 px. Bei 16 px Zeilenabstand ueberlappen mehrere
Meldungen zwangslaeufig.
Jetzt Startabstand ueber InpMeldungY (40) und Zeilenabstand Faktor 2,0.
Kompiliert ins richtige Terminal: 0 errors, 0 warnings.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
adcae09317 |
Ruhende Messungen als RUHT markieren statt als "sammelt"
Zwei Messungen brauchen SQUEEZE-Trades, und auto_squeeze ist seit dem 11.08.
aus -- seit dem 17.08. auch begruendet (B5-Regel gefallen). Ihre Zaehler stehen
seither still: Stop-Order-Umbau 8/12, Nacht-Fenster 3/15.
Als "sammelt (67 %)" angezeigt suggerierten sie einen Fortschritt, den es nicht
gibt: sie laufen NIE ab. Jetzt erscheinen sie als
⏸ ... [RUHT] 8/12 ... -- steht STILL
braucht SQUEEZE-Trades -- auto_squeeze ist AUS ...
RUHEND heisst: die Messung ist nicht langsam, sie ist BLOCKIERT -- und die
Blockade ist eine ENTSCHEIDUNG, keine Datenfrage. Wer den Trader wieder
einschaltet, laesst beide automatisch weiterlaufen; es ist nichts nachzuholen.
Umsetzung: RUHT-Tabelle mit je einer Pruef-Funktion; _auto_squeeze_an() liest
core.live_config (ini + runtime_state in der Vorrangfolge des Engine-Starts).
Faellt die Pruefung aus, gilt "nicht ruhend" -- lieber ein Zaehler zu viel als
eine still verschwundene Messung.
Die sechs uebrigen Messungen laufen unveraendert als "sammelt".
⚠ Beim Bau in die dokumentierte \n-Falle gelaufen: ein per Heredoc geschriebenes
f"\n..." wurde zum echten Umbruch im String-Literal (SyntaxError). CLAUDE.md
sagt genau das ("NIE per Heredoc -- den Edit-Weg nehmen"); ueber den Edit-Weg
behoben, check_nfalle laeuft sauber.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
7a832c4f40 |
Zwei Waechter-Fehlalarme behoben (auto_squeeze-Erwartung, candles_m1-Vorbedingung)
Bei der Durchsicht offener Punkte gefunden -- beide derselben Klasse: ein
Waechter, der dauerhaft warnt, wird ignoriert, und mit ihm die eine echte
Meldung (so ist der Divergenz-Waechter verstummt).
(1) Config-Waechter erwartete auto_squeeze='true' und meldete deshalb seit dem
11.08. taeglich eine Abweichung -- obwohl FALSE inzwischen der begruendete
Zustand ist: die B5-Regel ist am 17.08. rechnerisch gefallen (Verhaeltnis
0,14 gegen Latte 1,0, PF 0,39, Latte unerreichbar). Erwartung auf 'false'
gedreht, mit dem Hinweis, dass ein Wiedereinschalten eine NEUE Entscheidung
mit NEUER Latte waere -- dann gehoert der Eintrag zurueckgedreht.
(2) Telemetrie-Puls meldete candles_m1 als Ausfall ("letzte Zeile vor 0,5 h").
Real war der Markt zu -- Pepperstone schliesst ~23:00 und das ganze
Wochenende. Der Logger hatte gestern erst die Vorbedingungs-Kennzeichnung
fuer pbreak_predictions/rec_outcomes bekommen; candles_m1 stand noch auf
"unbedingt". Jetzt mit Vorbedingung -> erscheint als Hinweis statt Ausfall.
0 Zeilen bleibt weiterhin IMMER ein Befund.
Verifiziert: Puls zeigt beide als Hinweis, Config-Waechter still.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
30ed913678 |
Beschriftung der Konsolidierungs-Box entfernt (Indikator v1.38)
User-Wunsch. Die sichtbare Beschriftung ("Konsolidierung (10-Bar-Spanne)" bzw.
"Konsolidierung - komprimiert, Ausbruch steht bevor") kam in v1.30 auf die Frage
"was bedeutet die graue Box" und stand seither dauerhaft im Chart.
Der erklaerende Text bleibt als TOOLTIP an der Box -- die Information geht also
nicht verloren, sie draengt sich nur nicht mehr auf. Die Box selbst und ihre
Farbgebung (komprimiert/normal) bleiben unveraendert.
Ein evtl. noch vorhandenes Alt-Objekt aus v1.30-v1.37 wird beim ersten Redraw
geloescht: ObjectsDeleteAll(0, PFX) raeumt zwar ohnehin, aber nur solange der
Indikator laeuft -- nach einem Versionswechsel ohne Redraw bliebe es sonst
stehen (dieselbe Alt-Objekt-Falle wie bei den HL-Pfeilen).
Kompiliert ins richtige Terminal: 0 errors, 0 warnings, .ex5 frisch, Version im
Terminal gegengeprueft, nur noch die Loeschzeile enthaelt TCONSOL.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
ca61cf1498 |
S/R als ZONE statt Linie (RZ/SZ, Indikator v1.37)
User-Wunsch nach einem TradingView-Bild: Resistance Zone und eine untere Zone
als farbige Baender. Neu RZ;lo;hi und SZ;lo;hi, im Indikator als OBJ_RECTANGLE
mit Beschriftung, nach rechts verlaengert.
DIE BREITE IST ECHT: sie ist die Spanne der M30-Pivots, die den Cluster gebildet
haben (sr_levels.zonen(), additiv -- cluster() bleibt unveraendert, weil es den
S/R-Auto-Close speist). Live verifiziert: R;82.786 liegt in RZ;82.776;82.797,
S;82.15 in SZ;82.14;82.16. Einzel-Pivot bekommt 0,10xATR Mindestbreite.
ZWEI ABWEICHUNGEN VOM VORBILD, beide begruendet:
(1) KEIN Fibonacci. Das Bild leitet seine Zone aus 0,618/0,658 ab. Fib ist hier
gemessen und verworfen (04.08.): 54,3/54,5 % Haltequote gegen 55,7/53,8 %
einer Zufallslinie gleicher Distanz, und schlechter als M30-Pivots.
(2) Die untere Zone heisst SUPPORT, nicht "Cumulative Long Liquidation". Echte
Liquidationsdaten hat das Projekt nicht; die HL-Waende sind am 17.08. als
reaktiv gemessen. Bricht die Support-Zone, liegen dort die Long-Stops --
dieselbe Stelle, ehrlich benannt.
Abschaltbar InpShowZonen. Kompiliert ins richtige Terminal (0/0), deployt,
verifiziert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
8d17cf08e0 |
Verdict-Module gemessen (2. Durchgang) + Faelligkeitsschwelle zaehlte die falsche Groesse
FAELLIGE MESSUNG (30.282 Zeilen). Horizont 60 min, gegen die Drift-Null, Episoden statt Rohzeilen: Welle 3,0 254 Ep. +0,158 / +0,419 61 % beide + Liq-Trend 0,5 297 Ep. +0,310 / +0,175 52 % beide + Squeeze 2,0 249 Ep. +0,110 / +0,254 48 % beide + Orderbuch 0,5 2.712 Ep. -0,039 / -0,100 49 % beide - Elliott 1,0 1.388 Ep. kippt 49 % M30/Muster/H1 kippen H1 1,5 50 Ep. -1,165 / +1,937 66 % kippt Meine Vermutung vom 07.08. war FALSCH: Liq-Trend besteht (+0,310/+0,175 ueber 297 Episoden). Ich hatte ihn verdaechtigt, weil er dieselbe HL-Quelle nutzt wie das entmachtete Orderbuch -- das war Analogie, keine Messung. Bleibt bei 0,5. Orderbuch bestaetigt: beidhaelftig negativ ueber 2.712 Episoden, die groesste Stichprobe und der einzige konsistent falsche Beitrag. Entmachtung war richtig. SCHAERFSTER BEFUND: H1 traegt 41,2 % des Nadel-Einflusses auf 50 Episoden, die das Vorzeichen kippen. Hoechster Einfluss, duennste Beleglage. Live folgenlos (die Nadel ist reine Anzeige), aber wer sie liest, sollte es wissen. FAELLIGKEITSSCHWELLE KORRIGIERT: stand auf 25.000 ZEILEN -- bei Minutentakt in 12 Tagen erreicht, waehrend die auswertbare Einheit Episoden sind (je Modul nur 50 bis 2.712). Dieselbe Klasse wie pbreak_accuracy_v2. Jetzt 400 Headline-Episoden als Proxy, mit dem ausdruecklichen Hinweis, dass es je Modul deutlich weniger sind. PUNKT 2 (Stop-Order-Umbau, 8/12): DERSELBE DEADLOCK wie B5. Alle acht Bot-Trades stammen vom 06.08.; seit auto_squeeze am 11.08. aus ist, kommt keiner mehr dazu. Was die 8 zeigen, bleibt gueltig und positiv: 7 von 8 fuellten per ruhender Order, Market-Fallback praktisch weg (n=1 bei +0,148xATR). Die formale Faelligkeit haengt an derselben Entscheidung wie B5, nicht an weiteren Daten. Nichts am Live-System geaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
f3e7eeff6c |
Doku: Netto-Steuerrechnung war faelschlich als 'nicht gebaut' gefuehrt
Bei der Durchsicht offener Punkte gefunden: CLAUDE.md fuehrte die Umstellung auf die echten WHT-/Tax-settlement-Buchungen weiter als offen -- sie ist seit dem 12.08. gebaut (trader.steuer_buchungen + server._add_net + Feld wht_quelle, Ergebnis: all von -2.449,95 auf +181,00 EUR). Stelle korrigiert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
204e80bb68 |
Meldungen oben links im MT5-Chart (MS;<text>, Indikator v1.36)
User-Wunsch. Neue CSV-Zeile MS;<text>, im Indikator als gestapelte OBJ_LABEL an CORNER_LEFT_UPPER (oben rechts sind Kurs, G/V und HL belegt). Inhalt = dieselben Zeilen wie die Dashboard-Karte "Meldungen": Squeeze, Ueberdehnung, S/R-Ziel mit P(break), Stop-Seite, News-Blackout. NUR ZUSAMMENGESETZT, NICHT NEU GERECHNET -- alles aus bereits berechneten Snapshot-Teilen bzw. _last_sr_close_hint/_last_stop_approach; calendar.blackout() ist ein reiner Speicher-Zugriff. Der Konsens-Pfeil hat im 5-s-Export-Takt einmal ein komplettes zweites _verdict() gezogen. Zwei Felder vorher geprueft statt angenommen: _last_calendar und _export_meldungen gab es NICHT -- ohne die Pruefung haette das umgebende except Exception es still verschluckt und die Meldungen waeren dauerhaft leer geblieben (dieselbe Klasse wie der wave_snap-Fallstrick vom 04.08.). ASCII-SICHER, real noetig: der erste Lauf lieferte "MS; Kompression Ausbruch steht bevor" -- Emoji und Gedankenstrich waren zu Leerzeichen geworden. Der Indikator liest die CSV nicht als UTF-8 (deshalb steht dort auch "Unterstuetzung"). Jetzt Ersetzung + Filter auf 32-126. Verifiziert: MS;Squeeze-Ausbruch LONG @ 82.413, 0 Nicht-ASCII-Zeichen. Deckel 5 Zeilen a 70 Zeichen; eigener Praefix SRB_MSG_*, damit die Labels beim Redraw verschwinden. Abschaltbar per [trading] export_meldungen=false oder InpShowMeldungen. Kompiliert ins richtige Terminal (0 errors, 0 warnings), deployt und am laufenden Server verifiziert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
55dc69ef42 |
Kerzenmuster fuer die Richtung der naechsten Kerze = nein (4. Messung der Klasse)
User-Anschlussfrage. Gemessen mit den ECHTEN Muster-Schwellen aus
core/candles.py (1:1 importiert, kein Nachbau), 80k M5-Bars, 2 Halbjahre,
unveraenderte Schlusskurse ausgeschlossen, 95-%-Intervall je Zelle. Bewertet
wird die Lehrbuch-Lesart, damit sichtbar wird, ob sie stimmt.
Marubozu 46,5 % / 45,2 % beide KI unter 50
Engulfing 47,4 % / 49,5 %
Outside Bar 47,3 % / 48,9 %
langer Koerper 48,5 % / 47,6 %
langer Docht OBEN 49,4 % / 47,8 %
langer Docht UNTEN 50,6 % / 50,6 % beide KI enthalten 50
KEIN Muster erfuellt die vorab fixierte Regel. Trefferquoten 45,2-50,6 %, fuenf
Zellen mit Intervall komplett unter 50 -- in der Lehrbuch-Lesart also
verlaesslich falsch. Die einzige beidhaelftig ueber 50 kippt beim Vorzeichen der
Bewegung (+0,0004 / -0,0037).
Das reproduziert den 60-Minuten-Befund vom 31.07. ("Lehrbuch-Lesart in beiden
Haelften invertiert") jetzt auf dem 1-Bar-Horizont, mit den echten Klassen statt
grober Proxys. Vierte Messung der Kerzen-Klasse.
Und selbst umgedreht zahlt es nicht: groesste Oe-Bewegung 0,0077 $, kippt in der
anderen Haelfte auf -0,0019; halber Spread 0,0100 $, Median-Kerze 0,0400 $.
URTEIL: der Pfeil bleibt bei der kalibrierten Level-Aussage. Nichts geaendert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
eec28e3382 |
Pfeil "naechste Kerze" gemessen: Effekt existiert, ist aber 50-100x zu klein
User: der Pfeil an der aktuellen Kerze zeigt die Abprall-Wahrscheinlichkeit des S/R -- er soll stattdessen die Richtung der naechsten Kerze schaetzen. Die Beobachtung stimmt und ist Absicht: live steht AR;L;81.815;81.983;62% Abprall -- der L-Pfeil, seit v1.32 bewusst als BEDINGTE, kalibrierte Groesse gebaut (haelt DIESES Level, AUC 0,65 oos) statt als freie Prognose. Trotzdem neu gemessen statt abgelehnt: die bisherigen Richtungs-Messungen liefen ueber 60-360 Minuten, die naechste M5-Kerze ist ein kuerzerer Horizont mit eigener Mikrostruktur. 80k M5-Bars, 2 Halbjahre, 5 Praediktoren: EMA-Trend 49,6 % / 49,6 % Momentum 3 Bars 48,3 % / 48,3 % letzte Kerze fort 48,6 % / 48,8 % letzte Kerze UMKEHR 51,4 % / 51,2 % <- beide KI ueber 50 langer Docht 49,5 % / 49,3 % Es GIBT einen Effekt, und zwar den umgekehrten: 1-Bar-Mean-Reversion trifft beidhaelftig ueber 50 %. Trendfolge und Momentum liegen darunter. ABER die oekonomische Bedingung faellt katastrophal durch: die Oe-Bewegung in Vorhersagerichtung ist +-0,0002 $, der halbe Spread 0,0100 $ -- der Effekt ist 50-100x zu klein. Eine M5-Kerze bewegt sich im Median 0,0400 $, der Spread ist 0,0200 $ = 50 % davon. URTEIL: der Pfeil bleibt. Ein "naechste Kerze"-Pfeil waere technisch wahr und praktisch wertlos -- und muesste nach der Messung GEGEN die letzte Kerze zeigen, was jeder Mensch als Fehler lesen wuerde. EIGENER MESSFEHLER, dokumentiert weil er eine Klasse ist: der erste Lauf zaehlte unveraenderte Schlusskurse als Fehltreffer, wodurch ein Praediktor UND sein Gegenteil beide unter 50 % lagen (43,4 + 45,8 = 89,2) -- arithmetisch unmoeglich und damit der Verraeter. Real sind ~11 % der M5-Kerzen unveraendert. Merksatz: wenn A und Nicht-A sich nicht zu 100 % addieren, ist die Messung kaputt, nicht der Markt. Nichts am Live-System geaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
792355e8f9 |
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>
|
||
|
|
9dbc5d0452 |
Recherche neue Datenquellen: keine empfohlen -- und eine Projektzahl korrigiert
User-Frage nach weiteren Quellen (Websites, Newsfeed, Telegram, X). DER ENTSCHEIDENDE FILTER IST DIE HALTEDAUER (12-18 min). Damit faellt die gesamte Fundamentaldaten-Welt weg, sie ist woechentlich: EIA-Lager / API-Bulletin woechentlich -> nur Event-Blackout (gebaut) CFTC COT woechentlich -> nein Baker-Hughes Rig Count woechentlich -> nein OPEC / IEA monatlich -> nein Tanker/Satellit taeglich -> zu grob UND Enterprise-Preis Als Event-Gate ist genau das bereits umgesetzt (EIA-Blackout + econ_calendar ueber Forex Factory). oilpriceapi.com (10k Anfragen gratis) buendelt EIA/Baker Hughes/OPEC bequem, liefert aber dieselben woechentlichen Zahlen. KORREKTUR EINER PROJEKTZAHL: die dokumentierten "X-API Basic 200 $/Monat, Pro 5.000 $" gelten nicht mehr. Seit Februar 2026 ist X auf pay-per-use umgestellt: 0,005 $ je gelesenem Post, Deckel 2 Mio./Monat, alte Abo-Stufen fuer Neukunden geschlossen. 300 Posts/Tag waeren ~45 $/Monat statt 200. Der KOSTEN-Einwand von damals ist damit hinfaellig -- der MESSUNGS-Einwand steht unveraendert: der vorhandene Textstrom (News-Sentiment) ist gemessen nicht robust praediktiv. Telegram-Kanaele bleiben verworfen (transportieren Screenshots; und das Orderbuch selbst ist am 17.08. als reaktiv gemessen). GESAMTURTEIL: keine neue Quelle empfohlen. 25 Signal-Eingriffe gescheitert, die HL-Quelle in allen drei Auspraegungen durchgemessen, und der einzige je gemessene grosse Hebel war die Ausfuehrung (+0,32 R). Diese Latte muesste eine neue Quelle schlagen. Nichts am Live-System geaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
819b2277b8 |
Orderbuch fuer die Empfehlung? Nein -- es ist reaktiv, nicht praediktiv
User-Frage. Neu gerechnet auf 196.720 Buch-Schnappschuessen / 17,4 Tagen mit dem MT5-Kurs in derselben Zeile (64 % bei lebendem Broker verwertbar). Merkmale imb1/imb5/imb20, Horizonte 60 s und 300 s, Quintile je Haelfte, nicht ueberlappende Fenster, 95-%-Bootstrap. Ergebnis: alle 12 Zellen haben ein Intervall, das die Null enthaelt. DER AUFSCHLUSSREICHE TEIL IST DIE RUECKWAERTS-KONTROLLE. Neben der kuenftigen wird auch die VERGANGENE MT5-Bewegung je Quintil berichtet -- in 10 von 12 Zellen ist die RUECKWAERTS-Spanne groesser: imb1 · 60 s vorwaerts -0,05 / +0,08 bp rueckwaerts +0,72 / +0,50 imb1 · 300 s vorwaerts +0,06 / -0,91 rueckwaerts +1,31 / +1,73 imb5 · 60 s vorwaerts -0,09 / +0,10 rueckwaerts +0,53 / +0,78 imb20 · 60 s vorwaerts +0,05 / +0,06 rueckwaerts +0,63 / +0,65 Das Buch spiegelt die Bewegung, die auf Pepperstone schon passiert ist. Die zwei Ausnahmen (imb5/imb20 300 s H1) reproduzieren in H2 nicht. Das passt exakt zum Lead-Lag-Befund vom selben Tag: Pepperstone fuehrt HL um ~6 s. Ein Orderbuch, dessen Boerse hinterherlaeuft, kann den Broker nicht vorhersagen -- der Befund ist damit mechanistisch erklaert, nicht nur gemessen. Oekonomisch entscheidet es ohnehin: die groesste Vorwaerts-Spanne ueber alle Zellen ist +1,63 bp, der Pepperstone-Spread ~2,7 bp. URTEIL: nicht nutzbar. Bestaetigt unabhaengig die Entmachtung des Verdict-Moduls "Orderbuch" am 06.08. -- damals aus der Verdict-Telemetrie, jetzt aus den Rohdaten der Quelle selbst. Grenzen: nach der Entkopplung bleiben bei 300 s nur 1.252/1.254 Faelle; gemessen wurde die Imbalance, nicht die Waende (deren Preis-Zuordnung braeuchte die Basis-Korrektur und waere zirkulaer); 17,4 Tage = ein Regime. Nichts am Live-System geaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
82ccf292ff |
Lead-Lag HL gegen Pepperstone neu gemessen: Pepperstone fuehrt, nicht HL
User-Frage, ob der Hyperliquid-Kurs dem Broker vorauslaeuft und den Trend
vorhersagen koennte. Im Projekt stand dazu ein Befund aus n=545; neu gerechnet
auf 245.073 Ticks / 20,4 Tagen -- er reproduziert, deutlich schaerfer.
KREUZKORRELATION der Renditen (k>0 = HL fuehrt, k<0 = Pepperstone fuehrt):
Lag GESAMT H1 H2
k=-1 (~6 s, Pepperstone voraus) +0,455 +0,460 +0,447
k=0 (gleichzeitig) +0,505 +0,507 +0,503
k=+1 (~6 s, HL voraus) +0,020 +0,029 +0,005
Die Asymmetrie ist die Antwort: +0,455 gegen +0,020, Faktor 23. Beidhaelftig
identisch. Kontrolle bestanden (k=0 bei +0,505 -- beide handeln erkennbar WTI).
RICHTUNGSTEST, entkoppelt (nicht ueberlappende Fenster): ueber 12 Zellen
(Vorlauf 6-30 s x Horizont 6-30 s x Schwelle 0,5-2,0 bp) liegt die Trefferquote
zwischen 47,6 und 49,8 % -- durchweg am oder unter dem Muenzwurf; fuenf Zellen
haben ein Intervall komplett unter 50 %.
Oekonomisch entscheidet es ohnehin: die Oe-Bewegung in HL-Richtung betraegt
+0,00 bis +0,14 bp (bei 30 s sogar -0,09), der Pepperstone-Spread ist ~2,7 bp --
20- bis 270-mal so gross.
URTEIL: HL taugt nicht als Vorlaufindikator. Deckt sich mit dem uebrigen Befund
zu dieser Quelle (Orderbuch-Druck 0,2-1,0 bp, Modul am 06.08. entmachtet,
Funding/Premium tragen nicht). Was HL bleibt: der 24/7-Kurs am Wochenende --
eine Verfuegbarkeits-, keine Vorhersage-Eigenschaft.
Drei methodische Punkte, ohne die es anders ausgefallen waere:
(1) 32 % der Zeit steht Pepperstone still (Wochenende) -- ein stehender Kurs
erzeugt zwangslaeufig den Eindruck, HL laufe voraus. Nur die 65 %
verwertbaren Ticks bei lebendem Broker gehen ein.
(2) Gerechnet auf ROHEN Kursen: hl_mid + basis ist bei stehendem Broker
zirkulaer (dokumentiert 02.08.).
(3) Nur Renditen, nie Niveaus -- kointegrierte Preisreihen korrelieren immer
nahe 1 und sagen nichts ueber Vorlauf.
Grenze: Abtastung ~6 s, ein Vorlauf darunter waere unsichtbar -- praktisch aber
nicht ausbeutbar (1-s-Poll, WireGuard, Market-Order).
Nichts am Live-System geaendert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
276c8c7f07 |
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> |
||
|
|
44191947ac |
Telegram bei gruener M15-Karte (m15_alert) + Tests verschmutzen nicht mehr das Log
User: "wenn es eine Empfehlung gibt (gruen), schicke eine Telegram-Nachricht." engine._check_m15_alert, direkt hinter _log_m15_state -- dieselbe Quelle wie Anzeige und Selbstmessung, damit die drei nicht auseinanderlaufen koennen. DIE ENTPRELLUNG IST DER GANZE BAU. Roh springt die Karte 85x/Tag auf gruen (m15_states, 3 Tage nach der Hysterese vom 12.08.) -- das waere Spam. Alle Stufen an den echten Daten kalibriert, nicht geraten: nur Flanke 85,0/Tag + Level & Richtung als Schluessel 23,7/Tag + 30 min Mindestabstand 13,3/Tag + Fenster 8-20 Uhr (Default) 7,7/Tag (Vergleich: Close-Meldung ab 50 EUR 2,4-6,1/Tag) Nach 4 h darf dasselbe Level erneut melden, sonst verschweigt der Alert ein Setup, das den ganzen Tag wiederkommt. Der Text sagt ausdruecklich, dass es KEINE Prognose ist: die Karte automatisch zu handeln faellt gemessen durch (backtest_m15_auto.py: OeR -0,162/-0,094). Die Meldung ist ein Hinweis zum Hinsehen fuer den Menschen (+3,20 EUR/Lot ueber 146 Trades). Die P(break)-Formulierung ist wortgleich zu Karte und Chart (v1.35). 13 Tests, Schwerpunkt auf dem was NICHT gesendet werden darf. Mutationsprobe in vier Zweige, alle gefangen. DIE PROBE HAT EIN TESTLOCH AUFGEDECKT: das Entfernen der Flankenerkennung liess zunaechst ALLE Tests gruen, weil Cooldown und 4-h-Schluessel dasselbe abfangen. Zwei Schutzschichten, die sich maskieren -- dasselbe Muster wie beim Fill-Dedup. Geschlossen durch test_flankenerkennung_ISOLIERT. NEBENBEFUND, behoben: Tests schrieben ins Produktions-Log (ueber 150 M15-Alert-Zeilen + Close-Push #4711 aus test_close_buchung). Ich hielt die Entprellung deshalb zuerst fuer live defekt. conftest.py entfernt den FileHandler des oil-Loggers jetzt fuer die Sitzung -- vierte Grundregel der Suite. Verifiziert: Log-Groesse vor und nach einem Komplettlauf identisch. Live verifiziert: seit dem Serverstart genau 1 Alert trotz mehrfachem gruen/gelb-Wechsel. 85 Tests gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
c251652d33 |
Enger Stop fuer die ersten N Bars: keine Aenderung (backtest_sl_staged.py)
User-Idee: SL beim Eroeffnen sehr eng, damit falsch laufende Trades frueh geschlossen werden; laeuft er richtig, etappenweise nachziehen. Der zweite Teil ist laengst gebaut (Phasen-Ratsche); neu war allein der zeitlich befristete enge Stop. Ohne Exit-Nachbau gerechnet: Lauf A (sl_atr=eng) und B (sl_atr=weit) laufen auf DEMSELBEN Pfad; innerhalb der ersten N Bars ist der einzige Unterschied der SL-Abstand, jeder Nicht-SL-Ausstieg faellt identisch aus. Also exakt R = R_A wenn A vor/bei Bar N aussteigt, sonst R_B. Keine fuenfte Exit-Kopie. 80k M5, Squeeze-Entries, ruhende Order am Level, kanonischer Exit, Echtkosten, ein Slot. Basis = durchgehend 3,4xATR_M5 (der Live-Stop, aus 121 echten Trades als Median gegengerechnet): Basis H1 -0,248 / WR 37,0 % / worst -3,73 H2 -0,107 / 44,4 % / -3,74 N=3, eng 0,5 H1 -0,263 / WR 23,3 % H2 -0,043 / 30,4 % N=6, eng 0,5 H1 -0,242 / WR 22,9 % / worst -0,89 H2 -0,045 / 30,1 % / -0,96 N=12, eng 0,5 H1 -0,240 H2 -0,044 DER ENTSCHEIDENDE BEFUND IST STRUKTURELL: die Staffelung hat keinen Raum. Bei N=12 steigen 269 von 279 Trades schon in Phase 1 aus (96 %) -- die mittlere Haltedauer ist 12-18 min, "die ersten 30-60 Minuten" sind der ganze Trade. Wo die Staffelung ueberhaupt etwas anderes tut als ein dauerhaft enger Stop (N=3), ist sie in H1 bei allen vier eng-Werten schlechter. Wo sie gewinnt (N=6/12), ist sie kein gestaffelter Stop mehr, sondern ein permanent enger. Regel verfehlt: die zwei nominell besseren Kombinationen liegen in H1 bei +0,007/+0,008, also weit unter einem Standardfehler (~0,055 bei n=279), die Nachbarn kippen, und alle Werte sind negativ (Verlustgrade, kein Edge). WAS ECHT IST: der Tail. Worst-Case -3,73 -> -0,83/-0,96 = Faktor 4. Bezahlt mit der Trefferquote (37,0 -> 22,9 %). Aber die Bar-Sim ueberschaetzt enge Stops systematisch (Kipp ~0,3xATR) -- die Verzerrung geht zugunsten der Idee, das Nein ist damit umso belastbarer. Nichts am Live-System geaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
02bec8fbb2 |
Sizing auf der echten Historie gerechnet (analyze_sizing_live.py)
Folge der S/R-Widerlegung: der Hebel zeigt auf die GROESSE. Pfad-Simulation ueber 1.278 geschlossene Trades (08.05.-13.08.), pnl/lots als groessenunabhaengiges Ergebnis, Lots aus der simulierten Equity abgeleitet. Zwei dokumentierte Zahlen stimmten nicht mehr und wurden aus den Daten neu geschaetzt: EUR je $ und Lot = 86,90 (notiert 87,6), Margin je Lot ~405 EUR (notiert 670). DER IST-PFAD IST DIE BOTSCHAFT: Start 1.115,70 · Hoch 2.724,16 (05.08.) · Tief 261,36 (30.07.) · Ende 1.279,04 Max-Drawdown 82,8 % · schlechtester Einzeltrade -381,16 EUR 42 von 71 Tagen negativ; getragen von wenigen Tagen (04.08. +1.297). Das Konto hat zweimal den Grossteil seines Werts verloren. Fuer unbeaufsichtigten Betrieb ist das die entscheidende Zahl, nicht der Endstand. VARIANTEN (Ende / MaxDD / schlechtester Trade): IST 1.279 / 82,8 % / -381 Lot-Deckel 1,5 1.362 / 82,8 % / -345 -> bringt fast nichts Risiko 1,5 %/Trade 680 / 54,4 % / -77 Risiko 0,5 %/Trade 960 / 22,2 % / -27 IST + Breaker 8 %/Tag 2.018 / 59,2 % / -381 -> verbessert BEIDES ABER: ein Tag traegt 70 % des Breaker-Vorteils (07.08. +556,82 von +800,19), und an drei Tagen kostet er (-106,85 / -96,00 / -50,77). Ohne den 07.08. bleiben +243 EUR ueber 10 Tage. Das ist kein Makel der Messung, sondern das Wesen einer Versicherung -- ihr Wert sitzt im Tail. Die +739 sind eine Realisierung, keine Erwartung. GRENZEN: die Sim sperrt nach dem Ausloesen ALLE Trades des Tages; live sperrt der Breaker nur die autonomen. Bei einem zu 94 % manuell gehandelten Konto misst sie damit eher eine Disziplin-Regel -- fuer das Ziel Autotrading ist sie dagegen das richtige Modell. Confounder bei Risiko-Sizing: laeuft auf 1.118 von 1.278 Trades (nur die mit sl_at_entry). Nichts am Live-System geaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
1e8d700f46 |
"S/R-Close kappt die Squeeze-Laeufer" = widerlegt (backtest_squeeze_srclose2.py)
Meine eigene Hypothese vom selben Tag -- gemessen falsch, und zwar doppelt. (1) BACKTEST (80k M5, 2 Halbjahre, Einstiege ueber den geteilten squeeze_scan.scan(on_entry=...), ruhende Order am Level mit Fill bei Beruehrung, kanonischer Exit, Echtkosten, ein Slot; identische Entry-Liste ueber alle Varianten, variiert wird NUR der Exit): A) ohne S/R-Close H1 -0,151 / PF 0,72 H2 -0,079 / PF 0,86 B) mit p<0,35 (LIVE) H1 -0,119 / PF 0,76 H2 -0,049 / PF 0,91 D +0,032/+0,030 B) mit p<0,45 H1 -0,088 H2 -0,046 D +0,063/+0,033 Der S/R-Close ist in BEIDEN Haelften besser als ohne -- die vorab fixierte Regel sagt: anlassen. Und die von mir vorgeschlagene "Abhilfe" (Close erst ab Mindestgewinn) macht H1 schlechter (D -0,006 / -0,011). (2) LIVE, 11 Squeeze-Trades ab 01.08.: sl 5 Trades -198,17 EUR sr_close 4 Trades +15,98 EUR <- der verdaechtigte Exit hat BEIGETRAGEN manual 2 Trades +8,73 EUR Der groesste Gewinner (+77,34) kam ebenfalls ueber sl, also ueber das Trailing. Die Groesse steckt allein auf der Verlustseite: -175,21 EUR bei 2,91 Lots = 0,695 $ = der planmaessige 2xATR-Stop. Der Hebel zeigt auf SIZING, nicht Exit. GRENZE, nicht ueberspielt: die ABSOLUTEN Werte reproduzieren den dokumentierten Kontrollwert NICHT (backtest_squeeze_touchfill.py: +0,124/+0,292 bei 1.092/1.807 Trades gegen -0,151/-0,079 bei 273/422). Belastbar ist allein der RELATIVE Vergleich; "der Squeeze ist negativ" ist hier NICHT belegt. Zwei eigene Fehler dokumentiert, weil es Fehlerklassen sind: - erster Lauf nahm den Modul-Default ATRMIN_STD=0,12 statt des Live-Werts 0,06 -> H1 127 gegen H2 483 Einstiege, voellig andere Population. Dieselbe Klasse wie das fehlende set_entry_room(0.6): ein aufgerufenes Gate ist nicht dasselbe wie ein aktives Gate. - erster Entwurf haengte den Close an stop_when (prueft den BAR-CLOSE gegen ein 0,018-$-Fenster) -> feuerte fast nie. Live prueft den laufenden Kurs im Sekundentakt; das Analogon ist die Bar-SPANNE. Nichts am Live-System geaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
03329c44b5 |
Zwischenstand Autotrading: Entry repariert, Defekt in den Exit gewandert
Erhebung auf die Frage "wie erreiche ich das Ziel Autotrading?". Nichts am Live-System geaendert -- aber die Diagnose verschiebt sich. Der Pending-Umbau vom 05.08. hat gewirkt: von 8 Bot-Trades seit dem Umbau fuellten 7 per ruhender Order; der Market-Fallback ist praktisch weg (n=1 bei +0,148xATR, innerhalb der Nachjagd-Bremse). Vorher lag der Live-Median bei +0,275xATR ueber dem Level. Deployment-Drift Fall 7 ist damit geschlossen. Und trotzdem verliert der Squeeze -- die Ursache ist also eine andere geworden. B5 (ab 01.08., n=11/20): Trefferquote 73 %, aber OeGewinn 13,62 gegen OeVerlust 94,15 = Verhaeltnis 0,14 (Latte 1,0), PF 0,39 (Latte 1,0), Summe -173,46 EUR. Die Signatur steht im Trade-Protokoll: drei der sieben Pending-Trades wurden per sr_close bei +0,26 / +2,88 / +0,28 EUR geschlossen, waehrend die Verlierer bis zum vollen Stop liefen (-43 / -64 / -175). Der Squeeze lebt gemessen von Laeufern (43 % Treffer, Ertrag im Tail) -- genau die werden gekappt. Die alte Entlastung des S/R-Closes ist nicht mehr bindend: backtest_squeeze_srclose.py (24.07.) mass einen Wash, aber mit dem ALTEN P(break)-Modell und Schwelle 0,55/0,60. Heute laeuft das nachtrainierte Modell mit 0,35, das 94-97 % aller Beruehrungen schliesst. Gemessen unter X, betrieben unter Y -- dasselbe Muster wie die acht dokumentierten Faelle. NAECHSTE MESSUNG: Squeeze mit gegen ohne S/R-Close unter dem heutigen Stand. Kontext, je Lot normiert: AUTONOM n=11 -5,85 EUR/Lot · MENSCH n=146 +3,20/Lot. Die setup-Spalte taugt NICHT als Bot/Mensch-Trennung (engine._open schreibt die Wellenlage auch bei manuellen Trades mit) -- ein erster Auswertungsversuch hat genau das verwechselt und dem Bot 152 Trades mit +730 EUR zugeschrieben. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
354a57ef5f |
M15-Karte automatisch handeln = faellt durch (backtest_m15_auto.py)
User: "messe ob wir den Autotrader bei M15-Empfehlung automatisch traden lassen
koennen." Track-B-Frage, Regel VORAB fixiert (OeR>0 & PF>1 & KI ohne Null in
beiden Haelften, n>=100, schlaegt die Kontrolle, Nachbarn kippen nicht).
Neu gemessen wurde genau EIN Zusatz: die Karte hat bewusst keine Richtung, die
entsteht erst aus der `lesart` (aus P(break)). backtest_m15_gates.py handelt die
vom HTF ERLAUBTE Richtung, nicht die Lesart -- die war nie geprueft.
80k M5-Bars, 2 Halbjahre, echte core.sr_levels/_p_break-Gewichte, Status+Lesart
inkl. Hysterese, kanonischer Exit, Echtkosten, Fill bei BERUEHRUNG, ein Slot:
A) Karte (Lesart) H1 -0,162 / PF 0,72 H2 -0,094 / PF 0,84
B) Lesart + Veto-konform H1 -0,104 / PF 0,81 H2 -0,051 / PF 0,91
C) KONTROLLE HTF-Richtung H1 -0,085 / PF 0,85 H2 -0,030 / PF 0,95
D) KONTROLLE Gegenrichtung H1 -0,070 / PF 0,87 H2 +0,007 / PF 1,01
Alle vier laufen auf DENSELBEN gruenen, gerichteten Momenten -- variiert wird nur
die Richtung. Die Lesart ist damit in BEIDEN Haelften schlechter als die
HTF-Richtung UND schlechter als ihr eigenes Gegenteil; sie kostet -0,077 bzw.
-0,064 OeR gegenueber C.
A ist nicht "unbelegt", sondern belegt NEGATIV: das 95-%-KI schliesst in beiden
Haelften die Null aus ([-0,222 … -0,099] und [-0,152 … -0,038]).
Nachbarn 0,40/0,50/0,60 alle beidhaelftig negativ und monoton schlechter.
Unabhaengige LIVE-Gegenprobe (m15_states, 3.678 Zustaende): der handelbare
Zustand trifft entkoppelt 46,8 % (30 min) und 42,6 % (60 min) -- beide unter dem
Muenzwurf. Roh saehe es mit 51,5 % besser aus; die Entkopplung (1.793 -> 124
unabhaengige Faelle) ist der ganze Unterschied.
MECHANISMUS: zum vierten Mal derselbe Fehler dieser Karte -- aus einer Aussage
ueber die STRUKTUR ("haelt dieses Level?") wird eine RICHTUNGSprognose. Das ist
Mean Reversion am Extrem, und P(break) taugt gemessen zum EXIT, nicht zum ENTRY.
URTEIL: nicht bauen. Auch kein Umschwenken auf C oder D -- die sind nur weniger
schlecht, ebenfalls negativ. Nichts am Live-System geaendert.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
77ed1d5572 |
S/R-Beschriftung: Chart und M15-Karte nannten verschiedene Zahlen (v1.35, v=169)
User: "die Beschriftung fuer S/R im Chart stimmt nicht mit der Analyse in der M15-Karte ueberein." Die LEVEL stimmten -- nur die Zahl daneben nicht. Live gegengeprueft: die CSV enthielt R;82.069;69, Gate 3 der Karte meldete res 82.069 / p_break 69. Beide kommen aus _draw_levels(), sind also per Konstruktion identisch; auch die Distanzen sind exakt (0,477~0,48 / 0,909~0,91 / 0,455~0,45). DER DEFEKT: das Chart schrieb die NACKTE Zahl = P(Bruch), die Karte klappte unter 45 % still auf P(Abprall) um und nennt 45-55 % "unentschieden". P(Bruch) 33 % -> Chart "33%" Karte "67 % Abprall" P(Bruch) 46 % -> Chart "46%" Karte "unentschieden" P(Bruch) 72 % -> Chart "72%" Karte "72 % Bruch" Beide Zahlen richtig, aber die Chart-Zahl sagte nicht, WAS sie ist. GEMESSEN in 88,1 % der Zeit verschieden (1.797 Vorhersagen / 14 Tage: 66,3 % unter 45 %, 21,9 % im unentschiedenen Band). Behoben im Indikator v1.35, wortgleich zu app.js. Ueber 1.678 echte P(break)-Werte gegengeprueft: Uebereinstimmung 0 % -> 100 %. Ins RICHTIGE Terminal kompiliert (es gibt real zwei Ordner, nur D0E8209F... bekommt die sr_levels.csv): 0 errors, 0 warnings, .ex5 frisch, Version im Terminal gegengeprueft. Zwei Verdachtsmomente ausgeschlossen statt vermutet: eine stehengebliebene Alt-Linie (der Indikator ruft ObjectsDeleteAll bei jedem Redraw) und ein falsch einsortiertes Level (_draw_levels waehlt seit 23.07. nach Lage zum Kurs). ZWEITER Befund derselben Klasse, ebenfalls behoben: Gate 3 und 3b nannten Level aus VERSCHIEDENEN Zeitebenen, beide nur als "xATR" -- 3 M30-Pivots, ATR_M15, im Chart gezeichnet 3b M5-Pivots, ATR_M5, NICHT gezeichnet Real standen "0,48xATR" und "0,45xATR" nebeneinander, die nicht vergleichbar sind, und die Karte nannte einen "Support 81,78", den man im Chart vergeblich sucht (alle 10 M30-Pivots lagen ueber dem Kurs). Die Quellen-Trennung BLEIBT -- entry_room_atr=0,6 ist ueber 80k Bars auf M5 kalibriert. Geaendert wurde nur die Beschriftung plus Tooltips. Reine Anzeige: an Gates, Gewichten und Order-Logik nichts geaendert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
95521d041c |
Schrift eine Stufe kleiner: -2px an der fluiden Wurzel (v=168)
User: "verkleinere alle Schriftarten um 1em".
Woertlich waere 1em = 100 % der Schriftgroesse, also null. Gemeint ist eine
Stufe -- genommen wurden -2px, exakt der Schritt, in dem die Groesse am 24.07.
zweimal HOCHgesetzt wurde. Das Handy landet damit auf dem Zwischenstand von
damals (~16px statt ~18px).
html { font-size: clamp(15px, 14px + 0.5vw, 22px); } (war 17/16/24)
Fenster v=167 v=168
390px 17,95px 15,95px
768px 19,84px 17,84px
1440px 23,20px 21,20px
ab 1600 24,00px 22,00px
Das war eine EINZIGE Zeile. Die 96 rem-Werte bleiben unberuehrt, alle
Groessenverhaeltnisse untereinander auch -- genau dafuer wurde heute frueh
umgestellt. Der Bump am 24.07. musste noch 96 Einzelwerte anfassen und
uebersah dabei drei Shorthands.
Ausgeliefert verifiziert: Wurzel = clamp(15px, 14px + 0.5vw, 22px),
93 rem-Werte, 0 px-Schriftgroessen, HTML zieht v=168, Klammern ausgeglichen.
Zurueck auf die 18er-Basis: clamp(17px, 16px + 0.5vw, 24px) -- eine Stufe
entspricht 2px in Minimum und Steigungs-Basis, der Deckel wandert mit.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
01916134be |
Schrift skaliert mit dem Fenster: 96 px-Werte -> rem + fluide Wurzel (v=167)
User-Wunsch: "Schriftarten im Dashboard auf em einstellen, damit auf jedem
Geraet oder je nach Fenstergroesse die Schriftgroesse automatisch angepasst
wird."
Umgesetzt mit rem + fluider Wurzel, NICHT mit em. Der Wunsch war richtig,
die genannte Einheit nicht: `em` ist relativ zum ELTERNelement und reagiert
auf die Fenstergroesse gar nicht -- verschachtelt multipliziert es sich sogar
(h2 mit 1,2em in einer Karte mit 1,1em landet bei 1,32x).
html { font-size: clamp(17px, 16px + 0.5vw, 24px); }
390px Handy -> 17,95px (bisher 18,00 -- bewusst kein Rueckschritt)
768px -> 19,84px
1440px -> 23,20px
ab 1600px -> 24,00px (Deckel)
Der Anker ist so gesetzt, dass am Handy NICHTS kleiner wird -- der User hat
die Groesse am 24.07. zweimal von Hand hochgesetzt; eine Responsive-Umstellung,
die sie wieder eindampft, waere eine stille Ruecknahme seiner Entscheidung.
Verifiziert statt behauptet:
- alle 96 Deklarationen gegen die 18px-Referenz zurueckgerechnet,
groesster Fehler 0,0008 px
- 93 font-size + 3 font:<weight> Npx/...-Shorthand (.ms-chip/.ms-bos-lbl/
.sqm-badge -- die waren beim Bump am 24.07. zuerst uebersehen worden)
- ausgeliefert: 0 px-Schriftgroessen, fluide Wurzel da, HTML zieht v=167
Zwei Vorbedingungen geprueft, nicht angenommen:
- viewport-Meta ist gesetzt (sonst wuerde vw am Handy ~980px messen)
- beide Media-Queries stehen in px, verschieben sich also nicht mit der
Schrift (die klassische em-Falle bei Breakpoints)
Abstaende bleiben in px -- sie mitzuskalieren waere ein weit groesserer
Eingriff mit Layout-Risiko; die Anfrage betraf die Schrift.
Groesse global aendern = jetzt EINE Zeile statt 96 Einzelwerten.
Zurueck: web/style.css.bak-2026-08-13
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
||
|
|
5819a9df21 |
Netto-Rechnung aus den ECHTEN Steuer-Buchungen statt geschaetzt
Der seit 05.08. dokumentierte Defekt ist behoben. _add_net rechnete net_pnl = total_pnl - gross_win * 26,375 % und unterstellte, die Quellensteuer sei endgueltig verloren. Sie wird aber taeglich per "Tax settlement" erstattet - real zu 99 %. all: vorher net_pnl -2.449,95 EUR, jetzt +181,00 (total +209,93, echte Steuerlast +28,93). Verzerrung rund 2.630 EUR - sie machte aus einem profitablen Konto ein verlustreiches. Die Schaetzung der EINBEHALTENEN Summe war fast exakt; falsch war allein die Annahme, sie bleibe weg. trader.steuer_buchungen() liest die WHT-/Tax-Deals direkt (position_id == 0, sauber von Trade-Deals getrennt), unter mt5_lock, 5 min gecacht. Fail-safe: ohne MT5 Rueckfall auf die Schaetzung, das Feld wht_quelle sagt welche Zahl drinsteht. Kurze Zeitraeume bleiben verzerrt, in BEIDE Richtungen - die Erstattung kommt am Folgetag. Bei "today" ist wht sogar negativ, weil die Erstattung von gestern heute einging. Ehrlich benannt, nicht kaschiert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
d8839ef7c5 |
Tag P/L war falsch: Fehlbuchungen beim Schliessen behoben + repariert
User-Frage "ueberpruefe ob Tag P/L richtig berechnet wird". Die Formel (realisiert + offen) war bitgenau richtig - die Datenbasis nicht: Anzeige +14,26 EUR gegen -74,08 EUR realisiert beim Broker. Ursache, im Log im Sekundentakt (#49926460): 20:04:10 eroeffnet -> 20:04:10 "extern geschlossen" -> "kein OUT-Deal in 1 Deals" -> Fallback bucht 0,00 -> 20:11:42 der echte Close lief ins Leere. Drei Defekte: (1) positions_get sieht die frische Position einen Tick lang nicht, (2) _log_external_close buchte TROTZ "kein OUT-Deal" einen Close - dabei ist genau das der Beweis, dass sie noch offen ist, (3) log_trade_close fasste nur exit_time IS NULL an, die Fehlbuchung blockierte den echten Close dauerhaft. Bei #49852362 kostete das +5,87 statt -95,38 EUR und den falschen Tag. Behoben: (1) Abbruch statt Fallback bei "kein OUT-Deal"; (2) eine erkennbare Fehlbuchung (closed_by='unknown') darf von einem echten Close korrigiert werden - eng gefasst, gute Zeilen bleiben unberuehrt. 4 Tests inkl. Gegenprobe. Altlast: tools/repair_closes.py (Trockenlauf Standard, Backup automatisch). 18 Zeilen ueber 60 Tage korrigiert. Heute von +7,63 auf -72,67 (Restfehler 1,41). Gesamt-P&L von -282,78 auf +169,98. Zeitfalle zweimal getroffen: history_deals_get filtert nach Broker-Wallclock, und fromtimestamp(d.time, BROKER) rendert 3 h zu spaet. Aufgefallen nur, weil eine Deal-Zeit 23:11 lautete, das Log aber 20:11:42 sagte. Statistik-Modul separat geprueft: Arithmetik in allen drei Zeitraeumen bitgenau korrekt (Abweichung 0,00). Der Netto-Defekt vom 05.08. besteht weiter und ist groesser als damals: angezeigt -2.449,95 EUR, real verblieben -17,06 (99 % der Steuer werden erstattet). Nicht gebaut - die Loesung ist dokumentiert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
19ee379f20 |
rec_outcomes: zweiter Bug gefunden und behoben (timeframe_name)
Der Log verriet die wahre Ursache: 'WaveRecommender' object has no attribute 'timeframe_name'. rec["tf"] ist leer, also lief der Aufruf immer in diesen Fallback - AttributeError, im except auf DEBUG verschluckt. Der pb_feats-Fix vom 11.08. war damit RICHTIG: er kam an der ersten Sperre vorbei und legte diese zweite frei. Vorher wurde log_rec_outcome nie aufgerufen (atr immer 0), deshalb konnte der zweite Bug gar nicht auftreten. Richtig ist self._wave_tf_label (die Engine haelt das Label). Lehre: nach einem Fix nicht nur pruefen, ob die Tabelle jetzt schreibt, sondern das LOG lesen. Die Zeilen standen seit Stunden da - ich hatte nur auf INFO gefiltert und daraus geschlossen, es gaebe keine. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
bf7e382818 |
Auto-Signal-Entry (SIG) komplett entfernt inkl. Button (v=166)
User-Entscheidung. Der Pfad war seit 01.08. aus und auf BEIDEN Ausfuehrungs-Achsen gemessen negativ: Markt-Einstieg in allen 8 Feldern, ruhende Order mit Touch-Fill -0,392/-0,338 in allen 6 und damit sogar schlechter als Markt. Die +0,35/+0,32 aus backtest_auto_signal_v3.py galten in Variante B (Fill beim Close-Bruch) und waren Look-ahead - Aufschlag 0,77-0,85 R. Ursache strukturell: das Bestaetigungs-Level _pend WANDERT. Nebenbei entfaellt der offene Churn-Defekt (4x setzen/stornieren in 76 s bei identischem Level, gefunden 06.08., nie behoben). Entfernt: _check_auto_signal, set_auto_signal, der Signal-Zweig in _pending_ziel, /api/autosignal, Button + Handler, vier Snapshot-Felder, die auto_signal*/signal_pending_entry-Leser. Geblieben: AUTOSIG_*-Trades in der DB, die Backtests, wave_rec.breakout (speist block_reason) und _confirm_breakout selbst. Sicherung: .removed_backup/auto_signal_2026-08-12.py + Git. Das Risiko war nicht SIG, sondern der GETEILTE Pending-Manager (zwei getrennte Manager wuerden sich gegenseitig stornieren). Deshalb wurde das Squeeze-Verhalten VOR dem Eingriff in tests/test_pending_ziel.py festgenagelt - 7 Tests, vorher gruen, laufen unveraendert weiter. Zwei Folgefehler fing die Pruefkette sofort: ruff F821 ein verwaistes _t, py_compile ein dangling if. Zwei Tests wurden mitgezogen statt geloescht - test_signal_fill_long ist jetzt umgedreht (unbekannte Quelle darf NICHT als Squeeze durchgehen). Live verifiziert: alle vier Snapshot-Felder weg, Endpunkt tot, auto_squeeze/squeeze_pending unveraendert, 67 Tests gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |