diff --git a/sanguo_backtest/cta_engine.py b/sanguo_backtest/cta_engine.py index c3cf247..a0ff66e 100644 --- a/sanguo_backtest/cta_engine.py +++ b/sanguo_backtest/cta_engine.py @@ -3,6 +3,10 @@ import sys import os import math import logging + +# ProcessPool spawn 子进程不继承主进程 logging 配置 → CTA 回测日志黑盒(看不到卡哪行)。 +# 模块级 basicConfig 让 cta_engine 日志 → stderr → docker logs(同 portfolio_worker)。 +logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(name)s: %(message)s") import traceback import uuid from datetime import datetime @@ -305,7 +309,9 @@ def run_cta_backtest( end_date = end_dt if isinstance(end_dt, datetime) else datetime.strptime(end, "%Y-%m-%d") try: + logging.info("[cta] read_index_daily 开始: %s %s~%s", benchmark_code, start_date.date(), end_date.date()) bench_df = read_index_daily(benchmark_code, start_date, end_date, bench_cfg) + logging.info("[cta] read_index_daily 完成: %d 行", 0 if bench_df is None else len(bench_df)) if bench_df is not None and not bench_df.empty and "close" in bench_df.columns: # Calculate benchmark daily returns bench_df["date"] = pd.to_datetime(bench_df["date"]) @@ -332,7 +338,9 @@ def run_cta_backtest( # 不再依赖 vnpy 的 log return 列(删原三路 fallback) # Compute relative metrics(benchmark 有无都执行;空时基准类指标 NaN→None) + logging.info("[cta] compute_metrics 开始: daily_df shape=%s benchmark=%d", daily_df.shape, len(benchmark_returns)) metrics_result = compute_metrics(daily_df, benchmark_returns) + logging.info("[cta] compute_metrics 完成") # Merge scalars into statistics (for API response) statistics.update(metrics_result.scalars)