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

科技   2024-11-20 23:00   浙江  

全文链接:https://tecdat.cn/?p=38337

此文展示了如何在MATLAB®中使用Transformer网络对股票的每日价格进行建模。我们将预测三只个股的价格趋势,并使用预测的时间序列值对交易策略进行回测点击文末“阅读原文”获取完整代码数据


开始

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

(一)positionEmbeddingLayer

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

(二)selfAttentionLayer

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

(三)indexing1dLayer

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

导入和预处理数据


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

定义网络架构和训练选项

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

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或并行池进行训练,需要并行计算工具箱。

调整超参数

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

训练模型并可视化性能

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

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

除了可视化我们模型的性能外,我们还可以计算均方根误差(RMSE),以获得对我们预测质量的定量估计。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%的回报。这些结果表明,我们模型的预测可以帮助开发有利可图的交易策略。
虽然这些回测结果提供了关于使用模型预测实施的交易策略的盈利能力和有效性的见解,但模型和用于测试其预测结果的交易策略在实际交易场景中预计不会盈利。



本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 




资料获取


在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。



点击文末“阅读原文”

获取全文完整代码数据资料


本文选自《MATLAB深度学习Transformer神经网络量化金融时间序列预测交易策略回测》。


点击标题查阅往期内容

Python注意力机制Attention下CNN-LSTM-ARIMA混合模型预测中国银行股票价格|附数据代码
R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感
Python用CNN-LSTM、ARIMA、Prophet股票价格预测的研究与分析|附数据代码
【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例
RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
用PyTorch机器学习神经网络分类预测银行客户流失模型
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化
R语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与结果评估可视化
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析
R语言深度学习Keras循环神经网络(RNN)模型预测多输出变量时间序列
R语言KERAS用RNN、双向RNNS递归神经网络、LSTM分析预测温度时间序列、 IMDB电影评分情感
Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化
Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析
R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R语言深度学习:用keras神经网络回归模型预测时间序列数据
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
MATLAB中用BP神经网络预测人体脂肪百分比数据
Python中用PyTorch机器学习神经网络分类预测银行客户流失模型
R语言实现CNN(卷积神经网络)模型进行回归数据分析
SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型
【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析
Python使用神经网络进行简单文本分类
R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
R语言基于递归神经网络RNN的温度时间序列预测
R语言神经网络模型预测车辆数量时间序列
R语言中的BP神经网络模型分析学生成绩
matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类
R语言实现拟合神经网络预测和结果可视化
用R语言实现神经网络预测股票实例
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类




拓端数据部落
拓端(tecdat.cn)创立于2016年,提供专业的数据分析与挖掘服务,致力于充分挖掘数据价值。
 最新文章