feat(BT-002): add historical snapshot provider
This commit is contained in:
@@ -5,7 +5,7 @@ from math import isclose
|
||||
from app.backtesting.engine import SyntheticBacktestEngine
|
||||
from app.models.backtest import BacktestRunResult, BacktestScenario
|
||||
from app.models.strategy_template import StrategyTemplate
|
||||
from app.services.backtesting.historical_provider import SyntheticHistoricalProvider
|
||||
from app.services.backtesting.historical_provider import BacktestHistoricalProvider, SyntheticHistoricalProvider
|
||||
from app.services.strategy_templates import StrategyTemplateService
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ class BacktestService:
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
provider: SyntheticHistoricalProvider | None = None,
|
||||
provider: BacktestHistoricalProvider | None = None,
|
||||
template_service: StrategyTemplateService | None = None,
|
||||
) -> None:
|
||||
self.provider = provider or SyntheticHistoricalProvider()
|
||||
@@ -59,15 +59,15 @@ class BacktestService:
|
||||
|
||||
return BacktestRunResult(scenario_id=scenario.scenario_id, template_results=tuple(template_results))
|
||||
|
||||
@staticmethod
|
||||
def _validate_template_for_mvp(template: StrategyTemplate) -> None:
|
||||
def _validate_template_for_mvp(self, template: StrategyTemplate) -> None:
|
||||
provider_label = (
|
||||
"historical snapshot engine" if self.provider.pricing_mode == "snapshot_mid" else "synthetic MVP engine"
|
||||
)
|
||||
if template.contract_mode != "continuous_units":
|
||||
raise ValueError(f"Unsupported contract_mode for synthetic MVP engine: {template.contract_mode}")
|
||||
raise ValueError(f"Unsupported contract_mode for {provider_label}: {template.contract_mode}")
|
||||
if template.roll_policy.policy_type != "hold_to_expiry":
|
||||
raise ValueError("Unsupported roll_policy for synthetic MVP engine: " f"{template.roll_policy.policy_type}")
|
||||
raise ValueError(f"Unsupported roll_policy for {provider_label}: {template.roll_policy.policy_type}")
|
||||
if template.entry_policy.entry_timing != "scenario_start_close":
|
||||
raise ValueError(
|
||||
"Unsupported entry_timing for synthetic MVP engine: " f"{template.entry_policy.entry_timing}"
|
||||
)
|
||||
raise ValueError(f"Unsupported entry_timing for {provider_label}: {template.entry_policy.entry_timing}")
|
||||
if template.entry_policy.stagger_days is not None:
|
||||
raise ValueError("Unsupported entry_policy configuration for synthetic MVP engine")
|
||||
raise ValueError(f"Unsupported entry_policy configuration for {provider_label}")
|
||||
|
||||
Reference in New Issue
Block a user