mirror of
https://ghfast.top/https://github.com/aeroxw/easy-tdx.git
synced 2026-09-12 19:14:16 +08:00
release: v1.17.13 — 修复多策略组合回测最大回撤虚高(分母误用初始值而非峰值)
用户反馈:3 个策略各自最大回撤仅 45.53%/40.16%/16.89%,组合却显示 83.76%。 根因:_build_combined_equity 的 drawdown_pct 分母误用 initial(固定初始资金), 净值大涨后(总收益 545%,峰值≈6.45×初始)绝对回撤额除以小初始值被等比放大。 改为 drawdown / peak(相对当时峰值,0~1),与单标的 PortfolioTracker 一致。 连带修复卡玛比率(年化/最大回撤)。其余指标经核对均正确。加回归守卫。
This commit is contained in:
@@ -228,12 +228,16 @@ class MultiStrategyEngine:
|
||||
aligned = aligned.ffill().fillna(0)
|
||||
total = aligned.sum(axis=1)
|
||||
|
||||
# 回撤:用正值约定(peak - total),与单标的 PortfolioTracker.equity_curve
|
||||
# 及 PerformanceAnalyzer 一致;EquityChart 也按正值展示(前端取负向下画)。
|
||||
# 回撤:drawdown 为绝对回撤额(峰值-当前,正值),drawdown_pct 为相对当时
|
||||
# 峰值的回撤比例(drawdown / peak,0~1)。分母必须用逐点 peak 而非固定初始值:
|
||||
# 净值大涨后 peak 是初始值的好几倍,若除以 initial 会把回撤百分比严重放大
|
||||
# (如峰值 6.45x 初始时,45% 的真实回撤会被算成 293%)。与单标的
|
||||
# PortfolioTracker.equity_curve 的 drawdown/drawdown_pct 定义保持一致,
|
||||
# PerformanceAnalyzer 直接读 drawdown_pct 列算 max_drawdown。
|
||||
peak = total.cummax()
|
||||
drawdown = peak - total
|
||||
initial = peak.iloc[0] if len(peak) > 0 and peak.iloc[0] != 0 else 1.0
|
||||
drawdown_pct = drawdown / initial
|
||||
peak_safe = peak.where(peak != 0, 1.0)
|
||||
drawdown_pct = drawdown / peak_safe
|
||||
|
||||
return pd.DataFrame(
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user