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:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user