Replace the 2024 model (model.py, ~2000 lines) with the btcmodel package, the baseline for future work: - Forecasts are quantiles of log price at each horizon, scored with CRPS in a walk-forward backtest (origins every 30 days from 2014, horizons 1 month to 4 years). Skill is relative to a zero-drift random walk, with circular block-bootstrap intervals and a count of independent windows. - Development data stops at 2024-11-26, the last day the 2024 model saw. Later outcomes are a holdout, scored only by `backtest --holdout`. - Models: random_walk, drift_rw, and cycle (the 2024 model's cycle-position drift, now kernel-smoothed and recency-weighted). On development data nothing beats the random walk with confidence; cycle loses at every horizon. - Prices: the Investing.com archive moves to data/ (cut at 2024-11-26; its last row was intraday) and is extended with Coinbase daily closes by `update`. Also: Nix flake dev shell (Python 3.13, pandas 3), ruff in place of black, pytest suite, and a rewritten README. NOTES.md is removed as inaccurate, and poetry is dropped.
35 lines
656 B
Makefile
35 lines
656 B
Makefile
# List recipes
|
|
default:
|
|
@just --list
|
|
|
|
# Fetch new daily prices from Coinbase
|
|
update:
|
|
python -m btcmodel update
|
|
|
|
# Score models on development data (outcomes up to the dev cutoff)
|
|
backtest *args:
|
|
python -m btcmodel {{ args }} backtest
|
|
|
|
# Score models on held-out outcomes; run sparingly, never while tuning
|
|
holdout *args:
|
|
python -m btcmodel {{ args }} backtest --holdout
|
|
|
|
# Forecast from the latest price
|
|
forecast *args:
|
|
python -m btcmodel {{ args }} forecast
|
|
|
|
test:
|
|
pytest -q
|
|
|
|
fmt:
|
|
ruff format .
|
|
ruff check --fix --select I .
|
|
nix fmt flake.nix
|
|
|
|
lint:
|
|
ruff check .
|
|
ruff format --check .
|
|
|
|
clean:
|
|
rm -rf output
|