Depends #116
Data loader can keep full OHLCV in SQLite. Composable engine needs (timestamp, price)[] at runtime.
Scope:
- Add load_price_series(instrument, timeframe, from_dt, to_dt) -> list[PriceBar] (or return (timestamps[], prices[]))
- Reuse existing DB query + cache; extract close + normalized timestamp
- Wire into main.py path used before ExecutionEngine.run() / GridOptimizer (Muratich integrates call site)
Definition of Done:
- Single function callable from main.py without duplicating SQL in strategy module
- Unit test: DB fixture → correct price series length and values
- prepare_candles() / validator still run on full candles before storage
- README updated in src/data_loader/
Depends #116
Data loader can keep full OHLCV in SQLite. Composable engine needs (timestamp, price)[] at runtime.
Scope:
Definition of Done: