如何通过数学模型选择合适的量化交易策略?

企业微信

为什么数学模型能帮你选策略

很多人做量化交易,手里攒了七八个策略,实盘时却不知道该跑哪一个。凭感觉挑,往往挑中最近表现最亮眼的那个,结果一上实盘就亏钱。数学模型的价值在于:把主观判断变成可重复的计算,用客观指标代替直觉。

股票和期货市场里,策略的表现会随行情变化。一个在趋势行情里赚钱的策略,到了震荡市可能连续回撤。数学模型不是预测未来,而是帮你衡量每个策略在不同市场环境下的风险收益特征,从而做出更理性的选择。

核心指标:别只看收益率

选策略不能只看谁赚得多。真正有用的数学模型会同时考虑收益和风险。

夏普比率

夏普比率 = (策略年化收益 - 无风险利率) / 策略年化波动率。

如何通过数学模型选择合适的量化交易策略?

它衡量的是每承担一单位波动风险,你能拿到多少超额收益。股票策略夏普比率超过1就算不错,期货策略因为杠杆效应,夏普比率通常更高,但也要看杠杆倍数。

最大回撤

最大回撤是从历史最高点跌到最低点的幅度。它告诉你最坏情况下会亏多少。一个策略年化收益30%,但最大回撤50%,另一个年化收益20%,最大回撤15%。后者更容易坚持执行,因为回撤小,心理压力小。

胜率和盈亏比

胜率是盈利交易占比,盈亏比是平均盈利除以平均亏损。高胜率低盈亏比的策略,遇到连续亏损容易让人怀疑人生。低胜率高盈亏比的策略,需要耐心等大行情。数学上,期望收益 = 胜率 × 平均盈利 - 败率 × 平均亏损。这个值必须为正。

卡玛比率

卡玛比率 = 年化收益 / 最大回撤。它直接告诉你每承担一单位回撤风险,能换来多少收益。卡玛比率大于1的策略,通常比较稳健。

构建评分模型:把多个指标揉成一个分数

单独看每个指标容易顾此失彼。你可以给每个指标分配权重,计算综合得分。

假设你关注四个指标:夏普比率、最大回撤、卡玛比率、胜率。给它们分别赋权:夏普30%,最大回撤25%,卡玛25%,胜率20%。然后对每个策略的指标做标准化处理,消除量纲影响。

标准化公式:(原始值 - 最小值) / (最大值 - 最小值)。对于最大回撤这种越小越好的指标,标准化后取反。


import numpy as np

import pandas as pd

# 假设有四个策略的指标数据

data = {

    '策略': ['A', 'B', 'C', 'D'],

    '夏普比率': [1.2, 0.8, 1.5, 1.0],

    '最大回撤': [0.25, 0.15, 0.35, 0.20],

    '卡玛比率': [0.8, 1.2, 0.6, 1.0],

    '胜率': [0.55, 0.60, 0.45, 0.52]

}

df = pd.DataFrame(data)

# 标准化函数

def normalize(series, reverse=False):

    min_val = series.min()

    max_val = series.max()

    norm = (series - min_val) / (max_val - min_val)

    if reverse:

        norm = 1 - norm

    return norm

df['夏普_std'] = normalize(df['夏普比率'])

df['回撤_std'] = normalize(df['最大回撤'], reverse=True)

df['卡玛_std'] = normalize(df['卡玛比率'])

df['胜率_std'] = normalize(df['胜率'])

# 权重

weights = {'夏普_std': 0.3, '回撤_std': 0.25, '卡玛_std': 0.25, '胜率_std': 0.2}

df['综合得分'] = sum(df[col] * w for col, w in weights.items())

print(df[['策略', '综合得分']].sort_values('综合得分', ascending=False))

这个得分不是唯一真理。权重需要根据你的风险偏好调整。保守型投资者可以提高最大回撤的权重,激进型可以提高夏普比率的权重。

引入市场状态:动态调整策略选择

股票和期货市场有明显的状态切换。趋势市、震荡市、高波动市,不同策略表现差异巨大。数学模型可以识别市场状态,然后动态分配资金。

识别市场状态

用波动率指标和趋势强度指标。波动率可以用ATR(平均真实波幅)或历史波动率。趋势强度可以用ADX(平均趋向指数)或者价格与移动平均线的偏离程度。

简单划分:

  • 高波动 + 强趋势 → 趋势跟踪策略

  • 低波动 + 无趋势 → 均值回归策略

  • 高波动 + 无趋势 → 降低仓位或空仓

动态权重

给每个策略分配一个基于市场状态的权重。市场状态越适合某策略,权重越高。


# 假设根据ADX和ATR划分市场状态

def get_market_state(adx, atr_percent):

    if adx > 25 and atr_percent > 0.02:

        return '趋势高波动'

    elif adx > 25 and atr_percent <= 0.02:

        return '趋势低波动'

    elif adx <= 25 and atr_percent > 0.02:

        return '震荡高波动'

    else:

        return '震荡低波动'

# 策略权重映射

state_weights = {

    '趋势高波动': {'趋势策略': 0.6, '均值回归': 0.1, '套利': 0.3},

    '趋势低波动': {'趋势策略': 0.4, '均值回归': 0.3, '套利': 0.3},

    '震荡高波动': {'趋势策略': 0.1, '均值回归': 0.4, '套利': 0.5},

    '震荡低波动': {'趋势策略': 0.2, '均值回归': 0.6, '套利': 0.2}

}

current_state = get_market_state(adx=30, atr_percent=0.025)

print(f'当前市场状态:{current_state}')

print(f'策略权重:{state_weights[current_state]}')

这个框架让策略选择不再是静态的,而是随市场呼吸。

股票和期货的差异

股票策略更关注选股因子和行业轮动,期货策略更关注杠杆和展期成本。数学模型选策略时,股票要额外考虑交易成本和冲击成本,期货要关注保证金和流动性。

股票量化策略的回测容易过拟合,因为股票数量多,因子挖掘空间大。期货品种少,过拟合风险相对低,但杠杆会放大波动。用数学模型时,股票策略要留出更长的样本外测试期,期货策略要更重视压力测试。

避免过拟合:数学模型的边界

数学模型能帮你排序,但不能保证未来。回测漂亮的策略,实盘可能失效。几个原则:

  • 样本外测试:至少留30%数据不参与参数优化。

  • 参数敏感性:参数微调后收益不能剧烈变化。

  • 逻辑支撑:策略要有经济逻辑,不能纯数据挖掘。

  • 滚动评估:每季度重新计算指标,动态调整。

数学模型是地图,不是终点。它帮你避开明显的坑,但路还是要自己走。

  1. 收集每个策略的历史净值曲线。

  2. 计算夏普比率、最大回撤、卡玛比率、胜率。

  3. 标准化后加权求和,得到综合得分。

  4. 识别当前市场状态,调整策略权重。

  5. 定期滚动评估,剔除持续低分策略。

这套方法不复杂,但能让你从凭感觉选策略,变成用数据做决策。股票期货都适用,关键在于坚持执行和动态调整。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/lianghua-jiaoyi-celve-shuxuemoxing-730.html