Skip to content

feat: add backtester with parameter sweep and walk-forward validation#70

Open
HaoweiChan wants to merge 1 commit intoTraderAlice:masterfrom
HaoweiChan:feat/backtester
Open

feat: add backtester with parameter sweep and walk-forward validation#70
HaoweiChan wants to merge 1 commit intoTraderAlice:masterfrom
HaoweiChan:feat/backtester

Conversation

@HaoweiChan
Copy link

Summary

Adds a full-featured backtesting extension to OpenAlice with 6 MCP tools accessible by Alice (or any MCP client).

Phase 1 — Core Engine

  • Strategy DSL: safe recursive-descent parser for entry/exit logic — supports price variables, technical indicators (RSI, EMA, SMA, BBANDS, MACD, ATR with arbitrary periods), arithmetic, comparisons, boolean logic, and strategy parameter variables
  • Indicator Series: wraps existing analysis-kit indicators to compute full series over historical candle data
  • Historical Data: fetches OHLCV candles via OpenBB SDK (equity, crypto, currency) with auto asset-class detection, symbol normalization (BTC/USDBTCUSD), and on-disk candle caching
  • Simulation Engine: candle-by-candle execution with configurable slippage (bps), commissions, stop-loss/take-profit, leverage, and position tracking
  • Metrics: total return, Sharpe ratio, max drawdown, win rate, profit factor, equity curve
  • Persistence: trade logs (JSONL) and summary reports (JSON) saved to data/backtests/

Phase 2 — Advanced Features

  • Parameter Grid Search (runParameterSweep): cartesian product over user-defined parameter ranges, runs all combinations concurrently, ranks by Sharpe ratio, persists results
  • Walk-Forward Validation (runWalkForward): splits data into N rolling train/test windows, optimizes on training, validates on test, reports overfitting score
  • Volume Realism: flags trades where position size exceeds a configurable fraction of candle volume (warnings, not rejections)
  • CCXT Data Source: paginated fetchOHLCV via connected exchange (e.g. Binance), automatic fallback to OpenBB when CCXT unavailable
  • DSL Parameter Variables: strategy parameters are injected into the DSL context, enabling expressions like RSI_14 < rsi_oversold

MCP Tools Exposed

Tool Description
runBacktest Single strategy backtest with volume warnings
runParameterSweep Grid search over parameter ranges, ranked by Sharpe
runWalkForward Train/test validation to detect overfitting
fetchHistoricalOhlcv Raw candle data (OpenBB or CCXT)
listBacktests Browse saved backtest results
readBacktestSummary Read a specific saved backtest summary

Files Changed

  • New: src/extension/backtester/ (11 modules — adapter, data, dsl, engine, index, indicators, io, realism, sweep, types, validation)
  • Modified: src/main.ts (tool registration with lazy CCXT account getter), src/extension/trading/providers/ccxt/CcxtAccount.ts (added public fetchOHLCV method)
  • Specs: OpenSpec artifacts for both phases (proposals, designs, delta specs, task breakdowns, main specs)

Test plan

  • runBacktest — EMA crossover on BTC/USD daily, 20 trades, +1.12%, Sharpe 1.21
  • fetchHistoricalOhlcv (OpenBB) — 60 candles fetched
  • fetchHistoricalOhlcv (CCXT) — 60 candles fetched from Binance
  • listBacktests — lists 9 saved results
  • readBacktestSummary — reads saved JSON correctly
  • runParameterSweep — 12 combinations (4×3), ranked output, 108ms
  • runWalkForward — 3 windows, correctly flags overfitting (IS Sharpe 5-12 vs OOS negative)

Made with Cursor

@HaoweiChan HaoweiChan marked this pull request as draft March 17, 2026 15:39
Core engine:
- Strategy DSL: safe recursive-descent parser for entry/exit logic
- Indicator series over full candle history (RSI, EMA, SMA, BBANDS, MACD, ATR)
- Historical data via OpenBB SDK + CCXT with auto asset-class detection and caching
- Candle-by-candle simulation with slippage, commissions, stop-loss/take-profit
- Metrics: total return, Sharpe, max drawdown, win rate, profit factor, equity curve
- Persistence: trade logs (JSONL) and summaries (JSON) to data/backtests/

Advanced features:
- Parameter grid search: cartesian product, ranked by Sharpe
- Walk-forward validation: rolling train/test windows, overfitting detection
- Volume realism: flags trades exceeding candle volume fraction
- CCXT data source with fallback to OpenBB
- Strategy parameters as DSL variables (e.g. RSI_14 < rsi_oversold)

MCP tools: runBacktest, runParameterSweep, runWalkForward,
fetchHistoricalOhlcv, listBacktests, readBacktestSummary

Made-with: Cursor
@HaoweiChan HaoweiChan marked this pull request as ready for review March 17, 2026 15:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant