回测指标
下面定义已完成回测任务在 result.metrics 中返回的各项指标。字段名与 JSON 响应完全一致。所有十进制数值均以带引号的字符串返回,以保留精度。
sharpe
每单位总波动率对应的年化收益,基于权益曲线的日收益率计算。
- 公式:
sharpe = mean(daily_returns) / stddev(daily_returns) * sqrt(252) - 单位: 比率,无量纲。
- 解读:
> 1较好,> 2优秀,> 3罕见。负值意味着策略在风险调整基础上跑输了现金。
sortino
与 Sharpe 类似,但分母只计入下行波动。惩罚亏损日,而忽略大幅盈利日。
- 公式:
sortino = mean(daily_returns) / stddev(negative_daily_returns) * sqrt(252) - 单位: 比率,无量纲。
- 解读: 同一策略的 Sortino 通常高于 Sharpe。
> 1.5较好,> 3优秀。
calmar
年化收益除以最大回撤的绝对值。衡量每单位收益所承受的痛苦程度。
- 公式:
calmar = cagr / abs(max_drawdown) - 单位: 比率,无量纲。
- 解读:
> 0.5可接受,> 1较好,> 3优秀。对单次深度回撤较为敏感。
max_drawdown
回测期间权益从峰值到谷底的最大跌幅,以相对峰值的比例表示。
- 公式:
max_drawdown = min((equity_t - max(equity_0..t)) / max(equity_0..t)) - 单位: 位于
[-1, 0]的比例。-0.142表示 14.2% 的回撤。 - 解读: 越接近 0 越好。
< -0.30(深于 30%)对实盘资金而言通常难以承受。
win_rate
已平仓成交中盈亏(PnL,扣费后)为正的占比。
- 公式:
win_rate = count(trades where pnl > 0) / total_trades - 单位: 位于
[0, 1]的比例。 - 解读: 取决于具体场景。趋势跟随策略通常胜率为
0.30–0.45也能盈利;均值回归网格往往超过0.65。需结合profit_factor与expected_value共同判断。
profit_factor
盈利成交的 PnL 之和,除以亏损成交 PnL 绝对值之和。
- 公式:
profit_factor = sum(pnl where pnl > 0) / abs(sum(pnl where pnl < 0)) - 单位: 比率,无量纲。
1.0表示盈亏平衡;大于 1 表示净盈利。 - 解读:
> 1.5健康,> 2较强,> 3罕见,需检查是否存在过拟合。
expected_value
每笔成交在计价货币(例如 USDT 计价的交易对即 USDT)下的平均盈亏,已扣除费用。
- 公式:
expected_value = sum(pnl) / total_trades - 单位: 每笔成交的计价货币金额。
- 解读: 在叠加真实滑点和费用之后,必须显著为正 策略才值得运行。与每笔典型费用对比,确认仍有充足空间。
cagr
模拟期间权益曲线的年化复合增长率。
- 公式:
cagr = (equity_end / equity_start)^(1 / years) - 1,其中years = duration_seconds / 31_557_600。 - 单位: 年化比例。
0.187表示每年 18.7%。 - 解读: 与相关基准(BTC 买入持有、标普 500、无风险利率)对比。高 CAGR 配合高
max_drawdown可能不如中等 CAGR 配合浅回撤——可参考calmar。
avg_trade_duration
所有已平仓成交的平均持仓时长。以 avg_trade_duration_seconds(整数秒)返回。
- 公式:
avg_trade_duration_seconds = mean(trade.exit_time - trade.entry_time) - 单位: 秒。
- 解读: 仅作诊断用途;可用于检查"波段"模板是否实际上在做剥头皮,或反之。与
total_trades搭配可估算对交易所的耗损。