共计 2903 个字符,预计需要花费 8 分钟才能阅读完成。
AI 量化交易新手入门:从零搭建你的第一个策略回测系统
量化交易基础概念
在开始动手之前,我们先了解几个关键术语:

- Alpha:衡量策略超越市场基准的收益能力
- Beta:反映策略对市场波动的敏感性
- 夏普比率 :评估风险调整后的收益表现
这些指标将帮助我们后续评估策略性能。
数据获取与清洗
我们从 Yahoo Finance 获取股票数据是最简单的方式:
import yfinance as yf
import pandas as pd
# 获取苹果公司股票数据
data = yf.download('AAPL', start='2020-01-01', end='2023-12-31')
# 数据清洗
data = data.dropna() # 删除缺失值
data = data[['Open', 'High', 'Low', 'Close', 'Volume']] # 选择需要的列
特征工程
构建有效的特征是策略成功的关键:
- 时间序列特征 :计算移动平均、波动率等
- 技术指标 :RSI、MACD 等常用指标
- 标准化处理 :使不同尺度的特征可比
# 计算 5 日和 20 日移动平均
data['MA5'] = data['Close'].rolling(5).mean()
data['MA20'] = data['Close'].rolling(20).mean()
# 计算 RSI 指标
def calculate_rsi(data, window=14):
delta = data['Close'].diff()
gain = delta.where(delta > 0, 0)
loss = -delta.where(delta < 0, 0)
avg_gain = gain.rolling(window).mean()
avg_loss = loss.rolling(window).mean()
rs = avg_gain / avg_loss
return 100 - (100 / (1 + rs))
data['RSI'] = calculate_rsi(data)
LSTM 预测模型构建
使用 TensorFlow 构建简单的 LSTM 模型:
import tensorflow as tf
from sklearn.preprocessing import MinMaxScaler
# 数据标准化
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)
# 准备训练数据
X, y = [], []
look_back = 30 # 使用过去 30 天的数据预测未来
for i in range(look_back, len(scaled_data)):
X.append(scaled_data[i-look_back:i])
y.append(scaled_data[i, 3]) # 预测收盘价
# 转换为 numpy 数组
X, y = np.array(X), np.array(y)
# 划分训练测试集
train_size = int(len(X) * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]
# 构建 LSTM 模型
model = tf.keras.Sequential([tf.keras.layers.LSTM(50, return_sequences=True, input_shape=(X_train.shape[1], X_train.shape[2])),
tf.keras.layers.LSTM(50),
tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=20, batch_size=32, validation_data=(X_test, y_test))
Backtrader 回测集成
将预测信号转化为交易策略:
import backtrader as bt
class LSTMStrategy(bt.Strategy):
params = (('look_back', 30),)
def __init__(self):
self.data_pred = self.predictions # 从模型获取的预测值
def next(self):
if len(self) < self.p.look_back:
return
current_pred = self.data_pred[0]
current_price = self.data.close[0]
# 简单交易逻辑
if not self.position:
if current_pred > current_price * 1.02: # 预测上涨 2% 以上
self.buy()
elif current_pred < current_price * 0.98: # 预测下跌 2% 以上
self.close()
# 创建回测引擎
cerebro = bt.Cerebro()
# 添加数据
data_feed = bt.feeds.PandasData(dataname=data)
cerebro.adddata(data_feed)
# 添加策略
cerebro.addstrategy(LSTMStrategy)
# 设置初始资金
cerebro.broker.setcash(100000.0)
# 添加分析器
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='drawdown')
# 运行回测
results = cerebro.run()
# 打印结果
print('最终资产价值: %.2f' % cerebro.broker.getvalue())
print('夏普比率:', results[0].analyzers.sharpe.get_analysis()['sharperatio'])
print('最大回撤:', results[0].analyzers.drawdown.get_analysis()['max']['drawdown'])
性能评估与避坑指南
关键评估指标
- 年化收益率 :策略的年平均收益
- 最大回撤 :策略可能遭受的最大损失
- 胜率 :盈利交易的比例
常见陷阱与解决方案
- 未来数据泄漏
- 确保在训练 / 测试分割时严格按时间顺序
-
不要在特征工程中使用未来数据
-
过拟合问题
- 使用交叉验证评估模型
- 保持模型简单
-
在独立测试集上验证
-
交易成本考虑
- 回测中应包括佣金和滑点
# 设置交易成本 cerebro.broker.setcommission(commission=0.001) # 0.1% 佣金
从回测到实盘
- 实盘准备
- 使用更长的历史数据测试
-
考虑市场影响和流动性
-
高频 vs 低频
- 高频需要更快的执行系统
- 低频策略更注重基本面分析
总结
本文带你走完了构建 AI 量化交易策略的完整流程,从数据获取到实盘考虑。记住,回测表现不代表未来收益,持续优化和风险管理才是长期成功的关键。
下一步,你可以尝试:
– 添加更多特征
– 尝试不同模型架构
– 测试不同市场条件
祝你在量化交易之旅中取得成功!
正文完
