From 5cee0686e421b1f21484c23e413692616e9e2ffa Mon Sep 17 00:00:00 2001 From: TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> Date: Wed, 1 Apr 2026 18:25:29 +0900 Subject: feat(backtester): Phase 1 complete — realistic backtesting engine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Slippage modeling (configurable per-trade, buy higher/sell lower) - Trading fee deduction (maker/taker configurable) - Stop-loss and take-profit auto-execution per position - Short selling support (allow_short flag) - Walk-forward analysis engine (in-sample/out-of-sample, efficiency ratio) - Daily equity curve Sharpe/Sortino with risk-free rate adjustment - Recovery factor, consecutive win/loss streaks, fee-aware PnL - 312 tests passing --- services/backtester/tests/test_engine.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'services/backtester/tests/test_engine.py') diff --git a/services/backtester/tests/test_engine.py b/services/backtester/tests/test_engine.py index 003e951..743a43b 100644 --- a/services/backtester/tests/test_engine.py +++ b/services/backtester/tests/test_engine.py @@ -44,9 +44,7 @@ def test_backtest_engine_runs_strategy_over_candles(): strategy.on_candle.return_value = None candles = make_candles([50000.0, 51000.0, 52000.0]) - engine = BacktestEngine( - strategy, Decimal("10000"), slippage_pct=0.0, taker_fee_pct=0.0 - ) + engine = BacktestEngine(strategy, Decimal("10000"), slippage_pct=0.0, taker_fee_pct=0.0) result = engine.run(candles) assert strategy.on_candle.call_count == 3 @@ -64,9 +62,7 @@ def test_backtest_engine_executes_signals(): strategy.on_candle.side_effect = [buy_signal, None, sell_signal] candles = make_candles([50000.0, 52000.0, 55000.0]) - engine = BacktestEngine( - strategy, Decimal("10000"), slippage_pct=0.0, taker_fee_pct=0.0 - ) + engine = BacktestEngine(strategy, Decimal("10000"), slippage_pct=0.0, taker_fee_pct=0.0) result = engine.run(candles) assert result.total_trades == 2 -- cgit v1.2.3