Skip to content

1.2 策略分类

概念详解

Alpha与Beta:量化策略的根本区分

在量化投资中,策略被首先划分为两大类别:Alpha策略追求超额收益,Beta策略跟踪市场指数。理解这一区分是构建任何量化策略的前提。

名词解释:Alpha

投资组合相对于基准指数(如沪深300)的超额收益,衡量基金经理的选股或择时能力。

名词解释:Beta

衡量资产或组合相对于市场整体的系统性风险,Beta=1表示与市场同步波动。

名词解释:Smart Beta

介于主动管理(Alpha)和被动跟踪(Beta)之间的策略,通过透明的因子规则(如价值、动量、低波)构建指数增强组合。

Alpha又可以进一步细分:

  • 纯Alpha (Pure Alpha):通过多空组合对冲市场风险,追求与市场涨跌无关的绝对收益
  • Alpha叠加 (Alpha Overlay):在Beta头寸之上叠加选股或择时信号,增强指数收益

策略的收益来源分解

任何策略的收益可以表示为:

R_total = R_rf + Beta * (R_market - R_rf) + Alpha + ε

其中:

  • Rrf 是无风险利率(资金的时间成本)
  • Beta×(RmarketRrf) 是承担系统性风险的补偿
  • Alpha 是策略真正的超额能力
  • ϵ 是随机噪声

理解这个分解的重要性在于:很多看似"赚钱"的策略,实际上只是在牛市中赚了 Beta 的钱,并没有产生真正的 Alpha。

策略分类体系

按交易逻辑分类

1. 方向性策略 (Directional Strategies)

预测资产价格的涨跌方向,是最直观的策略类型:

  • 趋势跟踪 (Trend Following):假设"涨的会继续涨,跌的会继续跌",利用移动平均、通道突破等技术指标
  • 均值回归 (Mean Reversion):假设价格会回到统计均值,利用 Bollinger Bands、RSI等超买超卖指标
  • 择时策略 (Market Timing):预测市场整体的牛熊转换,决定股票仓位比例

2. 相对价值策略 (Relative Value Strategies)

不赌方向,只赌价差关系的修复:

  • 统计套利 (Statistical Arbitrage):利用协整关系构建多空配对,赚取价差回归的利润
  • 跨品种套利:如大豆压榨套利(大豆→豆粕+豆油)、螺纹钢/热卷价差
  • 跨期套利 (Calendar Spread):同一品种不同到期月份合约之间的价差交易
  • ETF套利:利用ETF净值与市值之间的偏差

3. 事件驱动策略 (Event-Driven Strategies)

利用公司或市场事件的预期影响力:

  • 并购套利 (Merger Arbitrage):收购宣布后的价差交易
  • 财报策略:财报发布前后的超预期/不及预期交易
  • 指数调整:指数成分股调整带来的被动资金流入/流出

4. 做市策略 (Market Making)

提供双边报价,赚取买卖价差:

  • 通过统计模型预测短期价格方向,动态调整报价
  • 管理存货风险,希腊字母中性化
  • 利用交易所返佣(maker rebate)增厚利润

按预测频率分类

频率持仓周期典型策略技术栈
超高频<1秒做市、tick套利C++/FPGA
高频1秒-1分钟订单流预测C++/Python
中频1分钟-1天统计套利、趋势Python
低频1天-1周因子选股Python/R
基本面1周-1月多因子、宏观Python/SQL

按资产类别分类

  • 股票策略:多因子选股、量化择时、事件驱动
  • 期货/CTA:趋势跟踪、跨品种套利、期限结构
  • 期权策略:波动率套利、希腊字母对冲、跨式策略
  • 固定收益:久期管理、收益率曲线套利、信用利差
  • 外汇:利差交易 (Carry Trade)、购买力平价回归
  • 数字货币:永续合约资金费率套利、跨所搬砖

数学原理

趋势跟踪的数学表达

MAS 为短期移动平均,MAL 为长期移动平均:

Signal_t = sign(MA_{S,t} - MA_{L,t})

当短期均线上穿长期均线(金叉)时做多,下穿(死叉)时做空。

更一般的趋势强度度量用时间序列动量 (Time Series Momentum, Moskowitz et al., 2012):

r_{t,t+h} = sign(r_{t-12,t}) \cdot r_{t,t+h}

即用过去12个月的收益率符号预测未来h个月的收益率方向。

配对交易的统计基础

配对交易的核心是协整检验。对于两只股票 S1S2,估计协整回归:

\ln(P_{1,t}) = \alpha + \beta \ln(P_{2,t}) + \varepsilon_t

如果残差 εt 是平稳的,则两只股票是协整的。交易信号为:

Signal_t = \begin{cases} +1 & \text{if } \varepsilon_t < -\theta \\ -1 & \text{if } \varepsilon_t > +\theta \\ 0 & \text{otherwise} \end{cases}

其中 θ 是开仓阈值,通常设为残差标准差的1.5-2.5倍。

Python实战

案例1:简单趋势跟踪信号

PYTHON4 行 · 175 B
📄此处有展示代码4 行 · 175 B展开 ▼
python
import pandas as pd
df['MA_short'] = df['Close'].rolling(20).mean()
df['MA_long'] = df['Close'].rolling(50).mean()
df['Signal'] = (df['MA_short'] > df['MA_long']).astype(int)
点击展开可浏览运行结果
📘 本段为代码片段(仅展示函数/类定义,未提供运行入口,无需运行)

案例2:完整的均线策略回测框架

PYTHON59 行 · 1.9 KB
📄此处有展示代码59 行 · 1.9 KB展开 ▼
python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 计算信号和每日持仓
def moving_average_crossover(df, short_window=20, long_window=50):
    """
    双均线交叉策略
    """
    data = df.copy()
    
    # 计算均线
    data['MA_short'] = data['Close'].rolling(short_window).mean()
    data['MA_long'] = data['Close'].rolling(long_window).mean()
    
    # 生成信号:1为做多,-1为做空,0为无仓位
    data['Position'] = 0
    data.loc[data['MA_short'] > data['MA_long'], 'Position'] = 1
    data.loc[data['MA_short'] < data['MA_long'], 'Position'] = -1
    
    # 信号生成时考虑滞后(避免未来函数)
    data['Position'] = data['Position'].shift(1)
    data = data.dropna()
    
    # 计算策略收益率
    data['Market_Return'] = data['Close'].pct_change()
    data['Strategy_Return'] = data['Position'] * data['Market_Return']
    
    # 计算累计收益
    data['Cum_Market'] = (1 + data['Market_Return']).cumprod()
    data['Cum_Strategy'] = (1 + data['Strategy_Return']).cumprod()
    
    return data


# 使用示例 (需要一个包含 'Close' 列的 DataFrame)
# result = moving_average_crossover(df)
# result[['Cum_Market', 'Cum_Strategy']].plot(figsize=(12, 6))
# plt.show()

# 绩效统计函数
def performance_stats(returns, trading_days=252):
    """计算策略绩效指标"""
    annual_return = returns.mean() * trading_days
    annual_vol = returns.std() * np.sqrt(trading_days)
    sharpe = annual_return / annual_vol
    cum_returns = (1 + returns).cumprod()
    max_drawdown = (cum_returns / cum_returns.cummax() - 1).min()
    win_rate = (returns > 0).mean()
    
    return {
        '年化收益率': f'{annual_return:.2%}',
        '年化波动率': f'{annual_vol:.2%}',
        '夏普比率': f'{sharpe:.2f}',
        '最大回撤': f'{max_drawdown:.2%}',
        '胜率': f'{win_rate:.2%}'
    }

# print(performance_stats(result['Strategy_Return'].dropna()))
点击展开可浏览运行结果
📘 本段代码定义了 2 个函数/类:函数 `moving_average_crossover`(双均线交叉策略)、函数 `performance_stats`(计算策略绩效指标)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

案例3:配对交易信号生成与回测

PYTHON57 行 · 1.9 KB
📄此处有展示代码57 行 · 1.9 KB展开 ▼
python
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import coint, adfuller
from scipy import stats

def find_cointegrated_pairs(prices_df, p_threshold=0.05):
    """
    在全市场中寻找协整配对
    prices_df: 每列是一只股票的价格序列
    """
    n = prices_df.shape[1]
    pairs = []
    pvalues = []
    
    for i in range(n):
        for j in range(i+1, n):
            score, pvalue, _ = coint(prices_df.iloc[:, i], prices_df.iloc[:, j])
            if pvalue < p_threshold:
                pairs.append((prices_df.columns[i], prices_df.columns[j]))
                pvalues.append(pvalue)
    
    # 按p值排序,返回最优配对
    sorted_idx = np.argsort(pvalues)
    return [(pairs[i], pvalues[i]) for i in sorted_idx]

def generate_pair_signal(stock1_prices, stock2_prices, lookback=60, entry_z=2.0):
    """
    生成配对交易信号
    """
    # 滚动OLS估计对冲比率
    hedge_ratios = []
    for t in range(lookback, len(stock1_prices)):
        y = stock1_prices[t-lookback:t]
        x = stock2_prices[t-lookback:t]
        x_with_const = np.column_stack([np.ones(len(x)), x])
        beta = np.linalg.lstsq(x_with_const, y, rcond=None)[0]
        hedge_ratios.append(beta[1])
    
    hedge_ratios = np.array(hedge_ratios)
    
    # 计算价差
    spread = stock1_prices[lookback:] - hedge_ratios * stock2_prices[lookback:]
    
    # 标准化价差
    spread_mean = pd.Series(spread).rolling(lookback).mean()
    spread_std = pd.Series(spread).rolling(lookback).std()
    zscore = (spread - spread_mean) / spread_std
    
    # 生成信号
    signal = np.zeros(len(zscore))
    signal[zscore > entry_z] = -1  # 做空价差(卖1买2)
    signal[zscore < -entry_z] = 1  # 做多价差(买1卖2)
    
    # 平仓信号:价差回归均值
    signal[np.abs(zscore) < 0.5] = 0
    
    return signal, zscore, spread
点击展开可浏览运行结果
📘 本段代码定义了 2 个函数/类:函数 `find_cointegrated_pairs`(在全市场中寻找协整配对)、函数 `generate_pair_signal`(生成配对交易信号)。该片段为教学展示(未包含独立运行的输入数据),可在实战练习中结合真实数据调用。

常见误区

误区一:趋势跟踪在震荡市一定亏钱

事实:趋势跟踪确实有"磨损期",但好的趋势策略会在震荡市降低仓位或加入波动率过滤器。关键是控制每次假突破的成本,让单次亏损远小于单次趋势追中的盈利。

误区二:统计套利是"无风险"的

事实:统计套利不是真的无风险。协整关系可能破裂(结构突变),流动性可能枯竭,杠杆可能被迫平仓。LTCM(长期资本管理公司)的崩溃是最经典的警示案例。

误区三:一个策略可以永久有效

事实:所有Alpha都会随时间衰减。当某个策略的收益逻辑被市场广泛认知后,套利空间会被迅速填补。策略的生命周期管理(持续优化、多策略轮动、定期退役)和策略开发本身同等重要。

误区四:高频策略速度最重要

事实:速度是必要条件但不是充分条件。预测模型的准确性、风险管理系统的稳健性、交易成本的控制同样关键。很多HFT公司最终成功靠的是更聪明地交易,而非仅仅更快。

实战练习

  1. 均线参数优化:使用A股某只股票的历史数据,系统测试不同均线参数组合(short in [5, 10, 20, 30],long in [20, 50, 60, 120]),比较各组参数下的夏普比率和最大回撤,讨论参数敏感性和过拟合风险。

  2. 配对识别实战:选取同一行业(如白酒:贵州茅台vs五粮液,或者银行:工商银行vs建设银行)的两只股票,进行协整检验,如果通过则生成模拟交易信号,计算套利策略的收益特征。

  3. 多策略收益分解:任选三个不同逻辑的策略(趋势跟踪、均值回归、横截面动量),在同一股票池上分别回测,然后做等权组合,比较单一策略和多策略组合的收益风险特征。

延伸阅读

  • 《Quantitative Trading》—— Ernest P. Chan,量化策略入门经典
  • 《Algorithmic Trading and DMA》—— Barry Johnson,算法交易全貌
  • 《Advances in Financial Machine Learning》—— Marcos Lopez de Prado,将机器学习引入量化的开创性著作
  • Moskowitz, Ooi, Pedersen (2012): "Time Series Momentum" —— 趋势跟踪的学术基础
  • Frazzini, Kabiller, Pedersen (2018): "Buffett's Alpha" —— 拆解巴菲特的量化因子

本章要点

  • Alpha和Beta是量化策略最根本的分类维度,理解收益来源比关注总收益更重要
  • 策略按交易逻辑分为方向性、相对价值、事件驱动和做市四大类
  • 策略的生命周期包括开发、验证、上线、监控、衰减和退役
  • 没有永远有效的单一策略,多策略组合和持续迭代是长期生存的关键
  • 中国特色制度(T+1、涨跌停、做空限制)需要在策略设计阶段就充分考虑