回测结果与指标详解 (Backtest Results & Metrics)¶
本文档详细介绍了 AKQuant 回测结果 (metrics_df) 中各项绩效指标的含义、单位及计算方法,帮助用户深入理解策略表现。
指标总览¶
| 指标名称 (Name) | 含义 (Description) | 单位/类型 | 计算说明 |
|---|---|---|---|
start_time |
回测开始时间 | Datetime | 对应回测数据的第一个 Bar 的时间。 |
end_time |
回测结束时间 | Datetime | 对应回测数据的最后一个 Bar 的时间。 |
duration |
回测总时长 | Timedelta | end_time - start_time。 |
total_bars |
总 Bar 数量 | Int | 回测经历的 K 线总数。 |
trade_count |
交易笔数 | Int | 完成平仓的交易总数 (Round-trip)。 |
initial_market_value |
初始市值 | Float | 初始资金 (通常为 Cash)。 |
end_market_value |
结束市值 | Float | 回测结束时的总资产 (Cash + 持仓市值)。 |
total_pnl |
总盈亏 | Float | end_market_value - initial_market_value。 |
unrealized_pnl |
未实现盈亏 | Float | 结束时持仓的浮动盈亏。 |
total_return_pct |
总收益率 | % (百分比) | (结束市值 - 初始市值) / 初始市值 * 100。 |
annualized_return |
年化收益率 | Ratio (小数) | (1 + 总收益率)^(1/年数) - 1。注意这里是小数,如 0.2 表示 20%。 |
volatility |
年化波动率 | Ratio (小数) | 收益率标准差 * sqrt(252)。 |
total_profit |
总盈利 | Float | 所有盈利交易的盈利之和。 |
total_loss |
总亏损 | Float | 所有亏损交易的亏损之和。 |
total_commission |
总手续费 | Float | 交易产生的总佣金。 |
max_drawdown |
最大回撤比率 | Ratio (小数) | 历史最大回撤幅度(如 0.1 表示 10%)。 |
max_drawdown_value |
最大回撤金额 | Float | 历史最大回撤的绝对金额。 |
max_drawdown_pct |
最大回撤百分比 | % (百分比) | max_drawdown * 100。 |
win_rate |
胜率 | % (百分比) | 盈利次数 / 总交易次数 * 100。 |
loss_rate |
败率 | % (百分比) | 亏损次数 / 总交易次数 * 100。 |
winning_trades |
盈利次数 | Int | 盈利大于 0 的交易次数。 |
losing_trades |
亏损次数 | Int | 盈利小于 0 的交易次数。 |
avg_pnl |
平均盈亏 | Float | 每笔交易的平均净盈亏。 |
avg_return_pct |
平均收益率 | % (百分比) | 每笔交易收益率的平均值。 |
avg_trade_bars |
平均持仓 K 线数 | Float | 平均每笔交易持有的 Bar 数量。 |
avg_profit |
平均盈利 | Float | 盈利交易的平均金额。 |
avg_profit_pct |
平均盈利比例 | % (百分比) | 盈利交易的平均收益率。 |
avg_winning_trade_bars |
平均盈利持仓时长 | Float | 盈利交易的平均持仓 Bar 数。 |
avg_loss |
平均亏损 | Float | 亏损交易的平均金额。 |
avg_loss_pct |
平均亏损比例 | % (百分比) | 亏损交易的平均收益率。 |
avg_losing_trade_bars |
平均亏损持仓时长 | Float | 亏损交易的平均持仓 Bar 数。 |
largest_win |
最大单笔盈利 | Float | 单笔交易的最大盈利金额。 |
largest_win_pct |
最大单笔盈利比例 | % (百分比) | 单笔交易的最大收益率。 |
largest_win_bars |
最大盈利持仓时长 | Float | 产生最大盈利那笔交易的持仓 Bar 数。 |
largest_loss |
最大单笔亏损 | Float | 单笔交易的最大亏损金额。 |
largest_loss_pct |
最大单笔亏损比例 | % (百分比) | 单笔交易的最大亏损率。 |
largest_loss_bars |
最大亏损持仓时长 | Float | 产生最大亏损那笔交易的持仓 Bar 数。 |
max_wins |
最大连续盈利次数 | Int | 连续盈利的最多次数。 |
max_losses |
最大连续亏损次数 | Int | 连续亏损的最多次数。 |
sharpe_ratio |
夏普比率 | Ratio | (年化收益率 - 无风险利率) / 年化波动率。无风险利率默认 0。 |
sortino_ratio |
索提诺比率 | Ratio | (年化收益率 - 无风险利率) / 下行波动率。只考虑下行风险。 |
profit_factor |
盈亏比 | Ratio | 总盈利 / abs(总亏损)。 |
ulcer_index |
溃疡指数 | Ratio | 衡量回撤深度和持续时间的指标。 |
upi |
溃疡绩效指数 | Ratio | (年化收益率 - 无风险利率) / 溃疡指数。 |
equity_r2 |
权益曲线 R² | Ratio | 权益曲线相对于时间的线性回归拟合度 (0-1),越接近 1 表示收益越稳定。 |
std_error |
标准误差 | Float | 权益曲线回归的标准误差。 |
calmar_ratio |
卡尔玛比率 | Ratio | 年化收益率 / 最大回撤比率。 |
exposure_time_pct |
市场暴露时间百分比 | % (百分比) | 持有仓位(非空仓)的时间占比。 |
var_95 |
95% 风险价值 | Ratio (小数) | 95% 置信度下的每日最大亏损比例。 |
var_99 |
99% 风险价值 | Ratio (小数) | 99% 置信度下的每日最大亏损比例。 |
cvar_95 |
95% 条件风险价值 | Ratio (小数) | 超过 95% VaR 阈值后的平均亏损比例(预期亏损)。 |
cvar_99 |
99% 条件风险价值 | Ratio (小数) | 超过 99% VaR 阈值后的平均亏损比例(预期亏损)。 |
sqn |
系统质量指数 (SQN) | Float | (平均盈亏 / 盈亏标准差) * sqrt(交易次数)。 |
kelly_criterion |
凯利公式比例 | Ratio (小数) | 胜率 - (败率 / 盈亏比)。 |
重点指标解释¶
风险类¶
- 最大回撤 (Max Drawdown): 衡量策略在最坏情况下的表现。例如 30% 的最大回撤意味着如果你在最高点买入,最多可能会亏损 30%。通常认为最大回撤越小越好。
- 波动率 (Volatility): 衡量收益的不确定性。波动率越高,收益起伏越大。
- 风险价值 (VaR) 与 条件风险价值 (CVaR):
- VaR (Value at Risk): 在特定置信度下(如95%),策略在一天内可能发生的最大损失。
- CVaR (Conditional VaR): 又称 Expected Shortfall,衡量当损失超过 VaR 时的平均损失。它比 VaR 更能反映极端尾部风险。
- 市场暴露时间 (Exposure Time): 策略持有头寸(非空仓)的时间占比。低暴露时间意味着资金大部分时间是安全的(现金),但也可能错失机会。
收益风险比类¶
- 夏普比率 (Sharpe Ratio): 投资界的"性价比"指标。它衡量的是每承担一单位总风险,产生了多少超额收益。通常大于 1 是可接受的,大于 2 是非常优秀的。
- 索提诺比率 (Sortino Ratio): 类似于夏普比率,但只考虑"有害的波动"(下行波动)。如果一个策略经常暴涨(上行波动大),夏普比率可能会低估它,而索提诺比率则更公允。
- 卡尔玛比率 (Calmar Ratio): 年化收益率与最大回撤之比。衡量"收益回撤比",是很多基金经理非常看重的指标。
- 系统质量指数 (SQN): 衡量交易系统的稳定性。SQN 越高,越容易通过加大仓位来获利。一般认为 >2.0 为合格,>3.0 为优秀,>7.0 为圣杯。
- 凯利公式 (Kelly Criterion): 基于胜率和盈亏比计算的理论最佳仓位比例。注意凯利公式通常过于激进,实盘中常使用 "半凯利" (Half-Kelly) 甚至更低比例。
交易明细 (Trades)¶
result.trades_df 包含了每笔平仓交易的详细信息。
| 指标名称 (Name) | 含义 (Description) | 单位/类型 | 计算说明 |
|---|---|---|---|
symbol |
标的代码 | String | 交易标的。 |
entry_time |
开仓时间 | Datetime | 开仓成交时间。 |
exit_time |
平仓时间 | Datetime | 平仓成交时间。 |
entry_price |
开仓均价 | Float | 开仓成交均价。 |
exit_price |
平仓均价 | Float | 平仓成交均价。 |
quantity |
交易数量 | Float | 成交数量。 |
side |
交易方向 | String | long (做多) 或 short (做空)。 |
pnl |
毛盈亏 | Float | 不包含手续费的盈亏。 |
net_pnl |
净盈亏 | Float | pnl - commission。 |
return_pct |
收益率 | Float | 交易收益率 (小数)。 |
commission |
手续费 | Float | 交易产生的佣金。 |
duration_bars |
持仓 K 线数 | Int | 持仓期间经历的 Bar 数量。 |
duration |
持仓时长 | Timedelta | exit_time - entry_time。 |
订单记录 (Orders)¶
result.orders_df 包含了所有历史订单记录(包括已成交、取消、拒绝等)。
| 指标名称 (Name) | 含义 (Description) | 单位/类型 | 计算说明 |
|---|---|---|---|
id |
订单 ID | String | 唯一标识符。 |
symbol |
标的代码 | String | 交易标的。 |
side |
订单方向 | String | buy (买入) 或 sell (卖出)。 |
order_type |
订单类型 | String | market (市价), limit (限价), stop (止损)。 |
quantity |
订单数量 | Float | 下单数量。 |
filled_quantity |
成交数量 | Float | 实际成交数量。 |
limit_price |
限价 | Float | 限价单的价格 (Market 单为 NaN)。 |
stop_price |
触发价 | Float | 止损单的触发价格。 |
avg_price |
成交均价 | Float | 实际成交的平均价格。 |
commission |
手续费 | Float | 订单产生的手续费。 |
status |
订单状态 | String | filled, cancelled, rejected 等。 |
time_in_force |
有效期 | String | gtc, day, ioc 等。 |
created_at |
创建时间 | Datetime | 订单创建时间。 |
持仓记录 (Positions)¶
result.positions_df 包含了每日(或每 Bar)持仓快照。
| 指标名称 (Name) | 含义 (Description) | 单位/类型 | 计算说明 |
|---|---|---|---|
date |
日期 | Datetime | 持仓快照时间。 |
symbol |
标的代码 | String | 交易标的。 |
long_shares |
多头持仓 | Float | 多头方向的持仓数量。 |
short_shares |
空头持仓 | Float | 空头方向的持仓数量。 |
close |
收盘价 | Float | 当时的收盘价。 |
equity |
账户权益 | Float | 包含持仓盈亏的账户总权益。 |
market_value |
持仓市值 | Float | 当前持仓的市场价值。 |
margin |
占用保证金 | Float | 当前持仓占用的保证金。 |
unrealized_pnl |
未实现盈亏 | Float | 持仓浮动盈亏。 |