MATLAB深度学习Transformer神经网络量化金融时间序列预测交易策略回测

此文展示了如何在MATLAB®中使用Transformer网络对股票的每日价格进行建模。

由Kaizong Ye,Liao Bao撰写

我们将预测三只个股的价格趋势,并使用预测的时间序列值对交易策略进行回测。

开始

在MATLAB R2023a和R2023b中引入了新的层,允许在使用深度网络设计器开发的网络架构中引入Transformer层。由于这些新的Transformer层能够捕获数据中的时间依赖性和长期依赖性,因此它们对于使用金融数据进行时间序列预测非常有用。

(一)positionEmbeddingLayer

positionEmbeddingLayer允许对序列中每个元素的位置信息进行编码。通过纳入位置嵌入,模型可以学习区分不同的时间步,并捕获数据中的时间依赖性。

(二)selfAttentionLayer

selfAttentionLayer允许模型权衡序列中不同元素的重要性。这使模型能够捕获序列中所有元素之间的依赖性,并学习它们之间的关系。自注意力机制在捕获数据中的长期依赖性方面也很有效,因为它们可以在遥远的时间步之间建立连接,理解可能对未来结果产生延迟影响的模式。

(三)indexing1dLayer

indexing1dLayer允许从输入数据的指定索引中提取数据。这使网络能够对selfAttentionLayer的输出进行回归。

导入和预处理数据


我们首先对数据进行预处理,根据日期将数据集划分为训练集和测试集。对于此数据集,训练数据和测试数据划分的截止日期是2021年初。在划分数据集后,我们基于训练数据的均值和标准差对训练数据进行标准化,并对测试数据进行归一化。
使用我们归一化后的数据,我们定义一个与数据集中每个价格相对应的30天价格数组,作为我们模型的顺序输入。每个30天的实际价格数据滚动窗口将用于预测下一天的价格。 ​

定义网络架构和训练选项

现在我们已经预处理了数据,我们可以为我们的深度学习模型指定网络架构和训练选项。我们可以将网络架构指定为一系列层,要么使用深度网络设计器,要么在MATLAB中以编程方式指定。以下是我们架构的编程实现以及在深度网络设计器中所选网络架构的可视化。


视频

LSTM模型原理及其进行股票收盘价的时间序列预测讲解

探索见解

去bilibili观看

探索更多视频


视频

【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列预测

探索见解

去bilibili观看

探索更多视频


视频

【视频讲解】Python深度学习股价预测、量化交易策略:LSTM、GRU深度门控循环神经网络附代码数据

探索见解

去bilibili观看

探索更多视频


自适应网页宽度的 Bilibili 视频

视频

时间序列分析模型 ARIMA-ARCH GARCH模型分析股票价格数据

探索见解

去bilibili观看

探索更多视频


视频

【视频讲解】Python用LSTM、Wavenet神经网络、LightGBM预测股价

探索见解

去bilibili观看

探索更多视频


layers = [ 
sequenceInputLayer(numChannels,Name="input")
 positionEmbeddingLayer(numChannels,maxPosition,Name="pos-emb");
 additionLayer(2, Name="add")
 selfAttentionLayer(numHeads,numKeyChannels,'AttentionMask','causal')
 selfAttentionLayer(numHeads,numKeyChannels)
 indexing1dLayer("last")
 fullyConnectedLayer(numChannels)
 regressionLayer];


在指定我们的网络架构后,我们还需要使用trainingOptions函数为我们的模型指定训练选项。以下是为此网络架构选择的训练选项。在这些训练选项中,我们可以指定执行使用GPU,而无需更改我们的任何模型架构。为了使用GPU或并行池进行训练,需要并行计算工具箱。 ​

调整超参数

通过深度学习工具箱™中的实验管理器来测试我们网络架构和训练选项的不同超参数是一种很好的方法。有关使用实验管理器训练深度学习网络的教程可以在此处找到。以下是为调整此演示中网络架构的超参数而设计的实验的设置和输出。此实验可以在子文件夹hyperparameter_experiment中找到。

训练模型并可视化性能

现在我们已经定义了我们的网络架构和训练选项,我们可以使用trainNetwork函数来训练我们的模型。以下是模型训练过程中途的训练进度图像。 ​

 

使用训练好的模型,我们可以基于前30天的滚动窗口对每只股票的价格进行预测,并将它们与实际的历史股票价格进行比较。 ​

以下是将模型预测与实际股票价格进行比较的图,分为训练集和测试集。

除了可视化我们模型的性能外,我们还可以计算均方根误差(RMSE),以获得对我们预测质量的定量估计 ​。


Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格

阅读文章


RMSE衡量预测股票价格与实际股票价格之间的平均差异,提供了模型准确性的指示。对于股票A、B和C,基于训练期间每只股票平均价格的训练数据的百分比RMSE分别为1.05%、1.17%和2.30%。对于股票A、B和C,基于测试期间每只股票平均价格的测试数据的百分比RMSE分别为0.87%、0.97%和1.98%。

在市场数据上回测模型预测

虽然RMSE是量化一组预测性能的常用方法,但我们使用这些预测的目的是利用它们开发一种在测试数据上有利可图的策略。为了测试交易策略的盈利能力,我们可以使用金融工具箱™中的回测工具。此演示中实现的四种交易策略是:


随时关注您喜欢的主题


(一)仅做多策略

将所有资本投资于具有正预测回报的股票,与预测回报成比例。

(二)多空策略

将资本投资于所有股票,包括正预测回报和负预测回报,与预测回报成比例。

(三)最佳选择策略

将所有资本投资于具有最高预测回报的单一资产。

(四)等权重策略

每天重新平衡投资资本,在股票之间进行等权重分配(基准)。
以下是显示这些交易策略在测试数据期间性能的净值曲线。

 

基于上述净值曲线,如果我们从2021年1月开始根据模型预测进行投资,我们可以看到我们的模型预测在仅做多策略下实现了24%的回报,在最佳选择策略下实现了22%的回报。等权重策略不考虑我们的模型预测,并作为基础股票的基线性能指标,在测试期间有13%的回报。

这些结果表明,我们模型的预测可以帮助开发有利可图的交易策略。 ​

虽然这些回测结果提供了关于使用模型预测实施的交易策略的盈利能力和有效性的见解,但模型和用于测试其预测结果的交易策略在实际交易场景中预计不会盈利。此演示旨在说明一种工作流程,该流程应在更全面的数据集以及更复杂的模型和策略中有用。


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498