feat: add backtesting engine with 4 strategies (TDD)

Strategies:
- POST /backtest/sma-crossover - SMA crossover (short/long window)
- POST /backtest/rsi - RSI oversold/overbought signals
- POST /backtest/buy-and-hold - passive benchmark
- POST /backtest/momentum - multi-symbol momentum rotation

Returns: total_return, annualized_return, sharpe_ratio, max_drawdown,
win_rate, total_trades, equity_curve (last 20 points)

Implementation: pure pandas/numpy, no external backtesting libs.
Shared _compute_metrics helper across all strategies.
79 new tests (46 service unit + 33 route integration).
All 391 tests passing.
This commit is contained in:
Yaojia Wang
2026-03-19 22:35:00 +01:00
parent 42ba359c48
commit 5c7a0ee4c0
5 changed files with 1585 additions and 0 deletions

View File

@@ -38,6 +38,7 @@ from routes_shorts import router as shorts_router # noqa: E402
from routes_surveys import router as surveys_router # noqa: E402
from routes_technical import router as technical_router # noqa: E402
from routes_portfolio import router as portfolio_router # noqa: E402
from routes_backtest import router as backtest_router # noqa: E402
logging.basicConfig(
level=settings.log_level.upper(),
@@ -83,6 +84,7 @@ app.include_router(economy_router)
app.include_router(surveys_router)
app.include_router(regulators_router)
app.include_router(portfolio_router)
app.include_router(backtest_router)
@app.get("/health", response_model=dict[str, str])