在量化交易中应用卷积神经网络CNN做时间序列预测

简介: 在量化交易中使用CNN做时间序列预测的理论,以及实现框架

量化交易中,最直接的判断策略是根据历史的价格走势或者交易量的变化,来预测未来的价格。这一点对于传统看K线的形态派,和现在使用机器学习的炼丹派应该都是一样的。对价格预测的有效性基于两个假设:

  1. 市场参与者的某种交易心理或者说情绪,会形成特定模式的下单流,从结果来看,就是造成特定的交易量演变以及价格走势。也就是说价格波动不是一个完全的随机游走过程,而是前后关联的。
  2. 市场参与者不会在某个时间点全部离场而进入全新的交易者,而是一个逐渐加入/退出的过程。这导致一个模式不会马上消失,而是逐渐演变。也就是说价格波动的形态是会重复发生的。

通过机器学习方法进行的量化预测,本质上就是先基于交易量和价格这两个市场行为的结果,找出潜在的交易心理/模式,当我们找到的模式在未来某个时间点再重现的时候,我们就可以从中获利。这个过程有点像自然语言处理,比如机器翻译要把中文翻译为英文,第一步是找出中文背后的语义,然后在把语义变为英文,这背后的语义就跟我们所说的交易模式一样,不可描述。

LSTM

时间序列预测,这个是一个典型的序列问题,直观的可以用循环神经网络(RNN, Recurrent Neural Networks)解决,RNN应用了序列的上下文关系。多数情况都会使用长短期记忆(LSTM,Long Short-Term Memory)网络,一种特殊的RNN。RNN在 语音识别、机器翻译这些场景应用很广泛。RNN的结构:

RNN_longtermdependencies

原始RNN的缺点是无法实现长期依赖(Long-Term Dependencies),也就是说随着时间序列的增长,序列的开头对于后面的作用几乎不存在了。LSTM是这针对这个问题进行优化的RNN变种,它可以保存几十个步骤以前的信息。LSTM的实现细节可以参考Understanding LSTM Networks -- colah's blog

但是在金融时间序列的问题上,时间序列的会很长,可能上千个神经元,LSTM无法解决这么久远的信息依赖。另外一个问题是RNN模型的训练过程的效率非常低,因为同一层的神经元计算是顺序进行的,这个顺序没法实现并行化。现在最新的研究也是正在放弃RNN/LSTM,比如 ResNet 和 Attention。

CNN

卷积神经网络(CNN,Convolutional Neural Networks)在计算机视觉中应用非常广泛,其最基本的理念就是对图像进行特征抽取。特征抽取是基于图像的两个性质:局部相关性和空间不变性。先说局部相关性,图像的本质是一个像素点组成的矩阵,单个像素与周围相邻的像素是有关联的,这种关联可能是他们共同组成图像中的一个结构,也叫特征。而空间不变性,就是指在对图像进行变换之后,一系列列相邻的像素点组成的特征依然存在。我们先看一下一个完整的CNN框架,这里是的目标是识别图片中的数字:

CNN_jpeg

CNN里面主要包含两个操作:卷积和池化。池化就是对图片数据进行采样,是一个相对简单的过程。卷积操作才是特征提取的核心。先要定义一个卷积核,不同的卷积核定义的是想要提取的目标特征特征,下面是卷积运算的计算过程:

Converlution

常用的卷积核定义以及特征提取的效果:

Conv

CNN的具体细节参考一下两篇博文,上文的图片也是来自于这两篇文章:

对于量化交易中假设时间序列数据中存在特定的模式,可以关联到上文的图片特征,理解为时间维度上的局部相关性,也就是说相邻的时间点组成了一个模式,我们可以通过CNN把潜在的模式提取出来。这个应用从直观上不是很好理解,因为从时间序列的角度来说,点与点之间是有先后的顺序关系的,也就一般所说的上下文,但是在CNN中,这个上下文信息被平面化了,认为所有的历史信息对于当前点的影响都是等价的。基于这一点,也有将CNN和LSTM结合在一起使用的工作:Twitter Sentiment Analysis using combined LSTM-CNN Models。当然从卷积运算的角度来看,卷积核探测到的模式其实是确定了其中的相对位置关系的,这也可以说是上下文信息的一种变形。

使用CNN相对于LSTM最大的优点是它可以运用并行化计算,计算效率远比LSTM高,从而我们可以把网络做的更深。

实现

我们先把问题进行转化,其实我们可以把我们的目标弱化,我们并不需要知道未来某一时刻价格精确的位置,而是只需要知道价格波动在未来是否达到了我们可以盈利的预期值,也就是价格是否涨/跌超过一个阈值,这样原始的问题我们形式化为一个分类问题。

下图是借用CNN处理文本处理的框架,并在图上做了修改,A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification

CNN_TimeSeries

在这个框架中,卷积运算的维度从上文介绍的图片分类的2维空间信息转变为1维时间信息。而横向(d=5)的数据是同一类别的量化因子,作为描述同一时间点的原始特征值。比如基于价格计算出来的不同周期的MACD,也可以直接是价格的OHLC,只要保证不同列的因子数据是可比较的就行。多个不同的大小的核,表示想要探测不同时间长度的模式。不同类型的因子可以通过上述的框架中,最后一步softmax之前,把所有因子中提取出来的特征值拼接在一起,最后做分类。这个模型是借用文本分类的框架,为了方便说明在在1维数据中使用CNN的过程。

PyTorch中的一维卷积nn.Conv1d就可以完成时间序列上的卷积运算,参考pytorch之nn.Conv1d详解

class Conv1d(_ConvNd):
    """
    in_channels (int): 输入通道数,也就是上图中的d=5
    out_channels (int): 卷积产生的通道。有多少个out_channels,就需要多少个1维卷积
    kernel_size (int or tuple): 卷积核的大小,上图3组核的的大小分别为4、5、6
    stride (int or tuple, optional): 卷积步长,每一次卷积计算之间的跨度,默认1
    padding (int or tuple, optional): 输入的每一条边补充0的层数,默认0
    dilation (int or tuple, optional): 卷积核元素之间的间距
    groups (int, optional): 输入通道到输出通道的阻塞连接数
    bias (bool, optional): 是否添加偏置项
    """
AI 代码解读

用PyTorch定义一个处理时间序列的CNN网络:

import torch
import torch.nn as nn

class TimeSeriesCNN(nn.Module):
    def __init__(self):
        super(TimeSeriesCNN, self).__init__()
        kernel_sizes = [4, 5, 6]
        ts_len = 7 # length of time series
        hid_size = 1
        self.convs = nn.ModuleList([
            nn.Sequential(
                nn.Conv1d(
                    in_channels=5,
                    out_channels=2,
                    kernel_size=kernel_size,
                ),
                nn.ReLU(),
                nn.MaxPool1d(kernel_size=ts_len - kernel_size + 1))
            for kernel_size in kernel_sizes
        ])
        self.fc = nn.Linear(
            in_features=hid_size * len(kernel_sizes),
            out_features=3,
        )

    def forward(self, x):
        output = [conv(x) for conv in self.convs]
        output = torch.cat(output, dim=1)
        output = output.view(output.size(1), -1)
        output = self.fc(output)
        return output
AI 代码解读
灵圣
+关注
目录
打赏
0
0
0
0
596
分享
相关文章
基于GA遗传优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB2022a开发,提供无水印算法运行效果预览及核心程序(含详细中文注释与操作视频)。通过结合时间卷积神经网络(TCN)和遗传算法(GA),实现复杂非线性时间序列的高精度预测。TCN利用因果卷积层与残差连接提取时间特征,GA优化超参数(如卷积核大小、层数等),显著提升模型性能。项目涵盖理论概述、程序代码及完整实现流程,适用于金融、气象、工业等领域的时间序列预测任务。
基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于遗传算法优化的时间卷积神经网络(TCN)用于时间序列预测的方法。算法运行于 Matlab2022a,完整程序无水印,附带核心代码、中文注释及操作视频。TCN通过因果卷积层与残差连接学习时间序列复杂特征,但其性能依赖超参数设置。遗传算法通过对种群迭代优化,确定最佳超参数组合,提升预测精度。此方法适用于金融、气象等领域,实现更准确可靠的未来趋势预测。
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
147 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
基于模糊神经网络的金融序列预测算法matlab仿真
本程序为基于模糊神经网络的金融序列预测算法MATLAB仿真,适用于非线性、不确定性金融数据预测。通过MAD、RSI、KD等指标实现序列预测与收益分析,运行环境为MATLAB2022A,完整程序无水印。算法结合模糊逻辑与神经网络技术,包含输入层、模糊化层、规则层等结构,可有效处理金融市场中的复杂关系,助力投资者制定交易策略。
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB 2022a实现了一种结合遗传算法(GA)优化的时间卷积神经网络(TCN)时间序列预测算法。通过GA全局搜索能力优化TCN超参数(如卷积核大小、层数等),显著提升模型性能,优于传统GA遗传优化TCN方法。项目提供完整代码(含详细中文注释)及操作视频,运行后无水印效果预览。 核心内容包括:1) 时间序列预测理论概述;2) TCN结构(因果卷积层与残差连接);3) GA优化流程(染色体编码、适应度评估等)。最终模型在金融、气象等领域具备广泛应用价值,可实现更精准可靠的预测结果。
基于WOA鲸鱼优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本内容介绍了一种基于CNN-LSTM-SAM网络与鲸鱼优化算法(WOA)的时间序列预测方法。算法运行于Matlab2022a,完整程序无水印并附带中文注释及操作视频。核心流程包括数据归一化、种群初始化、适应度计算及参数更新,最终输出最优网络参数完成预测。CNN层提取局部特征,LSTM层捕捉长期依赖关系,自注意力机制聚焦全局特性,全连接层整合特征输出结果,适用于复杂非线性时间序列预测任务。
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
250 10
深入理解深度学习中的卷积神经网络(CNN)##
在当今的人工智能领域,深度学习已成为推动技术革新的核心力量之一。其中,卷积神经网络(CNN)作为深度学习的一个重要分支,因其在图像和视频处理方面的卓越性能而备受关注。本文旨在深入探讨CNN的基本原理、结构及其在实际应用中的表现,为读者提供一个全面了解CNN的窗口。 ##

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等