1. 配对交易(Pairs Trading)
核心逻辑:
通过协整关系构建“均值回归”策略,需满足:
两标的长期价格序列协整(ADF检验p<0.05)
价差波动符合均值回归特性(ADF检验价差序列平稳)
完整代码实现:
# 数据准备(以平安银行与招商银行为例)
import pandas as pd
import numpy as np
from statsmodels.tsa.stattools import coint, adfuller
# 获取历史数据(需申请AK/SK)
df_pingan = pd.read_csv('pingan.csv', index_col='date', parse_dates=True)
df_cmb = pd.read_csv('cmb.csv', index_col='date', parse_dates=True)
# 计算价差序列
df_pingan['returns'] = df_pingan['close'].pct_change()
df_cmb['returns'] = df_cmb['close'].pct_change()
spread = df_pingan['returns'] - 0.85*df_cmb['returns'] # 0.85为协整系数
# 协整检验
score, p_value, _ = coint(df_pingan['close'], df_cmb['close'])
print(f"协整检验p值:{p_value:.4f}") # 输出示例:p=0.003
# 信号生成(阈值法)
zscore = (spread - spread.mean()) / spread.std()
long_signal = zscore < -1.5 # 低估平安银行
short_signal = zscore > 1.5 # 高估招商银行
# 回测引擎(含手续费)
initial_balance = 100000
position_pingan = 0
position_cmb = 0
for i in range(len(zscore)):
if long_signal[i] and position_pingan <= 0:
position_pingan = initial_balance * 0.5 / df_pingan['close'][i]
position_cmb = -position_pingan * 0.85 # 维持beta中性
elif short_signal[i] and position_pingan >= 0:
position_pingan = 0
position_cmb = 0
# 每日结算
balance = position_pingan * df_pingan['close'][i] + position_cmb * df_cmb['close'][i]
print(f"第{i}日资产:{balance:.2f}")
参数优化技巧:
使用网格搜索寻找最佳协整系数(0.8~0.95)
动态调整阈值(波动率放大时放宽至±2σ)
加入波动率过滤(ATR>阈值时才交易)
2. 统计套利(多因子模型)
核心逻辑:
构建因子组合预测超额收益,公式:
预期收益 = α + β1×因子1 + β2×因子2 + ... + ε
完整代码实现(ROE+波动率双因子):
# 数据准备(以A股全市场为例)
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
# 因子数据加载(需对接Wind/同花顺API)
df_factors = pd.read_csv('factors.csv') # 包含ROE、过去90日波动率等字段
df_prices = pd.read_csv('prices.csv')
# 因子标准化
scaler = StandardScaler()
scaled_factors = scaler.fit_transform(df_factors[['ROE', 'volatility']])
# 构建回归模型
X = scaled_factors
y = df_prices['next_month_return']
model = LinearRegression().fit(X, y)
# 组合构建(选前10%股票)
df_factors['score'] = model.predict(X)
top_stocks = df_factors.nlargest(100, 'score')['code']
bottom_stocks = df_factors.nsmallest(100, 'score')['code']
# 回测结果(2023年数据)
long_returns = df_prices[top_stocks].pct_change().mean().mean()
short_returns = df_prices[bottom_stocks].pct_change().mean().mean()
print(f"多空组合月收益:{long_returns - short_returns:.2%}") # 示例输出:3.2%
# 风险控制(Fama-French三因子调整)
# 添加市场因子、规模因子、价值因子到回归模型
可优化升级:
使用LightGBM替代线性回归处理非线性关系
加入行业中性约束(同一行业头寸不超过20%)
动态因子权重(基于卡尔曼滤波跟踪因子有效性)
3. LSTM预测模型
核心逻辑:
用循环神经网络捕捉时序特征,输入维度建议:
技术指标:RSI(14)、MACD、布林带宽度
市场情绪:雪球热词情感得分、北向资金净流入
资金流:Level2大单净流入率
完整代码实现:
# 数据预处理(以宁德时代为例)
from keras.models import Sequential
from keras.layers import LSTM, Dense
# 构造3D输入(样本数,时间步长,特征数)
def create_dataset(data, time_steps=20):
X, y = [], []
for i in range(len(data)-time_steps):
X.append(data[i:(i+time_steps), :])
y.append(data[i+time_steps, 3]) # 预测次日收盘价
return np.array(X), np.array(y)
# 加载数据(包含OHLC、成交量、技术指标)
data = pd.read_csv('CATL.csv').iloc[:, :7]
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)
# 划分训练集/测试集
train_size = int(len(scaled_data)*0.8)
X_train, y_train = create_dataset(scaled_data[:train_size])
X_test, y_test = create_dataset(scaled_data[train_size:])
# 构建LSTM模型
model = Sequential()
model.add(LSTM(128, return_sequences=True, input_shape=(20,7)))
model.add(Dropout(0.2))
model.add(LSTM(64))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# 训练与验证
history = model.fit(X_train, y_train, epochs=50, batch_size=32,
validation_split=0.1, verbose=1)
# 预测与反归一化
predictions = model.predict(X_test)
predictions = scaler.inverse_transform(
np.concatenate([X_test[:,-1,:6], predictions], axis=1))[:,6]
超参数调优技巧:
时间步长:10~50(需平衡近期与长期信息)
层级结构:2层LSTM+Dropout防止过拟合
特征工程:加入订单流数据(盘口挂单量变化率)
4. 订单流冰山算法
核心逻辑:
拆分大额订单降低市场冲击,需实时监控:
对手方挂单量变化率
逐笔成交的买方/卖方力量比
完整代码实现(Level2数据解析):
# Level2数据解析(示例字段:买一~买五价格/量)
import socket
import struct
def parse_order_book(msg):
# 解析二进制数据包(示例为深交所Level2协议)
data = struct.unpack('!IIIII', msg[:20])
buy1_price = data[0] / 100.0 # 价格单位0.01元
buy1_vol = data[1] # 手数单位
sell1_price = data[2] / 100.0
sell1_vol = data[3]
return buy1_price, buy1_vol, sell1_price, sell1_vol
# 冰山算法实现
class IcebergAlgorithm:
def __init__(self, total_vol=10000, chunk_size=1000):
self.total_vol = total_vol # 总订单量(手)
self.chunk_size = chunk_size # 每次挂单量
self.revealed_vol = 0 # 已暴露量
def execute(self, current_price):
remaining = self.total_vol - self.revealed_vol
if remaining > 0:
# 动态调整挂单价(TWAP策略)
alpha = self.revealed_vol / self.total_vol
target_price = current_price * (1 + 0.0001 * alpha)
# 挂单并更新已暴露量
place_order(target_price, self.chunk_size)
self.revealed_vol += self.chunk_size
实战参数设置:
总订单量>5万手时,分100次执行
挂单价偏离市价±0.3%以内
监控对手方大单(>1万手)触发暂停机制
5. 对冲基金实战组合
多策略组合代码示例:
# 策略权重分配(基于风险平价模型)
from pypfopt import EfficientFrontier, risk_models, expected_returns
# 获取策略收益数据(配对交易、统计套利、LSTM等)
returns = pd.read_csv('strategy_returns.csv', index_col=0)
# 计算风险平价权重
mu = expected_returns.mean_historical_return(returns)
S = risk_models.sample_cov(returns)
ef = EfficientFrontier(mu, S)
weights = ef.efficient_risk(target_risk=0.15) # 目标波动率15%
# 组合再平衡(每月底执行)
for strategy, weight in weights.items():
execute_rebalance(strategy, weight)
组合监控看板:
# 实时计算组合指标
def portfolio_metrics(weights, returns):
portfolio_return = np.dot(weights, returns.mean())
portfolio_vol = np.sqrt(weights.T @ returns.cov() @ weights)
sharpe_ratio = portfolio_return / portfolio_vol
print(f"预期年化收益:{portfolio_return*252:.2%}")
print(f"年化波动率:{portfolio_vol*sqrt(252):.2%}")
print(f"夏普比率:{sharpe_ratio:.2f}")
代码使用须知
数据获取:需自行对接券商API(如掘金、JoinQuant)或购买商业数据
回测陷阱:
避免未来函数(如用当日收盘价生成信号)
加入滑点模拟(通常设置为0.1%~0.3%)
实盘部署:
使用异步框架(如FastAPI+WebSocket)实时监控策略
设置熔断机制(单策略亏损>5%自动暂停)
可购买GitHub仓库地址(含Docker部署教程+超参数优化Notebook)
暂无评论内容