Backtesting Overview
The tick-by-tick simulation engine
Horizon’s backtest engine runs the same 7-layer pipeline as live trading, only the data source changes. You write a Strategy, pass it to hz.run(mode="backtest", ...) with a DataSource, and get back a BacktestResult with equity curve, trade log, Sharpe, Sortino, and max drawdown.
The promise
What runs every tick
Quick start
python
import horizon as hz
from horizon.asset_classes import AssetClass, Equity
from horizon.data import SyntheticGBM
from horizon.discovery import StaticUniverse
from horizon.discovery.base import Market
from horizon.portfolio import KellyOptimizer
from horizon.quant import TSMomentum
from horizon.risk import RiskProfile
result = hz.run(
mode="backtest",
strategies=[TSMomentum(lookback=20)],
asset_classes=[Equity],
universe=StaticUniverse([
Market(id=t, asset_class=AssetClass.Equity)
for t in ["AAPL", "MSFT", "NVDA"]
]),
portfolio=KellyOptimizer(kelly_fraction=0.25),
risk=RiskProfile.moderate(),
data_source=SyntheticGBM(["AAPL", "MSFT", "NVDA"], n_bars=252, seed=42),
backtest=hz.BacktestConfig(initial_cash_usd=100_000),
)
print(f"Sharpe: {result.sharpe:+.3f}")
print(f"Max DD: {result.max_drawdown:.2%}")
Deep-dive pages
BacktestConfig Every field. fill model, fee model, tick resolution, warmup, save options. Data sources SyntheticGBM, SyntheticRegimes, DictSource, custom sources. Running a backtest The `hz.run(mode='backtest')` argument reference. Reading results How to interpret Sharpe, drawdown, trade stats. Metrics math Exact formulas for Sharpe, Sortino, CAGR, max DD. Determinism Seeded RNG, bit-identical results, reproducibility.
Zero-dependency core
The backtest engine is pure stdlib Python (plus optional numpy for some paths). You can run the full 163-test suite and a realistic backtest without installing pandas, cvxpy, or any broker SDK.
Optional heavyweight features are gated behind install groups:
horizon[research]: jupyter, plotly, quantstats, empyricalhorizon[ml]: scikit-learn, lightgbmhorizon[opt]: cvxpy, pypfopt, riskfolio-lib