企业微信

股票选股策略的性能评估

选股策略的评估不能只看收益率。一套只展示累计收益曲线的策略毫无意义。真正决定策略能否投入实盘的是多个风险调整后指标。

核心评估指标

年化收益率是起点。计算方式为(最终净值/初始净值)^(252/交易日数)-1。股票策略通常期待年化15%以上,但必须与基准对比。沪深300指数在2019-2021年化约20%,若策略年化仅12%则毫无优势。

最大回撤衡量极端风险。股票多头策略回撤超过30%就很难被投资者接受。计算最大回撤时需注意:回撤幅度与恢复时间同等重要。一个回撤40%但半年内收复的策略,优于回撤25%但三年未创新高的策略。

夏普比率是风险调整收益的黄金标准。公式:(策略收益-无风险利率)/策略波动率。股票策略夏普大于1.0可接受,大于1.5优秀。但夏普比率对上涨波动也惩罚,需结合索提诺比率(只惩罚下行波动)。

选股策略的性能评估到底该看哪些指标?

卡玛比率=年化收益/最大回撤。该指标直接反映单位回撤带来的收益。卡玛大于0.5合格,大于1.0优秀。

胜率与盈亏比必须同时看。高胜率低盈亏比(如胜率80%,盈亏比0.3)长期必亏。低胜率高盈亏比(如胜率30%,盈亏比3.0)可能盈利但心理压力大。股票策略常见组合:胜率45%-55%,盈亏比1.5-2.5。

换手率与交易成本常被忽略。策略年换手率1000%意味着单边佣金加印花税每年消耗8%-10%收益。评估时务必用真实费率回测。

期货策略的评估差异

期货市场采用保证金交易,杠杆放大收益与回撤。评估期货选股策略(实际为商品期货多品种组合)时,需额外关注:

保证金占用率。策略同时持有多个期货合约,总保证金占用不宜超过总资金的60%。否则一次极端行情可能触发强平。

滚动收益率。期货展期成本显著。对股指期货(IF、IC),年化贴水可能贡献5%-15%收益或损失。评估时需使用复权连续合约。

多品种分散效果。期货策略常同时交易20个以上品种。评估时看品种间相关性。若所有品种同涨同跌,分散无效。理想状态是农产品、金属、能源化工相关性低于0.3。

回测陷阱与验证方法

前视偏差:使用未来数据。修正方法:信号生成只使用当日收盘前数据,成交价用次日开盘价。

幸存者偏差:只选当前存在的股票。必须使用历史全样本,包含退市股票。

过拟合:参数过多导致样本内完美。解决方法:样本外测试。将数据分为三段:训练集(60%)、验证集(20%)、测试集(20%)。在训练集调参,验证集筛选,测试集只跑一次。

蒙特卡洛模拟:对交易序列随机重排1000次,观察最大回撤分布。若5%分位数回撤达50%,则实盘可能更糟。

量化评估代码演示

以下Python代码计算股票策略的夏普比率、最大回撤、卡玛比率。


import numpy as np

import pandas as pd

def evaluate_strategy(returns, rf=0.02, periods=252):

    """

    returns: 日收益率序列

    rf: 年化无风险利率

    periods: 每年交易日数

    """

    cum = (1 + returns).cumprod()

    total_return = cum.iloc[-1] - 1

    years = len(returns) / periods

    annual_return = (1 + total_return) ** (1/years) - 1



    # 最大回撤

    peak = cum.cummax()

    drawdown = (cum - peak) / peak

    max_drawdown = drawdown.min()



    # 夏普比率

    excess = returns - rf/periods

    sharpe = np.sqrt(periods) * excess.mean() / excess.std()



    # 卡玛比率

    calmar = annual_return / abs(max_drawdown)



    # 胜率与盈亏比

    win_rate = (returns > 0).mean()

    avg_win = returns[returns > 0].mean()

    avg_loss = abs(returns[returns < 0].mean())

    profit_loss_ratio = avg_win / avg_loss if avg_loss != 0 else np.inf



    return {

        '年化收益': round(annual_return, 4),

        '最大回撤': round(max_drawdown, 4),

        '夏普比率': round(sharpe, 4),

        '卡玛比率': round(calmar, 4),

        '胜率': round(win_rate, 4),

        '盈亏比': round(profit_loss_ratio, 4)

    }

# 模拟数据

dates = pd.date_range('2020-01-01', periods=1000, freq='D')

returns = pd.Series(np.random.normal(0.0005, 0.015, 1000), index=dates)

print(evaluate_strategy(returns))

对于期货多品种策略,需分别计算每个品种的收益,再计算组合夏普。组合夏普不是简单平均,需考虑相关性矩阵。

实盘前压力测试

通过回测的策略需接受三类压力测试:

  1. 历史极端行情:2008年金融危机、2015年A股股灾、2020年原油负价格。将策略置于这些时段,观察回撤是否超出预期。

  2. 成本加倍:将佣金、印花税、冲击成本翻倍。若策略仍盈利,则安全边际充足。

  3. 延迟成交:信号发出后延迟1-5个交易日成交。股票策略延迟1天通常影响不大,期货日内策略延迟1天可能完全失效。

持续监控指标

策略上线后需监控:滚动60日夏普比率、滚动最大回撤、当前回撤恢复天数。若滚动夏普低于0.5且持续3个月,应暂停策略。若当前回撤超过历史最大回撤的1.5倍,需人工干预。

期货策略额外监控:保证金占用率(日度)、展期成本(月度)、品种相关性变化(周度)。当两个品种相关性从0.2升至0.8,分散效果消失,需调整权重。

选股策略的性能评估不是一次性工作。市场结构变化、交易成本调整、监管政策变动都会影响策略表现。建立自动化评估框架,每季度重新跑一遍完整指标,才能让策略持续存活。