feat(execution): 回测调仓事件记录功能增强

新增调仓事件记录功能,详细记录每次调仓的信息:

核心改进:
1. BacktestExecutor新增_apply_trade_cost_with_events方法
   - 记录每次调仓的基本信息(持仓变化、调入调出标的)
   - 记录换手率、调仓成本、持仓天数、当日收益

2. 新增_enrich_rebalance_events方法
   - 补充净值信息(调仓前净值、调仓后净值、净值变化%)

3. strategy.py保存调仓记录到CSV
   - 新增rebalances.csv文件
   - 返回结果包含rebalance_events

调仓记录字段:
- 调仓前持仓、调仓后持仓
- 调入标的、调出标的
- 换手率、调仓成本
- 持仓天数、当日收益
- 调仓前净值、调仓后净值、净值变化%

应用场景:
- 分析每次调仓对收益的影响
- 评估调仓决策质量
- 统计调仓频率与效果
This commit is contained in:
2026-05-16 21:15:31 +08:00
parent 6308627f8c
commit 63c56f0001
2 changed files with 178 additions and 4 deletions

View File

@@ -451,17 +451,29 @@ class RotationStrategy(StrategyBase):
print("\n回测结果:")
print(f" 最终净值: {final_nav:.4f}\n 累计收益: {total_return:.2f}%")
# 获取调仓事件
rebalance_events = getattr(portfolio, 'rebalance_events', pd.DataFrame())
if not rebalance_events.empty:
print(f" 调仓次数: {len(rebalance_events)}")
# 保存报告
if save_path:
result[['策略净值']].to_csv(f"{save_path}_nav.csv")
signals.to_csv(f"{save_path}_signals.csv")
print(f" 报告保存: {save_path}_*.csv")
# 保存调仓事件记录
if not rebalance_events.empty:
rebalance_events.to_csv(f"{save_path}_rebalances.csv")
print(f" 报告保存: {save_path}_*.csv (含调仓记录)")
else:
print(f" 报告保存: {save_path}_*.csv")
return {
'signals': signals,
'result': result,
'portfolio': portfolio,
'total_return': total_return
'total_return': total_return,
'rebalance_events': rebalance_events
}
return {'signals': signals, 'result': None}