Models are now a Composite of drift, volatility and (optional) shape components, so an experiment can swap one part against a fixed control. btcmodel/experiments.py holds seven experiments built from the ideas in the old branches (catalogued in docs/2024-ideas.md), each with its hypothesis and source, and a verdict rule fixed before anything ran. `just ab` runs them on development data. Results: - Shrinking the cycle drift, and a power-law trend (plain or reverting), beat their controls. The power law beats the random walk by 53-63% at 3-4 years with unbiased outcomes, so it is promoted to MODELS. - Every alternative volatility estimate (EWMA blends, other windows, reversion to a level or trend) is worse than the trailing 365-day window. Cycle-dependent volatility, heavy tails and stretched cycle phase show no reliable effect.
39 lines
763 B
Makefile
39 lines
763 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
|
|
|
|
# Run A/B experiments on development data (default: all)
|
|
ab *names:
|
|
python -m btcmodel ab {{ names }}
|