48 lines
1.9 KiB
Markdown
48 lines
1.9 KiB
Markdown
# Task: Wire Backtest Integration
|
|
|
|
## Current State
|
|
|
|
`src/backend/services/backtest_service.py` (16,798 bytes) exists with backtesting logic. `POST /api/v1/strategies/{id}/backtest` endpoint exists per README. However, the backtest engine is not connected to the data pipeline — it runs against whatever data happens to be in the DB, with no guarantee of freshness or completeness.
|
|
|
|
## Goal
|
|
|
|
Connect the backtest engine to the data pipeline so:
|
|
1. Backtests always run against a known-good, pipeline-fresh dataset
|
|
2. Backtest results are stored and queryable
|
|
3. Users can trigger backtests via the API and see results
|
|
|
|
## Requirements
|
|
|
|
1. Verify `backtest_service.py` reads from database correctly
|
|
2. Add backtest result storage model (SQLAlchemy)
|
|
3. Store backtest results: trades, metrics, equity curve
|
|
4. Add `GET /api/v1/backtests/{id}` endpoint to retrieve results
|
|
5. Add `GET /api/v1/backtests` endpoint to list past backtests
|
|
6. Ensure backtest runs after pipeline completes (dependency on pipeline task)
|
|
|
|
## Acceptance Criteria
|
|
|
|
- Backtest endpoint returns results with trades, metrics, equity curve
|
|
- Results persist in database and survive server restart
|
|
- Past backtests queryable via list endpoint
|
|
- Backtest uses data from the most recent pipeline run
|
|
- Frontend can display backtest results on strategy page
|
|
|
|
## Constraints
|
|
|
|
- Use TimescaleDB hypertables for equity curve time-series data
|
|
- Follow existing patterns — check `models/` for existing backtest model
|
|
- Keep under 200 lines per framework rule
|
|
- Read existing migrations before writing schema
|
|
|
|
## Files to Create/Modify
|
|
|
|
- `src/backend/models/` (check for existing backtest model, add if missing)
|
|
- `src/backend/services/backtest_service.py` (add result storage)
|
|
- `src/backend/routers/strategies.py` (add result endpoints)
|
|
- `src/backend/tasks/pipeline.py` (add backtest trigger option)
|
|
|
|
## Next Steps After This Task
|
|
|
|
Phase 2 complete. Move to Phase 5 (Sector Rotation) or Phase 7 (PWA).
|