pyflakes eingebunden — zwei echte Fehler in core/trader.py gefunden

Auf die Frage nach einem Lint-Modul: pyflakes installiert und als Stufe A2 in
tools/check_nfalle.py eingebunden. py_compile prueft nur die SYNTAX; ein
Tippfehler in einem NAMEN ist syntaktisch einwandfrei — und dieses Projekt hat
sehr viele breite except-Exception-Bloecke, in denen ein NameError unsichtbar
bleibt.

Beim ERSTEN Lauf zwei echte Fehler, beide in core/trader.py, beide nutzten
log. (den Namen gibt es dort nicht, nur log_trade/log_hist):

· _broker_offset_s(): der NameError lief in das except-pass UND nahm die
  darunter stehende Zuweisung self._boff = int(off) mit -> ein echter
  Broker-Zeitzonen-Wechsel waere nie uebernommen worden, dauerhaft und
  lautlos. Ausgerechnet der Zweig, der als Deployment-Drift Fall 4 gebaut
  wurde (falscher Offset -> Time-Stop-Alter negativ).

· modify_sltp(): steht NICHT in einem try -> der Fehler lief bis in
  /api/sltp. Der Broker hatte SL/TP bereits geaendert, der User bekam trotzdem
  eine Fehlermeldung, und set_sltp kam nie bis trail.deactivate() — das
  Trailing blieb an und haette die Handeingabe zurueckgezogen. Seit dem
  Initial-Commit drin.

Beide behoben (log_trade). Zusaetzlich die Annotation 'HistoryLogger | None'
ueber if TYPE_CHECKING sauber importiert (String-Annotation, kein
Laufzeit-Import, kein Zirkel). Projektweit jetzt 0 undefinierte Namen.

Schweregrad-Trennung ist Absicht: nur undefined name / syntax error werden
gemeldet, die ~105 kosmetischen Hinweise unterdrueckt. Auch
'redefinition of unused' bleibt draussen — es trifft das legitime Muster
hook = None + bedingtes def hook (in zwei Backtests geprueft, beide korrekt).
Eine Pruefung mit Dauer-Treffern wird ignoriert, und mit ihr die eine echte.

Backtest-Dateien nicht angefasst (Zahlen). Neustart verifiziert, Log sauber.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Axel Hocks
2026-08-07 00:18:24 +02:00
co-authored by Claude Opus 5
parent 394786b312
commit e69907edbe
3 changed files with 119 additions and 3 deletions
+33
View File
@@ -275,6 +275,39 @@ dort bereits nachvalidiert, ØR +0,305.) **Eine** Oberfläche:
als offenes Literal (gültiges JS mit einem Anführungszeichen darin — real in
`app.js`). Der Scan verfolgt jetzt zeichenweise den AKTIVEN Quote-Typ.
Erster vollständiger Lauf: **161 Python-Dateien, `app.js`, alle HTML/MD sauber.**
- **⚠⚠ LINTER: `pyflakes` (seit 2026-08-07 installiert, Stufe A2 in
`tools/check_nfalle.py`) — und er hat beim ERSTEN Lauf zwei echte Fehler
gefunden.** `py_compile` prüft **nur die Syntax**; ein Tippfehler in einem
**Namen** ist syntaktisch einwandfrei. Dieses Projekt ist dafür besonders
anfällig, weil es sehr viele breite `except Exception`-Blöcke hat (bewusst, als
Fail-safe) — ein `NameError` darin ist **unsichtbar**: keine Meldung, kein
Logeintrag, nur ein Zweig, der nichts tut. Genau das war am 04.08. schon einmal
fast passiert (`wave_snap`), gefunden damals nur durch Lesen.
**Die beiden Funde in `core/trader.py`** — beide nutzten `log.`, den Namen gibt
es dort NICHT (nur `log_trade`/`log_hist`):
· **`_broker_offset_s()`** (seit dem Fix vom 01.08. drin): der `NameError` lief in
das `except Exception: pass` **und nahm die darunter stehende Zuweisung
`self._boff = int(off)` mit** → ein echter **Broker-Zeitzonen-Wechsel wäre nie
übernommen worden**, dauerhaft und lautlos. Ausgerechnet der Zweig, der als
Deployment-Drift **Fall 4** gebaut wurde (falscher Offset → `open_time` in der
Zukunft, **Time-Stop-Alter negativ**).
· **`modify_sltp()`** (seit dem **Initial-Commit**): steht **nicht** in einem
`try` → der Fehler lief bis in `/api/sltp` durch. Folge: der Broker hatte SL/TP
**bereits geändert**, der User bekam trotzdem eine Fehlermeldung, und
`set_sltp` kam nie bis `trail.deactivate()`**das Trailing blieb an** und hätte
die Handeingabe beim nächsten Tick zurückgezogen, also genau das, was die
User-Vorgabe verhindern soll. Aufgefangen hat das nur die separate
Extern-Erkennung in `trailing._do_modify`, einen Tick später.
✅ Beide behoben (`log_trade`), dazu die Annotation `'HistoryLogger | None'` über
`if TYPE_CHECKING` sauber importiert. **Projektweit jetzt 0 undefinierte Namen.**
**Schweregrad-Trennung ist Absicht:** gemeldet werden nur `undefined name` /
`syntax error`; die ~105 kosmetischen Hinweise (ungenutzte Importe, f-Strings
ohne Platzhalter) werden unterdrückt. Auch `redefinition of unused` steht bewusst
NICHT in der Liste — es trifft das legitime Muster `hook = None` + bedingtes
`def hook` (geprüft in zwei Backtests, beide korrekt). **Eine Prüfung mit
Dauer-Treffern wird ignoriert, und mit ihr die eine echte Meldung.**
⚠ Backtest-Dateien wurden **nicht** angefasst — eine Änderung dort könnte ihre
dokumentierten Zahlen verschieben.
- **Konsole:** UTF-8 erzwingen (`PYTHONIOENCODING=utf-8`, `-X utf8`).
- **Uvicorn-Access-Log AUS** (`access_log=False` in `uvicorn.run`, 2026-07-22): seit
dem 4-s-REST-Polling + WS-Push flutete `GET /api/snapshot … 200 OK` die Konsole.