跳到主要内容

机器学习在量化交易中的应用

机器学习为量化交易带来了从数据中发现非线性模式的能力,本节介绍ML在量化中的核心应用。

机器学习 vs 传统量化

维度传统量化机器学习
因子构建人工设计自动学习
关系建模线性为主非线性捕捉
可解释性相对弱(但有改进方法)
数据需求较少大量
过拟合风险较低较高

核心应用场景

1. 价格预测

  • 分类问题:预测上涨/下跌
  • 回归问题:预测收益率或价格
  • 时间序列:ARIMA, Prophet, 深度学习

2. 因子挖掘

  • 从原始数据自动提取有效特征
  • 使用自编码器降维
  • 遗传编程发现非线性因子

3. 组合优化

  • 强化学习动态调仓
  • 图神经网络捕捉资产关联
  • 注意力机制动态加权

4. 风险管理

  • 异常检测识别市场 regime 变化
  • 聚类分析发现风险集中
  • 预测尾部风险事件

监督学习方法

分类模型

from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier
from lightgbm import LGBMClassifier

# 典型流程
features = ['returns_lag1', 'volatility_20d', 'rsi', 'macd']
X = data[features]
y = (data['future_returns'] > 0).astype(int) # 上涨=1, 下跌=0

model = LGBMClassifier()
model.fit(X_train, y_train)
predictions = model.predict_proba(X_test)[:, 1]

回归模型

  • 线性/岭/Lasso:基线模型
  • 随机森林:处理非线性关系
  • XGBoost/LightGBM/CatBoost:梯度提升,竞赛常用
  • 支持向量机:小样本场景

无监督学习

聚类分析

from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixture

# 市场状态识别
kmeans = KMeans(n_clusters=4)
regimes = kmeans.fit_predict(market_features)

# 动态策略切换
def select_strategy(regime):
strategies = {
0: trend_following, # 趋势市
1: mean_reversion, # 震荡市
2: breakout, # 突破市
3: risk_off # 风险规避
}
return strategies[regime]

降维

  • PCA:主成分分析,去噪与可视化
  • t-SNE/UMAP:高维数据可视化
  • 自编码器:非线性特征学习

深度学习

序列模型

LSTM/GRU

import torch
import torch.nn as nn

class LSTMPredictor(nn.Module):
def __init__(self, input_size, hidden_size, num_layers):
super().__init__()
self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, 1)

def forward(self, x):
lstm_out, _ = self.lstm(x)
return self.fc(lstm_out[:, -1, :])

Transformer

  • 自注意力机制捕捉长程依赖
  • 适用于多资产、多因子场景
  • 计算复杂度高,适合日频以上

图神经网络

# 使用PyTorch Geometric
from torch_geometric.nn import GATConv

class AssetGraphNet(nn.Module):
"""基于图神经网络的资产关系建模"""
def __init__(self, in_channels, out_channels):
super().__init__()
self.conv1 = GATConv(in_channels, 64)
self.conv2 = GATConv(64, out_channels)

def forward(self, x, edge_index):
x = self.conv1(x, edge_index)
x = torch.relu(x)
x = self.conv2(x, edge_index)
return x

强化学习

交易作为马尔可夫决策过程

  • 状态: 市场特征、持仓、资金
  • 动作: 买入/卖出/持仓比例
  • 奖励: 收益、风险调整收益
  • 策略: 状态到动作的映射

常用算法

  • DQN: 离散动作空间
  • PPO: 连续动作,稳定性好
  • A3C: 异步训练,样本效率高
  • SAC: 最大熵,探索充分
# Stable-Baselines3示例
from stable_baselines3 import PPO
from gymnasium import Env

class TradingEnv(Env):
def __init__(self):
# 定义状态空间和动作空间
self.observation_space = ...
self.action_space = ...

def step(self, action):
# 执行交易,返回next_state, reward, done
...

def reset(self):
# 重置环境
...

model = PPO("MlpPolicy", env)
model.learn(total_timesteps=100000)

特征工程

常用特征类型

类型示例说明
价格特征收益率、波动率、动量基础技术指标
量价特征OBV、MFI、Chaikin成交量确认
统计特征偏度、峰度、分位数分布特性
宏观特征利率、汇率、VIX市场环境
文本特征新闻情感、社交媒体NLP提取
另类数据卫星、供应链、信用卡独特alpha

特征选择

from sklearn.feature_selection import SelectKBest, mutual_info_classif

# 基于互信息的特征选择
selector = SelectKBest(mutual_info_classif, k=50)
X_selected = selector.fit_transform(X, y)

# 查看选中特征
selected_features = X.columns[selector.get_support()]

模型评估与风险控制

时间序列交叉验证

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
X_train, X_test = X.iloc[train_idx], X.iloc[test_idx]
# 训练与评估

避免过拟合

  • 早停(Early Stopping): 验证集损失上升则停止
  • 正则化: L1/L2, Dropout
  • 集成: Bagging, Boosting, Stacking
  • 特征约束: 限制特征数量,优先经济意义明确的

延伸阅读