cutebacktests: Historical and Intraday Options Backtesting Runtime
Historical options backtesting, intraday options backtesting, quote-aware backtesting, and walk-forward strategy research for U.S. equities. cutebacktests is the public runtime behind CuteMarkets research: a DuckDB-backed options backtester, a historical options feed, market-data adapters, and an opening-range profile registry that you can run on your own machine.
This repository is designed for developers and quantitative researchers who need more than chart-level ideas. It focuses on causal entry logic, historical contract reconstruction, options microstructure filters, and reproducible evaluation surfaces instead of paper-only strategy descriptions.
Quick links:
Scope
- Historical and intraday options backtest runtime
- Historical options feed for contract reconstruction and close snapshots
- CuteMarkets-backed market-data access for public examples and default workflows
- Optional compatibility layers for auxiliary providers
- Opening-range profile registry and profile helpers
- Walk-forward and robustness helpers
Explore Examples
- examples/run_intraday_options_backtest.py
- examples/run_opening_range_profile.py
- examples/historical_options_feed_demo.py
- examples/walk_forward_profile_eval.py
In-Repo Documentation
This repository does not ship the congressional-disclosure engine, live/paper bots, remote server launch tooling, or phase orchestration from the private repo.
Install
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
Configure
cp .env.example .env
Required credentials depend on the commands you run:
CUTEMARKETS_API_KEY
Optional compatibility workflows may also use:
ALPACA_API_KEYALPACA_SECRET_KEY
Package-local paths use:
CUTEBACKTESTS_DATA_DIRCUTEBACKTESTS_DB_PATH
Example
from datetime import datetime
from cutebacktests import (
IntradayOptionsBacktestConfig,
IntradayOptionsBacktester,
get_opening_range_profile,
)
from cutebacktests.providers import CuteMarketsProvider
from cutebacktests.settings import Settings
from cutebacktests.storage import DataStore
settings = Settings.from_env(".env")
store = DataStore(settings.db_path)
profile = get_opening_range_profile("c4_long_only_rr15")
try:
backtester = IntradayOptionsBacktester(
store=store,
cutemarkets_provider=CuteMarketsProvider(settings),
)
result = backtester.run(
IntradayOptionsBacktestConfig(
ticker="SPY",
start=datetime(2025, 1, 1),
end=datetime(2025, 1, 31),
return_trade_log=True,
**profile.to_intraday_strategy_kwargs(),
)
)
print("trades:", result["trades"])
finally:
store.close()
If you need an auxiliary provider for a private workflow, the runtime still supports that path. The public examples and the default research path in this repo use CuteMarkets directly.
CLI
Show the public CLI:
python -m cutebacktests.cli --help
Run the intraday/options backtester directly:
python -m cutebacktests.cli run-intraday-options-backtest \
--ticker SPY \
--start 2025-01-01 \
--end 2025-12-31
The public CLI uses CuteMarkets by default. Add --with-alpaca only if you explicitly want the auxiliary provider enabled.
Run a named opening-range profile:
python -m cutebacktests.cli run-opening-range-profile-backtest \
--profile-name c4_long_only_rr15 \
--ticker SPY \
--start 2025-01-01 \
--end 2025-12-31
Tests
PYTHONPATH=src python -m pytest tests/test_public_surface.py -q
Documentation
- CuteMarkets Docs: cutemarkets.com/docs/
- Repository: github.com/cutemarkets/cutebacktests
- Python SDK: github.com/cutemarkets/cutemarkets-python
- Public model repo: github.com/cutemarkets/cute-intraday-option-strats
Metadata
Release files for cutebacktests 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cutebacktests-0.3.0.tar.gz | 284.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cutebacktests-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 581.3 kB
Release files / cutebacktests-0.3.0.tar.gz
| Download URL | cutebacktests-0.3.0.tar.gz |
|---|---|
| Size | 284.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a8364fe71f7a12a44f440bb4af18ae8f4d4a468e6054057504a6fa76ae25d4f7
|
|
BLAKE2b-256 checksum How to use checksums |
b215fc95111e8d68f903de2e5fb51074e334b206486f0a0ec343008f2de2b0c2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 2, 2026.
Transparency logRelease files / cutebacktests-0.3.0-py3-none-any.whl
| Download URL | cutebacktests-0.3.0-py3-none-any.whl |
|---|---|
| Size | 296.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8b9db957c5476e172a5306e240dbcaf8b9cfbfb10be971e51d8a9ae78e2b8369
|
|
BLAKE2b-256 checksum How to use checksums |
c39bd0b8da5c5617573d97bb543b3f0bdf850b504a472b2186491b733e5b2e4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 2, 2026.
Transparency log