diff --git a/libs/backtest/artifacts.py b/libs/backtest/artifacts.py index 765258e..9b973eb 100644 --- a/libs/backtest/artifacts.py +++ b/libs/backtest/artifacts.py @@ -84,10 +84,14 @@ def write_trade_blotter( "event_id": t.event_id, "symbol": t.symbol, "event_date": t.event_date.isoformat() if t.event_date else None, + "event_type": t.event_type, + "score": t.score, "timing_class": t.timing_class, "engine_id": t.engine_id, "entry_timing_policy": t.entry_timing_policy, "shadow_only": t.shadow_only, + "parent_position_id": t.parent_position_id, + "is_add_on": t.is_add_on, "entry_date": t.entry_date.isoformat(), "exit_date": t.exit_date.isoformat(), "entry_price": t.entry_price, @@ -155,6 +159,8 @@ def write_position_timeline( "engine_id": t.engine_id, "entry_timing_policy": t.entry_timing_policy, "shadow_only": t.shadow_only, + "parent_position_id": t.parent_position_id, + "is_add_on": t.is_add_on, "entry_date": t.entry_date.isoformat(), "exit_date": t.exit_date.isoformat(), "entry_price": t.entry_price, @@ -179,6 +185,8 @@ def write_position_timeline( "engine_id": p.plan.engine_id, "entry_timing_policy": p.plan.entry_timing_policy, "shadow_only": p.plan.shadow_only, + "parent_position_id": p.parent_position_id, + "is_add_on": p.is_add_on, "entry_date": p.entry_date.isoformat(), "exit_date": None, "entry_price": p.entry_price, diff --git a/libs/backtest/domain.py b/libs/backtest/domain.py index eb3d0e9..77464a6 100644 --- a/libs/backtest/domain.py +++ b/libs/backtest/domain.py @@ -121,6 +121,8 @@ class FilledTrade(BaseModel): event_id: str symbol: str event_date: dt.date | None = None + event_type: str = "" + score: float = 0.0 timing_class: str = "unknown" engine_id: str = "default" entry_timing_policy: str = "next_open" @@ -337,6 +339,7 @@ class StrategyEngineConfig(BaseModel): engine_id: str event_types: list[str] = Field(default_factory=list) entry_conventions: list[str] | None = None + allowed_macro_regimes: list[str] | None = None event_directions: list[str] | None = None guidance_statuses: list[str] | None = None filing_time_buckets: list[str] | None = None diff --git a/libs/backtest/execution.py b/libs/backtest/execution.py index 14121c4..e18e2da 100644 --- a/libs/backtest/execution.py +++ b/libs/backtest/execution.py @@ -450,6 +450,8 @@ def _build_filled_trade_partial( event_id=position.plan.candidate.event_id, symbol=position.plan.candidate.symbol, event_date=position.plan.event_date or position.plan.candidate.event_date, + event_type=position.plan.candidate.event_type or "", + score=position.plan.candidate.score or 0.0, timing_class=position.plan.timing_class, engine_id=position.plan.engine_id, entry_timing_policy=position.plan.entry_timing_policy, @@ -511,6 +513,8 @@ def _build_filled_trade( event_id=position.plan.candidate.event_id, symbol=position.plan.candidate.symbol, event_date=position.plan.event_date or position.plan.candidate.event_date, + event_type=position.plan.candidate.event_type or "", + score=position.plan.candidate.score or 0.0, timing_class=position.plan.timing_class, engine_id=position.plan.engine_id, entry_timing_policy=position.plan.entry_timing_policy,