PR5: backtesting - replay the strategy over historical prices #5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/backtesting"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Fünfter PR.
krypto-dca backtestspielt die aktuelle Konfiguration gegen echte Vergangenheitskurse durch.Inhalt
backtest.py–run()ist eine reine Funktion über{symbol: [(ts, close)]}:[strategy]), DCA + Dip ([dip]-Regel auf die historischen Closes), Buy & Hold (Einmalkauf am Start, nach Gewichten)max_total_spendwird respektiert; Fee =paper.fee_rateBacktestErrorwenn es keine Überlappung gibtbacktestSubcommand –--from/--tooder--days N,--timeframe 1d|1w(Default1d),--refresh,--jsonohlcv_cache (symbol, timeframe, ts, close), Helferupsert_ohlcv/get_ohlcv/ohlcv_span;init_dblegt sie idempotent an, bestehende DBs bekommen sie beim nächsten Laufkraken_client.fetch_ohlcv_closes(); zweiter Lauf im selben Fenster nutzt den Cache (kleine Slack-Toleranz für Kerzen-Ausrichtung),--refresherzwingt Neuabruftrades/balance_snapshots/price_historyGrenze (dokumentiert)
Krakens OHLC-Endpoint gibt max. ~720 Kerzen zurück und kann nicht weiter zurück paginieren → praktisch ~2 Jahre bei
1d, weiter zurück nur mit--timeframe 1w. Der Befehl warnt, wenn das Fenster früher beginnt. Eine zweite Datenquelle für mehrjährige Tages-Backtests wäre ein späterer PR.Verifiziert
pytest→ 67 passed (12 neu): flacher/steigender Markt, Spend-Cap, Dip-Variante kauft den Dip und liegt danach vorn, max. 1 Dip/ISO-Woche, Overlap-Guard, gemeinsames Fenster,ohlcv_cache-Round-Trip, Report-Form;backtest-CLI Tabelle +--json+ Exit-Code--days 400(1d): 116 Wochenkäufe, in fallendem Markt DCA −5 % vs. Buy&Hold −34 %--from 2019-01-01 --timeframe 1w: 250 Wochenkäufe bis zummax_total_spend-Cap, im Bullrun Buy&Hold klar vorn--fetch-Zeile (Cache greift),--refreshholt neuBeispiel
Co-authored-by: Claude claude@anthropic.com