主题切换
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 + ε
其中:
是无风险利率(资金的时间成本) 是承担系统性风险的补偿 是策略真正的超额能力 是随机噪声
理解这个分解的重要性在于:很多看似"赚钱"的策略,实际上只是在牛市中赚了 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)、购买力平价回归
- 数字货币:永续合约资金费率套利、跨所搬砖
数学原理
趋势跟踪的数学表达
设
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个月的收益率符号预测未来
配对交易的统计基础
配对交易的核心是协整检验。对于两只股票
\ln(P_{1,t}) = \alpha + \beta \ln(P_{2,t}) + \varepsilon_t
如果残差
Signal_t = \begin{cases} +1 & \text{if } \varepsilon_t < -\theta \\ -1 & \text{if } \varepsilon_t > +\theta \\ 0 & \text{otherwise} \end{cases}
其中
Python实战
案例1:简单趋势跟踪信号
此处有展示代码展开 ▼
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:完整的均线策略回测框架
此处有展示代码展开 ▼
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:配对交易信号生成与回测
此处有展示代码展开 ▼
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公司最终成功靠的是更聪明地交易,而非仅仅更快。
实战练习
均线参数优化:使用A股某只股票的历史数据,系统测试不同均线参数组合(short in [5, 10, 20, 30],long in [20, 50, 60, 120]),比较各组参数下的夏普比率和最大回撤,讨论参数敏感性和过拟合风险。
配对识别实战:选取同一行业(如白酒:贵州茅台vs五粮液,或者银行:工商银行vs建设银行)的两只股票,进行协整检验,如果通过则生成模拟交易信号,计算套利策略的收益特征。
多策略收益分解:任选三个不同逻辑的策略(趋势跟踪、均值回归、横截面动量),在同一股票池上分别回测,然后做等权组合,比较单一策略和多策略组合的收益风险特征。
延伸阅读
- 《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、涨跌停、做空限制)需要在策略设计阶段就充分考虑