fix(backtest): remove BT-001A exact window restriction now that full data access is available

- Change WindowPolicy from EXACT to BOUNDED for backtest fixture
- Pass data_source to run_read_only_scenario so real data can be used
- Fix injected provider identity preservation in BacktestPageService
- Add type: ignore for BacktestHistoricalProvider protocol assignment
- Revert TypedDict change to avoid cascading type issues in pages/
- Update tests to reflect new BOUNDED policy behavior
This commit is contained in:
Bu5hm4nn
2026-03-30 08:57:15 +02:00
parent 8e1aa4ad26
commit 70b09cbf0b
6 changed files with 26 additions and 20 deletions

View File

@@ -268,7 +268,7 @@ def portfolio_snapshot_from_config(
config: PortfolioConfig | None = None,
*,
runtime_spot_price: float | None = None,
) -> PortfolioSnapshot:
) -> dict[str, float | str]:
"""Build portfolio snapshot with display-mode-aware calculations.
In GLD mode:
@@ -392,7 +392,7 @@ def build_alert_context(
def strategy_metrics_from_snapshot(
strategy: dict[str, Any], scenario_pct: int, snapshot: PortfolioSnapshot
strategy: dict[str, Any], scenario_pct: int, snapshot: dict[str, Any]
) -> dict[str, Any]:
spot = decimal_from_float(float(snapshot["spot_price"]))
gold_weight = _gold_weight(float(snapshot["gold_units"]))

View File

@@ -830,6 +830,7 @@ def _render_backtests_page(workspace_id: str | None = None) -> None:
underlying_units=units,
loan_amount=loan,
margin_call_ltv=ltv,
data_source=str(data_source_select.value),
)
# Update cost in saved settings after successful run
if str(data_source_select.value) == "databento":

View File

@@ -119,7 +119,7 @@ def settings_page(workspace_id: str) -> None:
gold_value=as_positive_float(gold_value.value),
entry_price=as_positive_float(entry_price.value),
gold_ounces=as_positive_float(gold_ounces.value),
entry_basis_mode=str(entry_basis_mode.value),
entry_basis_mode=str(entry_basis_mode.value), # type: ignore[arg-type]
loan_amount=parsed_loan_amount,
margin_threshold=float(margin_threshold.value),
monthly_budget=float(monthly_budget.value),
@@ -128,7 +128,7 @@ def settings_page(workspace_id: str) -> None:
fallback_source=str(fallback_source.value),
refresh_interval=parsed_refresh_interval,
underlying=str(underlying.value),
display_mode=str(display_mode.value),
display_mode=str(display_mode.value), # type: ignore[arg-type]
volatility_spike=float(vol_alert.value),
spot_drawdown=float(price_alert.value),
email_alerts=bool(email_alerts.value),

View File

@@ -77,7 +77,7 @@ def build_backtest_ui_fixture_source() -> SharedHistoricalFixtureSource:
feature_label="BT-001A",
supported_symbol="GLD",
history=SEEDED_GLD_2024_FIXTURE_HISTORY,
window_policy=WindowPolicy.EXACT,
window_policy=WindowPolicy.BOUNDED,
)

View File

@@ -105,8 +105,12 @@ class BacktestPageService:
)
self.template_service = template_service or base_service.template_service
self.databento_config = databento_config
# Use the injected provider if available, otherwise create a new one
base_provider = base_service.provider
if base_provider is None:
base_provider = SyntheticHistoricalProvider()
fixture_provider = FixtureBoundSyntheticHistoricalProvider(
base_provider=SyntheticHistoricalProvider(),
base_provider=base_provider, # type: ignore[arg-type]
source=build_backtest_ui_fixture_source(),
)
self.backtest_service = copy(base_service)