fix(backtest): benchmark全链路透传(API→runner→engine) + metrics分支用_dcfg修cfg=None导致relative_metrics空

This commit is contained in:
2026-07-11 14:27:19 +08:00
parent 5e5a6cf84a
commit f7c2e2eea3
3 changed files with 17 additions and 11 deletions
+6 -5
View File
@@ -30,7 +30,7 @@ class Orchestrator:
await self._on_stage(task_id, stage)
async def submit_cta(self, strategy_class, symbol: str, params: dict,
start: str, end: str, cfg) -> str:
start: str, end: str, cfg, benchmark: str = "hs300") -> str:
"""Submit a CTA backtesting task asynchronously"""
task_id = f"cta_{symbol}_{id(params)}"
self.pool.submit(task_id, "cta")
@@ -40,14 +40,15 @@ class Orchestrator:
params=params,
start=start,
end=end,
cfg=cfg
cfg=cfg,
benchmark=benchmark
)
await self._notify_stage(task_id, "排队中")
spec = self._pending[task_id]
fut: Future = self.pool.submit_work(
task_id, _cta_worker, spec["strategy_class"], spec["symbol"],
spec["params"], spec["start"], spec["end"], spec["cfg"], self.db_path
spec["params"], spec["start"], spec["end"], spec["cfg"], spec["benchmark"], self.db_path
)
task = self.pool.get_task(task_id)
@@ -164,10 +165,10 @@ class Orchestrator:
# Module-level worker functions (must be top-level for ProcessPoolExecutor pickle)
def _cta_worker(strategy_class, symbol: str, params: dict, start: str, end: str, cfg, db_path: str) -> any:
def _cta_worker(strategy_class, symbol: str, params: dict, start: str, end: str, cfg, benchmark: str, db_path: str) -> any:
"""Worker for CTA backtest (lazy import, spawn-friendly)"""
from sanguo_backtest.cta_engine import run_cta_backtest
return run_cta_backtest(strategy_class, symbol, params, start, end, cfg, db_path)
return run_cta_backtest(strategy_class, symbol, params, start, end, cfg, db_path, benchmark=benchmark)
def _opt_worker(strategy_class, symbol: str, grid: dict, start: str, end: str, cfg, db_path: str) -> any: