量化对冲基金实战
📊 对冲基金 = 私募 + 量化 + 对冲 + 业绩报酬 —— 最专业、最复杂的投资形式。
🎯 对冲基金分类
| 策略类型 | 风险 | 预期收益 | 容量 |
|---|---|---|---|
| 股票多空 | 中高 | 10-20% | 中 |
| 市场中性 | 低 | 8-15% | 中 |
| CTA | 中 | 8-20% | 大 |
| 宏观对冲 | 中高 | 8-25% | 大 |
| 套利 | 低 | 5-12% | 小 |
| 事件驱动 | 中高 | 10-25% | 中 |
| 量化多头 | 高 | 15-30% | 中 |
| FOF 母基金 | 低 | 6-12% | 大 |
📊 1. 股票多空策略
📌 原理
- 多股票多空:买入被低估的股票 + 卖空被高估的股票
- 市场中性:多头和空头市值大致相等,对冲市场风险
- 超额收益(Alpha)来自选股能力
🔧 Python 完整代码
python
"""
股票多空策略
- 每月调仓
- 因子排序:价值 + 质量 + 动量
- 多头:前 20% 因子得分
- 空头:后 20% 因子得分
"""
import akshare as ak
import pandas as pd
import numpy as np
def long_short_strategy(stocks, start_date='20200101', end_date='20241231'):
"""
股票多空策略
"""
# 1. 获取所有股票数据
data = {}
for stock in stocks:
try:
df = ak.stock_zh_a_hist(
symbol=stock,
period='daily',
start_date=start_date,
end_date=end_date,
adjust='qfq'
)
if not df.empty:
data[stock] = df
except:
continue
# 2. 计算因子
factors = {}
for stock, df in data.items():
if len(df) < 60:
continue
# 价值因子(PE 反向)
# 简化:用价格/12月均值表示便宜
pe_proxy = df['收盘'].iloc[-1] / df['收盘'].rolling(252).mean().iloc[-1]
# 动量因子
mom_12m = df['收盘'].iloc[-1] / df['收盘'].iloc[-252] - 1
mom_6m = df['收盘'].iloc[-1] / df['收盘'].iloc[-126] - 1
mom_3m = df['收盘'].iloc[-1] / df['收盘'].iloc[-63] - 1
# 质量因子(用价格稳定性表示)
quality = -df['收盘'].pct_change().rolling(60).std().iloc[-1]
# 综合因子
score = (
-pe_proxy * 0.3 + # 便宜更好
mom_6m * 0.3 + # 半年动量
mom_12m * 0.2 + # 年动量
quality * 0.2 # 质量
)
factors[stock] = score
# 3. 排序选股
sorted_stocks = sorted(factors.items(), key=lambda x: x[1], reverse=True)
n = len(sorted_stocks)
long_portfolio = [s[0] for s in sorted_stocks[:n//5]] # 前 20%
short_portfolio = [s[0] for s in sorted_stocks[-n//5:]] # 后 20%
return long_portfolio, short_portfolio
# 使用
stocks = ['600519', '000858', '000333', '600276', '601318', '000651', '600887', '601888']
long_p, short_p = long_short_strategy(stocks)
print(f'多头: {long_p}')
print(f'空头: {short_p}')📐 实战回测
python
import backtrader as bt
import numpy as np
class LongShortStrategy(bt.Strategy):
"""股票多空策略"""
params = (
('rebalance_days', 20), # 调仓周期
('top_pct', 0.2), # 多头比例
)
def __init__(self):
# 计算因子
self.factor_values = {}
for d in self.datas:
self.factor_values[d._name] = self.calculate_factor(d)
def calculate_factor(self, data):
"""计算综合因子"""
close = data.close
# 动量
mom = close[0] / close[-126] - 1
# 反转
reversal = -close[0] / close[-5] + 1
return mom + reversal
def next(self):
if len(self) % self.params.rebalance_days != 0:
return
# 排序选股
sorted_stocks = sorted(
self.factor_values.items(),
key=lambda x: x[1],
reverse=True
)
n = len(sorted_stocks)
long_n = int(n * self.params.top_pct)
short_n = int(n * self.params.top_pct)
# 平仓
for d in self.datas:
self.close(data=d)
# 买多
for stock, _ in sorted_stocks[:long_n]:
data = self.getdatabyname(stock)
size = self.broker.getvalue() * 0.5 / long_n / data.close[0]
self.buy(data=data, size=size)
# 卖空(需要券商支持做空)
for stock, _ in sorted_stocks[-short_n:]:
data = self.getdatabyname(stock)
size = self.broker.getvalue() * 0.5 / short_n / data.close[0]
self.sell(data=data, size=size)📊 2. 市场中性策略
📌 原理
- 多头组合:选 50-300 只优质股票
- 空头对冲:用股指期货(IF / IH / IC)做空
- Beta = 0:组合收益与大盘无关
- 纯 Alpha:只赚选股的超额收益
📐 风险敞口
组合 = 多头股票组合 - β × 股指期货
β = 组合与指数的协方差 / 指数方差🔧 Python 实现
python
import numpy as np
import pandas as pd
import akshare as ak
def market_neutral_portfolio(stocks, index_code='sh000300'):
"""
构建市场中性组合
"""
# 1. 获取数据
stock_data = {}
for stock in stocks:
df = ak.stock_zh_a_hist(symbol=stock, period='daily', adjust='qfq')
if not df.empty:
stock_data[stock] = df['收盘'].pct_change().dropna()
index_df = ak.stock_zh_index_daily(symbol=index_code)
index_returns = index_df['close'].pct_change().dropna()
# 2. 计算每只股票的 Beta
betas = {}
for stock, returns in stock_data.items():
# 对齐日期
aligned = pd.DataFrame({
'stock': returns,
'index': index_returns
}).dropna()
if len(aligned) > 60:
cov = aligned['stock'].cov(aligned['index'])
var = aligned['index'].var()
betas[stock] = cov / var if var > 0 else 1
# 3. 等权多股票组合
selected_stocks = list(stock_data.keys())
n = len(selected_stocks)
# 每只股票权重 1/n
weights = {stock: 1/n for stock in selected_stocks}
# 4. 计算组合 Beta
portfolio_beta = sum(weights[s] * betas.get(s, 1) for s in selected_stocks)
# 5. 卖空指数期货(按组合 Beta)
hedge_ratio = portfolio_beta # 完全对冲
return weights, hedge_ratio, portfolio_beta
# 使用
weights, hedge, beta = market_neutral_portfolio(
['600519', '000858', '000333', '600276', '601318', '000651']
)
print(f'组合 Beta: {beta:.2f}')
print(f'对冲比例: {hedge:.2f}')📐 多因子打分
python
def multi_factor_score(stock):
"""多因子打分(0-100 分)"""
scores = {}
# 价值因子
pe = get_pe_ratio(stock) # 需 akshare
if pe < 0:
scores['价值'] = 0
elif pe < 15:
scores['价值'] = 100
elif pe < 25:
scores['价值'] = 80
elif pe < 40:
scores['价值'] = 50
else:
scores['价值'] = 20
# 质量因子
roe = get_roe(stock)
if roe > 20:
scores['质量'] = 100
elif roe > 15:
scores['质量'] = 80
elif roe > 10:
scores['质量'] = 60
else:
scores['质量'] = 30
# 动量因子
mom = get_momentum(stock) # 6 个月涨幅
if mom > 50:
scores['动量'] = 100
elif mom > 20:
scores['动量'] = 80
elif mom > 0:
scores['动量'] = 60
else:
scores['动量'] = 30
# 综合
total = (scores['价值'] * 0.3 +
scores['质量'] * 0.4 +
scores['动量'] * 0.3)
return total📊 3. CTA 策略
📌 原理
CTA(Commodity Trading Advisor):在大宗商品 / 期货上做趋势跟踪
经典策略:
- 趋势跟踪:突破 / 均线交叉
- 均值回归:偏离均值反向
- 海龟交易法则:ATR 突破
🔧 Python 完整代码
python
"""
海龟交易法则
- 20 日突破做多
- 10 日跌破平仓
- ATR 仓位管理
"""
import backtrader as bt
import numpy as np
class TurtleStrategy(bt.Strategy):
"""海龟交易策略"""
params = (
('entry_period', 20), # 入场周期
('exit_period', 10), # 出场周期
('atr_period', 20), # ATR 周期
('risk_per_trade', 0.02), # 单笔风险 2%
)
def __init__(self):
# 20 日最高 / 10 日最低
self.highest = bt.indicators.Highest(
period=self.params.entry_period
)
self.lowest = bt.indicators.Lowest(
period=self.params.exit_period
)
# ATR
self.atr = bt.indicators.ATR(period=self.params.atr_period)
self.order = None
def next(self):
if self.order:
return
price = self.data.close[0]
atr = self.atr[0]
if not self.position:
# 突破 20 日高点 → 买入
if price > self.highest[-1]:
# ATR 仓位管理
size = (self.broker.getvalue() * self.params.risk_per_trade) / (2 * atr)
self.order = self.buy(size=size)
else:
# 跌破 10 日低点 → 平仓
if price < self.lowest[-1]:
self.order = self.sell()📐 趋势跟踪回测
python
# 完整回测设置
cerebro = bt.Cerebro()
cerebro.addstrategy(TurtleStrategy)
cerebro.broker.setcash(1000000)
cerebro.broker.setcommission(commission=0.0003)
# 添加期货数据...
cerebro.run()📊 4. 套利策略
📌 跨期套利
python
def calendar_spread_arb(contract1, contract2):
"""
跨期套利:同一品种不同月份
"""
# 实时价差
spread = contract1 - contract2
# 历史均值
mean = historical_mean_spread
std = historical_std_spread
# Z-score
zscore = (spread - mean) / std
if zscore > 2:
# 价差过大,卖出价差
sell(contract1)
buy(contract2)
elif zscore < -2:
# 价差过小,买入价差
buy(contract1)
sell(contract2)
elif abs(zscore) < 0.5:
# 价差回归,平仓
close_all()📌 跨所套利
python
def cross_exchange_arb(symbol1, symbol2):
"""
跨所套利:同一品种不同交易所
"""
# 实时价差
spread = price1 - price2
# 手续费
cost = commission1 + commission2
# 价差 > 成本 → 套利
if spread > cost + 0.01:
sell(symbol1, buy(symbol2))
elif spread < -cost - 0.01:
buy(symbol1, sell(symbol2))📊 5. 风险管理
📌 风险指标
python
import numpy as np
def calculate_risk_metrics(returns, risk_free=0.025):
"""风险指标计算"""
returns = np.array(returns)
# 年化
annual_ret = np.mean(returns) * 252
annual_vol = np.std(returns) * np.sqrt(252)
# 最大回撤
cum_returns = (1 + returns).cumprod()
max_dd = (cum_returns / np.maximum.accumulate(cum_returns) - 1).min()
# 夏普
sharpe = (annual_ret - risk_free) / annual_vol
# 索提诺(只算下行波动)
downside = returns[returns < 0]
sortino = (annual_ret - risk_free) / (np.std(downside) * np.sqrt(252)) if len(downside) > 0 else 0
# 卡玛
calmar = annual_ret / abs(max_dd) if max_dd != 0 else 0
return {
'年化收益': f'{annual_ret:.2%}',
'年化波动': f'{annual_vol:.2%}',
'最大回撤': f'{max_dd:.2%}',
'夏普比率': f'{sharpe:.2f}',
'索提诺': f'{sortino:.2f}',
'卡玛比率': f'{calmar:.2f}',
}📌 凯利公式仓位
python
def kelly_fraction(win_rate, win_loss_ratio):
"""
凯利公式:f* = (p × b - q) / b
p = 胜率
q = 1 - p
b = 盈亏比
"""
return (win_rate * win_loss_ratio - (1 - win_rate)) / win_loss_ratio
# 示例:胜率 55%,盈亏比 1.5
f = kelly_fraction(0.55, 1.5)
print(f'凯利仓位: {f:.2%}') # 18.33%
# 实战:用半凯利(0.5 × f) = 9.17%📊 6. 头部对冲基金
| 机构 | 策略 | 规模 | 创立 |
|---|---|---|---|
| Renaissance | 量化多策略 | 600 亿+ | 1982 |
| Citadel | 多策略 | 600 亿+ | 1990 |
| 桥水 Bridgewater | 宏观 | 1500 亿+ | 1975 |
| 文艺复兴大奖章 | 量化 | 100 亿+ | 1988 |
| AQR | 量化 | 2000 亿+ | 1998 |
| Two Sigma | 量化 | 600 亿+ | 2001 |
| DE Shaw | 量化 | 600 亿+ | 1988 |
| Millennium | 多策略 | 600 亿+ | 1989 |
| 国内:幻方 | 量化 | 1000 亿+ | 2015 |
| 国内:九坤 | 量化 | 800 亿+ | 2012 |
| 国内:明汯 | 量化 | 700 亿+ | 2014 |
📊 实战建议
📌 量化对冲基金的关键
- 回测是基础:所有策略必须经过严格回测
- 样本外验证:30% 数据不参与优化
- 过拟合防范:参数越少越好
- 实盘跟踪:小资金起步
- 持续更新:市场会变,策略要更新
📌 普通人能做什么
| 方案 | 难度 | 收益预期 |
|---|---|---|
| 买量化公募基金 | ⭐ | 10-15% |
| 买量化私募 | ⭐⭐ | 12-20% |
| 自建简单策略 | ⭐⭐⭐ | 10-20% |
| 专业量化团队 | ⭐⭐⭐⭐⭐ | 15-30% |
📖 相关阅读
来源
- 证监会公开公告
- 上交所交易规则
- 深交所 / 北交所规则
- 中国证券业协会(SAC)、中国证券投资基金业协会(AMAC)公开资料
- 国家金融监督管理总局、人社部、财政部、税务总局公开资料
💡 数据截至 2026-08;具体规则以交易所/监管机构最新公告为准。