Skip to content

回测 - 指标与选股

回测完成后自动计算 11 项绩效指标。此外提供因子选股器,基于 Fama-MacBeth 回归权重进行股票筛选。

绩效指标

指标列名说明
累积收益率累积收益率整个回测期的累计收益
最大回撤最大回撤收益曲线从峰顶到谷底的最大跌幅
胜率胜率盈利交易日占总交易日的比例
夏普比率夏普比率年化超额收益 / 年化波动率
卡玛比率卡玛比率年化收益率 / 最大回撤绝对值
索提诺比率索提诺比率类似夏普,但只惩罚下行波动率
VaRVaR95% 置信度的 Value at Risk
CVaRCVaR95% 置信度的 Conditional VaR
盈亏比盈亏比平均盈利 / 平均亏损(绝对值比)
欧米伽比率欧米伽比率盈利概率加权和 / 亏损概率加权和

指标计算底层使用 quantstats 库。

查看结果

# 查看全部指标
print(backtest_perf)
# 筛选关注的指标
cols = ["symbol", "strategy", "累积收益率", "夏普比率", "最大回撤", "胜率"]
print(backtest_perf[cols])
# 按策略汇总
summary = backtest_perf.groupby("strategy")[[
"累积收益率", "夏普比率", "最大回撤", "胜率"
]].mean()
# 找出每只股票的最优策略
best = backtest_perf.loc[
backtest_perf.groupby("symbol")["夏普比率"].idxmax()
]

指标精度

# 默认 2 位小数
_, perf = backtest(strategies, stock_price)
# 4 位小数
_, perf = backtest(strategies, stock_price, metric_decimal=4)

FactorSelector 因子选股

FactorSelector 使用 Fama-MacBeth 回归得到的因子权重对股票打分,选出得分最高的 N 只股票。

原理

  1. 对每只股票计算其在各因子上的暴露度(Beta)
  2. 使用 Fama-MacBeth 第二步得到的因子风险溢价(lambda)作为权重
  3. 股票得分 = sum(beta_k * lambda_k)
  4. 选取得分最高的 top N 只股票

基本用法

from jh_quant.backtest import FactorSelector
from jh_quant.factors import FactorEngine, FactorType
from jh_quant.factors.validators import FamaMacBethValidator
# 1. 计算因子收益率
engine = FactorEngine()
ff3 = engine.calculate_factor_returns(
factor_type=FactorType.FF3,
period='M',
start_date='2020-01-01',
end_date='2024-12-31',
)
# 2. 计算暴露度
exposures = engine.calculate_stock_exposures(
stock_returns=stock_returns,
factor_returns=ff3,
)
# 3. Fama-MacBeth 得到因子权重
validator = FamaMacBethValidator()
fm_result = validator.validate(
stock_returns=stock_returns,
factor_returns=ff3,
exposures=exposures,
)
# 4. 创建选股器
selector = FactorSelector(
exposures=exposures,
fm_result=fm_result,
)
# 5. 选股
selected = selector.select(top_n=10)
# {"2023-01-31": ["000001", "600519", ...], "2023-02-28": [...]}

构造参数

参数类型说明
exposuresDataFrame个股因子暴露度
fm_resultFamaMacBethValidationResultFama-MacBeth 验证结果
factor_alpha_thresholdfloat因子显著性阈值,默认 0.05
weight_normalizebool是否对得分权重做归一化,默认 True
use_significant_onlybool是否只使用显著的因子,默认 True