fix(pre-alpha): preserve injected backtest services

This commit is contained in:
Bu5hm4nn
2026-03-26 12:18:39 +01:00
parent 18fd0681ca
commit d7117bb6a3
3 changed files with 62 additions and 5 deletions

View File

@@ -2,6 +2,7 @@ from __future__ import annotations
from dataclasses import dataclass
from datetime import date
from math import isclose
from app.domain.backtesting_math import materialize_backtest_portfolio_state
from app.models.backtest import (
@@ -10,7 +11,7 @@ from app.models.backtest import (
ProviderRef,
TemplateRef,
)
from app.services.backtesting.historical_provider import DailyClosePoint
from app.services.backtesting.historical_provider import DailyClosePoint, SyntheticHistoricalProvider
from app.services.backtesting.service import BacktestService
from app.services.strategy_templates import StrategyTemplateService
@@ -64,12 +65,19 @@ class BacktestPageService:
template_service: StrategyTemplateService | None = None,
) -> None:
self.template_service = template_service or StrategyTemplateService()
self.backtest_service = backtest_service or BacktestService(
base_service = backtest_service or BacktestService(
template_service=self.template_service,
provider=None,
)
provider = self.backtest_service.provider
provider.source = DeterministicBacktestFixtureSource()
fixture_provider = SyntheticHistoricalProvider(
source=DeterministicBacktestFixtureSource(),
implied_volatility=base_service.provider.implied_volatility,
risk_free_rate=base_service.provider.risk_free_rate,
)
self.backtest_service = BacktestService(
provider=fixture_provider,
template_service=self.template_service,
)
def template_options(self, symbol: str = "GLD") -> list[dict[str, str | int]]:
return [
@@ -122,7 +130,12 @@ class BacktestPageService:
self.template_service.get_template(template_slug)
derived_entry_spot = self.derive_entry_spot(normalized_symbol, start_date, end_date)
if entry_spot is not None and entry_spot != derived_entry_spot:
if entry_spot is not None and not isclose(
entry_spot,
derived_entry_spot,
rel_tol=BacktestService.ENTRY_SPOT_REL_TOLERANCE,
abs_tol=BacktestService.ENTRY_SPOT_ABS_TOLERANCE,
):
raise ValueError(
f"Supplied entry spot ${entry_spot:,.2f} does not match derived historical entry spot ${derived_entry_spot:,.2f}"
)