Skip to content

量化对冲基金实战 ​

📊 对冲基金 = 私募 + 量化 + 对冲 + 业绩报酬 —— 最专业、最复杂的投资形式。

🎯 对冲基金分类 ​

策略类型风险预期收益容量
股票多空中高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

📊 实战建议 ​

📌 量化对冲基金的关键 ​

  1. 回测是基础:所有策略必须经过严格回测
  2. 样本外验证:30% 数据不参与优化
  3. 过拟合防范:参数越少越好
  4. 实盘跟踪:小资金起步
  5. 持续更新:市场会变,策略要更新

📌 普通人能做什么 ​

方案难度收益预期
买量化公募基金⭐10-15%
买量化私募⭐⭐12-20%
自建简单策略⭐⭐⭐10-20%
专业量化团队⭐⭐⭐⭐⭐15-30%

📖 相关阅读 ​

来源 ​

💡 数据截至 2026-08;具体规则以交易所/监管机构最新公告为准。

本知识库内容仅供学习参考,不构成任何投资建议。
本站总访问量 ... 次 · 访客数 ... 人