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:
co-authored by
Claude Opus 5
parent
394786b312
commit
e69907edbe
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user