121 模型:用于高收益交易的 LSTM 驱动的协整策略的目标——旨在将深度学习的预测能力与金融计量经济学的基本原则相结合。以下是使 121 模型与众不同的基本思想和方法,以及它如何使用机器学习来驾驭金融市场的复杂性并根据微妙的价格变动生成信号。
后台回复:121,获取源码及数据
121 模型的两个概念是协整和长短期记忆 (LSTM) 神经网络。
- 协整:是指两个或多个非平稳时间序列的线性组合是平稳的。如果两个时间序列是协整的,意味着它们之间存在一种长期均衡关系,即使它们在短期内可能偏离这种关系。该模型通过选择一对高度相关的资产(在本例中为 Apple Inc. [AAPL] 和 Microsoft Corporation [MSFT])并监控它们价格之间的价差来利用这种关系。然而,尽管存在这些短期偏差,但协整理论表明,此类价格必须回到其均衡关系,从而提供临时交易机会。
- 长短期记忆 (LSTM):传统的统计模型只能捕获少数几个方面,无法理解财务数据中复杂的非线性模式。LSTM 神经网络专为处理顺序数据而设计,并从过去的趋势中学习以预测未来的走势。当您使用历史价差数据训练 LSTM 时,这意味着该模型将捕获这些短期偏差中的模式,从而根据回归均值的回报生成买入或卖出信号。
换句话说,121 模型依靠协整来检测一组具有长期均衡关系的资产对,然后应用 LSTM 来预测与该均衡的短期偏差。正是这种双重方法使该模型能够利用暂时的价格差异,从而获得令人印象深刻的 121% 的年化回报。
本文将通过数据收集、计算散布、输入预处理、模型构建和评估性能介绍该模型,最终,可以了解如何通过使用机器学习来制定高回报产生策略来改进过去的财务原则。
获取数据
获取AAPL 和 MSFT 的历史调整后收盘价数据,涵盖 2015 年 1 月至 2024 年 12 月期间。
训练集和测试集
为了评估 121 模型,我们将数据分为训练集 (2015-2020) 和测试集 (2021-2024)。
训练数据协整测试
协整是配对交易中的一个关键假设,因为它表明两种资产之间存在稳定的长期关系。此处应用 Engle-Granger 协整检验来评估 AAPL 和 MSFT 是否随着时间的推移具有稳定的关系。
from statsmodels.tsa.stattools import coint# Perform cointegration test on training data
score, pvalue, _ = coint(train[ticker1], train[ticker2])
print(f'Cointegration test p-value: {pvalue:.4f}')
Cointegration test p-value: 0.9557
p 值为 0.9557 表明 AAPL 和 MSFT 并非传统意义上的严格共整。然而,对于 121 模型,我们继续使用该方法,因为它仍然捕获有价值的交易信号。
估算对冲比率
对冲比率量化了两只股票之间的关系,并用于计算它们之间的价差。该比率是通过线性回归估计的,其中 MSFT 为自变量,AAPL 为因变量。
from sklearn.linear_model import LinearRegression# Hedge ratio estimation
X_train_lr = train[ticker2].values.reshape(-1, 1)
y_train_lr = train[ticker1].values
lr_model = LinearRegression()
lr_model.fit(X_train_lr, y_train_lr)
hedge_ratio = lr_model.coef_[0]
print(f'Hedge Ratio: {hedge_ratio:.4f}')
Hedge Ratio: 0.4662
该模型的对冲比率为 0.4662,表示平衡 AAPL 头寸的 MSFT 比例。
计算点差
使用对冲比率,我们计算点差 — 由对冲比率调整的价格差异。此跨度用作 LSTM 模型的输入数据,捕获 AAPL 和 MSFT 之间的偏差。
# Calculate the spread
df['Spread'] = df[ticker1] - hedge_ratio * df[ticker2]
数据预处理 (缩放)
在将扩展数据馈送到 LSTM 之前,我们使用 MinMaxScaler 将其标准化为 0-1 的范围。缩放可确保 LSTM 能够有效地从数据中学习,而不会受到较大数值的影响。
LSTM 模型
LSTM 模型创建序列
为了使 LSTM 能够学习时间模式,我们将 spread 数据组织成序列。每个序列都表示一个 spread 值的滑动窗口,允许模型从最近的历史记录中学习。在本例中,我们使用 30 天序列作为 LSTM 的输入。
import numpy as np
# Function to create sequences
def create_sequences(data, time_steps=30):X = []y = []for i in range(len(data) - time_steps):X.append(data[i:(i + time_steps), 0])y.append(data[i + time_steps, 0])return np.array(X), np.array(y)# Generate training sequences
time_steps = 30
X_train_seq, y_train_seq = create_sequences(train_spread, time_steps)
X_train_seq = X_train_seq.reshape((X_train_seq.shape[0], X_train_seq.shape[1], 1))
构建和训练 LSTM 模型
LSTM 模型是 121 模型的核心,处理价差序列以预测未来的走势。我们将模型配置为使用单个 LSTM 层和密集输出层从历史传播数据中学习。
# LSTM model architecture
model = Sequential()
model.add(LSTM(50, input_shape=(X_train_seq.shape[1], 1))) # Crucial hyperparameters not shared
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')# Model training (placeholder values)
history = model.fit(X_train_seq, y_train_seq, epochs=25, batch_size=32, verbose=1)
对测试数据进行预测
使用经过训练的模型,我们继续对测试数据集进行预测。我们准备测试序列并将预测值和实际值转换回其原始比例以进行评估。
# Prepare test data and make predictions
combined_spread = np.vstack((train_spread[-time_steps:], test_spread))
X_test_seq, y_test_seq = create_sequences(combined_spread, time_steps)
X_test_seq = X_test_seq.reshape((X_test_seq.shape[0], X_test_seq.shape[1], 1))# 模型评估
loss = model.evaluate(X_test_seq, y_test_seq)
print("Test Loss:", loss)# Predict and invert scaling
predictions = model.predict(X_test_seq)
predictions_inv = scaler.inverse_transform(predictions)
y_test_seq_inv = scaler.inverse_transform(y_test_seq.reshape(-1, 1))
绘制带有买入和卖出信号的 K 线图
为了在 AAPL 的价格图表上可视化信号,我们准备了一个带有买入点和卖出点标记的烛台图。此图表说明了模型建议的交易行为。
计算策略回报
# Calculate daily returns and cumulative strategy returns
returns = df[[ticker1, ticker2]].pct_change().loc[test_df.index]test_df['Strategy_Return'] = test_df['Signal'] * (returns[ticker1] - hedge_ratio * returns[ticker2])
test_df['Cumulative_Strategy_Return'] = (1 + test_df['Strategy_Return'].fillna(0)).cumprod() - 1
性能指标
我们使用年化回报、波动率、夏普比率和最大回撤等关键指标来评估模型的风险调整后回报。
每日收益均值:0.47%
每日收益标准差:0.01
年化收益率:119.05%
年化波动率:18.97%
夏普比率:6.17
最大回撤:-6.14%
性能结果和讨论
- 原始策略回报 vs. 净策略回报
Cumulative Strategy Return 图表显示了在没有交易成本的情况下实施策略时回报随时间的增长。但是,现实世界的交易会产生成本,这可能会严重影响盈利能力。Net Strategy Return 图表包含这些交易成本,提供了模型绩效的真实情况。
- 性能指标说明
-
年化回报:这表示策略的年增长率。交易成本后的小幅下降仍然产生了超过 116% 的可观回报。
-
年化波动率:该模型保持一致的波动率,表明其在波动的市场条件下保持稳定性。
-
夏普比率:该比率衡量风险调整后回报率在扣除成本后仍保持在 5.96 的强劲水平,这表明该模型相对于其风险取得了出色的回报。
-
Maximum Drawdown:Drawdown 指标显示模型经历衰退期。根据交易成本进行调整后,回撤有所改善,反映了实际场景中更现实和可持续的方法。
- 结论
121 模型展示了如何将传统的计量经济学原理(如协整)与 LSTM 等深度学习技术相结合,以产生有利可图的交易策略。即使在扣除交易成本之后,结果也说明了获得丰厚回报和可控风险的潜力,凸显了机器学习如何改变量化金融。