PR6: backtest --source binance for multi-year history #6

Merged
DasAoD merged 2 commits from feature/backtest-binance-source into main 2026-08-28 22:51:47 +02:00
Owner

Erweitert PR5. Krakens OHLC-Endpoint gibt nur ~720 Kerzen zurück (~2 Jahre bei 1d); für längere Tages-Backtests fehlte eine Datenquelle.

Inhalt

  • binance_ohlc.fetch_closes() – keyless Binance-Public-Klines
    • paginiert frei über startTime (1000 Zeilen/Call), stdlib-HTTP wie der Notifier
    • browser-ähnlicher User-Agent + 3× Retry mit Backoff: mit dem Default-Python-urllib-UA schließt Binances Edge die Verbindung (WinError 10054)
    • Symbol-Mapping trivial: BTC/EUR → BTCEUR
    • 1d und 1w unterstützt; Fehler-Payloads ({"code",...,"msg"}) → BinanceError
  • backtest --source kraken|binance (Default kraken)
    • binance reicht mehrere Jahre zurück für von Binance gelistete Paare (BTC/EUR, ETH/EUR ok)
    • die Kraken-Horizont-Warnung weist jetzt auf --source binance hin
    • --source binance fasst make_exchange / ccxt nicht an
  • Cache geteilt: beide Quellen füllen ohlcv_cache unter (symbol, timeframe, ts); EUR-Tages-Closes sind praktisch deckungsgleich, --refresh zieht mit der gewählten Quelle neu

Verifiziert

  • pytest → 73 passed (6 neu): Pagination ein-/mehrseitig, Fensterende-Cutoff, Binance-Fehler-Payload, Retry-dann-Fehler; backtest --source binance CLI-Smoke ohne ccxt
  • End-to-End gegen echtes Binance: --from 2021-01-01 --to 2026-08-01 --source binance → je 2039 Tageskerzen für BTC/EUR + ETH/EUR, über 5,5 Jahre: DCA +17 % / DCA+Dip +19 % / Buy&Hold +142 %, Drawdowns 55–74 %. Zweiter Lauf nutzt den Cache.

Sicherheit

  • kein API-Key, nur öffentliche Klines; stdlib-HTTPS, kein neuer Dependency
  • weiterhin read-only: kein Schreibzugriff auf trades / balance_snapshots / price_history

Co-authored-by: Claude claude@anthropic.com

Erweitert PR5. Krakens OHLC-Endpoint gibt nur ~720 Kerzen zurück (~2 Jahre bei `1d`); für längere Tages-Backtests fehlte eine Datenquelle. ## Inhalt - **`binance_ohlc.fetch_closes()`** &ndash; keyless Binance-Public-Klines - paginiert frei über `startTime` (1000 Zeilen/Call), stdlib-HTTP wie der Notifier - browser-ähnlicher `User-Agent` + 3× Retry mit Backoff: mit dem Default-`Python-urllib`-UA schließt Binances Edge die Verbindung (`WinError 10054`) - Symbol-Mapping trivial: `BTC/EUR` &rarr; `BTCEUR` - `1d` und `1w` unterstützt; Fehler-Payloads (`{"code",...,"msg"}`) &rarr; `BinanceError` - **`backtest --source kraken|binance`** (Default `kraken`) - `binance` reicht mehrere Jahre zurück für von Binance gelistete Paare (`BTC/EUR`, `ETH/EUR` ok) - die Kraken-Horizont-Warnung weist jetzt auf `--source binance` hin - `--source binance` fasst `make_exchange` / ccxt nicht an - **Cache geteilt:** beide Quellen füllen `ohlcv_cache` unter `(symbol, timeframe, ts)`; EUR-Tages-Closes sind praktisch deckungsgleich, `--refresh` zieht mit der gewählten Quelle neu ## Verifiziert - `pytest` &rarr; **73 passed** (6 neu): Pagination ein-/mehrseitig, Fensterende-Cutoff, Binance-Fehler-Payload, Retry-dann-Fehler; `backtest --source binance` CLI-Smoke ohne ccxt - End-to-End gegen echtes Binance: `--from 2021-01-01 --to 2026-08-01 --source binance` &rarr; je 2039 Tageskerzen für BTC/EUR + ETH/EUR, über 5,5 Jahre: DCA +17 % / DCA+Dip +19 % / Buy&Hold +142 %, Drawdowns 55&ndash;74 %. Zweiter Lauf nutzt den Cache. ## Sicherheit - kein API-Key, nur öffentliche Klines; stdlib-HTTPS, kein neuer Dependency - weiterhin read-only: kein Schreibzugriff auf `trades` / `balance_snapshots` / `price_history` Co-authored-by: Claude <claude@anthropic.com>
- binance_ohlc.fetch_closes(): keyless Binance public klines, paginated via
  startTime (1000 rows/call), stdlib HTTP; browser-ish User-Agent + 3x retry
  with backoff (a plain urllib UA gets connection-reset by Binance's edge)
- backtest gains --source kraken|binance (default kraken); binance reaches back
  years for listed pairs (BTC/EUR, ETH/EUR). Kraken's ~720-candle horizon
  warning now also suggests --source binance
- cache is shared: both sources fill ohlcv_cache under (symbol, timeframe, ts)

Co-authored-by: Claude <claude@anthropic.com>
- test_binance_ohlc.py: single/multi-page pagination, end-of-window cut-off,
  Binance error payload, retry-then-fail
- test_cli.py: `backtest --source binance` runs without touching make_exchange
- README + SETUP: --source table (kraken vs binance), PR6 marked done

Co-authored-by: Claude <claude@anthropic.com>
DasAoD merged commit f773cbaea4 into main 2026-08-28 22:51:47 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
DasAoD/krypto-dca-bot!6
No description provided.