From a3cefe364d9689881998b19c3d45e3d8b192a60b Mon Sep 17 00:00:00 2001 From: ao gong <41768719+ageorge156@users.noreply.github.com> Date: Fri, 21 Aug 2026 22:32:37 +0800 Subject: [PATCH] feat: add deterministic trade and signal identity --- src/quant_engine/artifact.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/quant_engine/artifact.py b/src/quant_engine/artifact.py index badc942..87ec3e2 100644 --- a/src/quant_engine/artifact.py +++ b/src/quant_engine/artifact.py @@ -273,6 +273,19 @@ def _build_trades(result: FactorBacktestResult, run_id: str) -> pd.DataFrame: trades = result.execution.trades_frame.copy(deep=True) trades.insert(0, "run_id", run_id) trades["trade_date"] = pd.to_datetime(trades["trade_date"]).dt.date + trades.insert( + 1, + "trade_id", + [f"{run_id}:{sequence:08d}" for sequence in range(1, len(trades) + 1)], + ) + signal_by_execution = { + pd.Timestamp(execution_date).date(): pd.Timestamp(signal_date).date() + for signal_date, execution_date in result.schedule.signal_to_execution.items() + } + trades["signal_id"] = [ + f"{run_id}:signal:{signal_by_execution[trade_date].isoformat()}" + for trade_date in trades["trade_date"] + ] trades["total_cost"] = trades["fee"] + trades["slippage"] return trades