跳到主要内容

回测指标

下面定义已完成回测任务在 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_factorexpected_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 搭配可估算对交易所的耗损。