如何准确预测加密货币价格?交易,技术和社交情绪指标的深度学习算法了解一下

  • Post author:
  • Post category:未分类

原标题:《加密货币价格预测:交易,技术和社交情绪指标的深度学习研究》

币圈深度参与者和holder获得更高收益, 而不是trader,这或许是我们的错觉,因为加密货币资产天然适合种套利高频机器人交易。

虽然像我们这些有点信仰又不是老炮的散户韭菜,对交易技术指标有点不屑。但面对币价波动,我们也不那么佛系,价格涨跌或多或少扰乱我们的情绪。

而对于币价的预测或感觉,仅凭社交情绪。本文从大量的技术,交易,社交情绪指标通过各种深度学习算法得出的结论是,综合技术,交易,社交情绪指标的深度学习结果对预测币价比单一指标要好。而Github和Reddit的基于技术开发人员的情绪指标更具有参考价值。

虽然这不一定正确更不是真理,毕竟深度学习算法和数据都可能有问题。然而这足足30来页的论文足已令我们恐惧,如今能用到如此高深的算法和有如此开放丰富的数据对加密资产交易预测,我们散户韭菜如何是好?

也许只有做好个人功课。我们为什么要投资这个项目?我们如何能为项目贡献?我如何才能不在乎币价?

Title: On Technical Trading and Social Media Indicators in Cryptocurrencies' Price Classification Through Deep Learning

Author(s):Marco Ortu, Nicola Uras, Claudio Conversano, Giuseppe Destefanis, Silvia Bartolucci

URL: http://arxiv.org/abs/2102.08189

摘要

由于加密货币市场的高波动性和新机制的存在,预测加密货币的价格是一项众所周知的艰巨任务。在这项工作中,我们重点研究了2017-2020年期间两种主要加密货币以太坊和比特币。通过比较四种不同的深度学习算法(多层感知器(MLP)、卷积神经网络(CNN)、长短期记忆(LSTM)神经网络和注意长短期记忆(ALSTM))和三类特征,对价格波动的可预测性进行了综合分析。特别是,我们考虑将技术指标(如开盘价和收盘价)、交易指标(如移动平均线)和社交指标(如用户情绪)作为分类算法的输入。我们比较了一个仅由技术指标组成的受限模型和一个包括技术、交易和社交媒体指标的非受限模型。结果表明,不受限制的模型优于受限制的模型,即包括交易和社交媒体指标,以及经典的技术变量,使得所有算法的预测精度都有显著提高。

1 简介

在过去十年中,全球市场见证了加密货币交易的兴起和指数增长,全球每日市值达数千亿美元(截至2021年1月达到约1万亿美元)。

最近的调查显示,尽管存在价格波动和市场操纵相关的风险,但机构投资者对新加密资产的需求和兴趣仍在飙升,原因是这些资产的新特性以及当前金融风暴中潜在的价值上升。

繁荣和萧条周期往往由网络效应和更广泛的市场采用引起,使价格难以高精度预测。关于这一问题有大量文献,并提出了许多加密货币价格预测的定量方法[13,15–18]。加密货币的波动性、自相关和多重标度效应的快速波动也得到了广泛的研究[22],同时也研究了它们对初始硬币发行(ICO)的影响[10,11]。

文献中逐渐出现的一个重要考虑因素是加密货币交易的“社会”的相关性。区块链平台的底层代码在Github上以开源方式开发,加密生态系统的最新添加内容在Reddit或Telegram的专业频道上讨论,Twitter提供了一个经常就最新发展进行激烈辩论的平台。更准确地说,已经证明,情绪指数可以用来预测价格泡沫[5],而且从Reddit专题讨论中提取的情绪与价格相关[28]。

开源开发在塑造加密货币的成功和价值方面也扮演着重要的角色[21,25,27]。特别是,Bartolucci et al.[2]之前的一项工作(这项工作是其扩展)表明,从开发人员对Github的评论中提取的情绪时间序列与加密货币的回报之间存在格兰杰因果关系。对于比特币和以太坊这两种主要的加密货币,还显示了如何将开发者的情绪时间序列纳入预测算法中,从而大大提高预测的准确性。

在本文中,我们使用深度学习方法进一步扩展了以前对价格可预测性的研究,并将重点放在按市值最高的两种主要加密货币,比特币和以太坊。

我们通过将准时价格预测映射到一个分类问题来预测价格变动:我们的目标是一个具有两个独特类别的二元变量,向上和向下的变动,表示价格上涨或下跌。下面我们将比较四种深度学习算法的性能和结果:多层感知器(MLP)、多变量注意长短时记忆完全卷积网络(MALSTMFCN)、卷积神经网络(CNN)和长短时记忆神经网络(LSTM)。

我们将使用以下类别的(财务和社会)指标作为输入:(i)技术指标,如开盘和收盘价格或成交量,(ii)交易指标,如根据价格计算的动量和移动平均线,(iii)社交媒体指标,即从Github和Reddit评论中提取的情绪要素。

对于每一个深度学习算法,我们考虑一个按小时和按每天频率的受限和非受限数据模型。受限模型由比特币和以太坊的技术变量数据组成。在无限制模型中,我们包含了Github和Reddit的社交媒体指标和技术、交易变量。

在所有四种深度学习算法中,我们都能证明无限制模型优于限制模型。在每小时数据频率下,将交易和社交媒体指标与经典技术指标结合起来,能提高比特币和以太坊价格预测的准确性,从限制模式的51-55%提高到非限制模式的67-84%。对于每日频率分辨率,在以太坊的情况下,使用限制模型实现最精确的分类。相反,对于比特币而言,仅包括社交媒体指标的无限制模式实现了最高的性能。

在下面的部分中,我们将详细讨论实现的算法和用于评估模型性能的引导验证技术。

本文的结构如下。在第2节中,我们详细描述了使用的数据和指标。在第三节中,我们讨论了实验的方法。在第4节中,我们介绍了研究结果及其意义,在第5节中,我们讨论了本研究的局限性。最后,在第6节中,我们总结了我们的发现并概述了未来的发展方向。

2 数据集:技术和社交媒体指标

本节讨论数据集和用于实验的三类指标。

2.1 技术指标

我们以每小时和每天的频率对比特币和以太坊价格时间序列进行了分析。我们从加密数据下载web服务中提取的所有可用技术变量,特别是来自Bitfinex.com网站交易数据服务。我们考虑了过去4年,从2017/01/01到2021/01/01,共35,638个小时的观测值。

在我们的分析中,我们将技术指标分为两大类:纯技术指标和交易指标。技术指标指的是开盘价和收盘价等“直接”的市场数据。交易指标是指移动平均线等衍生指标。

技术指标如下:

收盘价:加密货币在交易期间的最后交易价格。

开盘价:加密货币在交易期开始时首次交易的价格。

最低:加密货币在一个交易周期内交易的最低价格。

最高:加密货币在交易期间交易的最高价格。

交易量:完成的加密货币交易数量。

表1和表2显示了技术指标的汇总统计数字。在图1和图2中,我们还显示了技术指标的历史时间序列图。

根据对这些技术指标,可以计算交易指标,如移动平均值。更准确地说,我们使用StockStats Python库来生成它们。

我们使用了36个不同的交易指标,如表4所示。滞后值表示以前的值(t−1,t−n)用作输入。窗口大小表示用于在时间t评估指标的先前值的数目,例如,为了计算时间 t 的ADXRt,我们使用ADXt−1,…,ADXRt−10,十个先前值。

我们在这里提供五个主要交易指标的定义。

简单移动平均(SMA):加密货币在某一时期(称为时间段)收盘价的算术平均值。

加权移动平均(WMA):移动平均计算,为最新的价格数据赋予更高的权重。

相对强度指数(RSI):是衡量近期价格变化幅度的动量指标。它通常用于评估股票或其他资产是否超买或超卖。

价格变化率(ROC):衡量当前价格与一定时期前价格之间的百分比变化。

动量:是价格的加速率,即价格变化的速度。这一措施对于确定趋势特别有用。

平衡成交量(OBV):是基于资产交易量的技术动量指标,用于预测股价变化。

表3和表5显示了所考虑的分析期间的交易指标统计数字。在图3和图4中,我们可以在历史时间序列图中看到相同的交易指标。下一节将使用技术和交易指标来创建价格分类模型。

2.2 社交媒体指标

本节描述了社交媒体指标的时间序列是如何分别从以太坊和比特币开发者对Github的评论和用户对Reddit的评论构建的。特别是,对于Reddit,我们考虑了表6中列出的四个子Reddit通道。考虑的时间段为2017年1月至2021年1月。

从Github for Ethereum中提取的开发人员注释和从Reddit r/Ethereum中提取的用户注释的示例可以在表7和表8中看到。如本例所述,与评论相关的情绪的定量度量是使用最先进的文本分析工具计算的(下面将进一步详述)。为每条评论计算的这些社交媒体指标是情感,如爱(L)、快乐(J)、愤怒(A)、悲伤(S)、VAD(效价(Val)、支配(Dom)、唤醒(Ar))和情感(Sent)。

2.3 通过深度学习评估社交媒体指标

我们使用深度、预训练的神经网络从BERT模型[8]中提取社交媒体指标,称为双向编码器表示。BERT和其他转换器编码器结构已经成功地运行在自然语言处理(NLP)中的各种任务,代表了自然语言处理中常用的递归神经网络(RNN)的发展。他们计算适合在深度学习模型中使用的自然语言的向量空间表示。BERT系列模型使用Transformer编码器体系结构在所有标记前后的完整上下文中处理输入文本的每个标记,因此得名:Transformers的双向编码器表示。BERT模型通常是在一个大的文本语料库上进行预训练,然后针对特定的任务进行微调。这些模型通过使用一个深度的、预先训练的神经网络为自然语言提供了密集的向量表示,较换器结构如图5所示。

转换器基于注意力机制,RNN单元将输入编码到一个隐藏向量ht,直到时间戳t。后者随后将被传递到下一个时间戳(或者在序列到序列模型的情况下被传递到转换器)。通过使用注意力机制,人们不再试图将完整的源语句编码成一个固定长度的向量。相反,在输出生成的每个步骤中,允许解码器处理源语句的不同部分。重要的是,我们让模型根据输入的句子以及到目前为止它产生了什么来学习要注意什么。

Transformer体系结构允许创建在非常大的数据集上训练的NLP模型,正如我们在这项工作中所做的那样。由于预先训练好的语言模型可以在特定的数据集上进行微调,而无需重新训练整个网络,因此在大数据集上训练这样的模型是可行的。

通过广泛的预训练模型学习的权重,可以在以后的特定任务中重用,只需根据特定的数据集调整权重即可。这将允许我们通过捕获特定数据集的较低层次的复杂性,利用预先训练的语言模型通过更精细的权重调整所学到的知识。

我们在Transformer包中使用Tensorflow和Keras Python库来利用这些预训练神经网络的功能。特别地,我们使用了BERT基案例预训练模型。图6显示了用于训练用于提取社交媒体指标的三个NN分类器的体系结构设计。此图显示了用于训练最终模型的三个gold数据集,即Github、Stack Overflow和Reddit。

特别是,我们使用了一个情感标签数据集,该数据集由从Stackoverflow用户评论中挖掘出来的4,423条帖子组成,用于训练Github的情感模型:两个平台上的评论都是使用软件开发人员和工程师的技术术语编写的。我们还使用了来自Github的4,200个句子的情感标记数据集[23]。最后,我们使用了一个情感标签数据集,其中包含超过33K个标签Reddit用户的评论.

表9、10和11显示了情绪和情绪分类在两个不同数据集Github和Reddit上的性能。

2.3.1 Github上的社交媒体指标

比特币和以太坊项目都是开源的,因此代码和贡献者之间的所有交互都可以在GitHub上公开获得[26]。积极的贡献者不断地打开、评论和关闭所谓的“问题/issue”。问题是开发过程的一个元素,它包含有关发现的bug的信息、关于代码中要实现的新功能的建议、新特性或正在开发的新功能。它是跟踪所有开发过程阶段的一种优雅而有效的方法,即使在涉及大量远程开发人员的复杂和大型项目中也是如此。一个问题可以被“评论”,这意味着开发人员可以围绕它展开子讨论。他们通常会对某一特定问题添加评论,以强调正在采取的行动或就可能的解决方案提出建议。发布在GitHub上的每个评论都有时间戳;因此,可以获得准确的时间和日期,并为本研究中考虑的每个影响度量生成一个时间序列。

对于情绪分析,我们使用2.3中解释的BERT分类器,该分类器使用由Ortu等人[24]开发并由Murgia等人[23]扩展的公共Github情感数据集进行训练。这个数据集特别适合我们的分析,因为情绪分析算法是根据从Apache软件基金会的Jira问题跟踪系统中提取的开发人员评论进行训练的,因此在Github和Reddit的软件工程领域和上下文中(考虑选定的子Reddit)。该分类器可以分析出爱、愤怒、喜悦和悲伤,F1得分接近0.89。

Valence(效价)、Arousal(积极程度)、Dominance(优势度)就是所谓的VAD代表了概念化的情感维度,分别描述了受试者对特定刺激的兴趣、警觉性和控制感。在软件开发的上下文中,VAD度量可以表示开发人员对项目的参与程度,以及他们完成任务的信心和响应能力。Warriner等人[30]创建了一个参考词典,其中包含14000个英语单词,其VAD分数可用于训练分类器,类似于Mantyla等人[20]的方法。在[20]中,他们从70万份Jira问题报告中提取了VAD指标,其中包含超过200万条评论,并表明不同类型的问题报告(例如,功能请求vs bug)具有情绪变化。相比之下,问题优先级的增加通常会增加Arousal(积极程度)。

最后,使用2.3中解释的BERT分类器和类似研究中使用的公共数据集[3,4]对情绪进行测量。该算法从正(1)、中性(0)和负(-1)三个层次提取短文本中表达的情感极性。

我们的分析主要集中在三类情感指标上:情感(爱、喜、怒、悲)、VAD(效价、积极程度、优势度)和情感。正如我们在第2.3节中指定的,我们使用定制的工具从每个影响度量类的注释文本中提取它。

一旦为所有评论计算了影响度量的数值(如表7和表8中的示例所示),我们就会考虑评论时间戳(即评论发布的日期)来构建相应的社交媒体时间序列。情感时间序列是根据所考虑的时间频率(每小时和每天)在每小时和每天聚合多个评论的情感和情绪。

对于给定的社交媒体指标(例如愤怒)和特定的时间频率,我们通过平均当天发布的所有评论的影响度量值来构建时间序列。

在表12和13中,我们分别详细报告了两种加密货币的社会指标时间序列的汇总统计数据。我们还在图7和图8中分别报告了比特币和以太坊的所有社交媒体指标的时间序列

2.3.2 测量Reddit的影响度量

社交媒体平台Reddit是一个美国社交新闻聚合、网络内容评级和讨论网站,每月访问量约80亿次。在英语国家,尤其是加拿大和美国,它是一个最受欢迎的社交网络。几乎所有的信息都是用英语写的,少数是用西班牙语、意大利语、法语和德语写的。

Reddit构建在多个子Reddit之上,每个子Reddit都致力于讨论特定的主题。因此,主要的加密货币项目有特定的子项。对于这项工作中的每一种加密货币,分析了两个子项,一个是技术性的,一个是交易相关的。在选项卡中,被考虑的子项。如图所示,对于每个subreddit,我们收集了从2017年1月到2021年1月的所有评论。

对于情感检测,我们使用2.3中解释的BERT分类器,该分类器使用由Ortu等人[24]开发并由Murgia等人[23]扩展的公共Github情感数据集进行训练。这个数据集特别适合我们的分析,如前一节所述。

该分类器可以检测出爱、愤怒、喜悦和悲伤,F1得分接近0.89。对于VAD指标,我们使用了2.3.1中相同的方法,而对于情绪,我们使用了之前的方法,即BERT深度学习算法,该算法使用了一个公共黄金数据集进行训练,用于在最大和知名的共享数据集的web平台上提供的Reddit评论Kaggle.com.

表14和16以及图9和11显示了这两个比特币子Reddits的统计数据和时间序列,

而表17和15以及图10和12显示了这两个以太坊子Reddits的统计数据和时间序列。

2.4 价格变动分类

目标变量是一个二进制变量,下面列出了两个唯一的类。

上涨:这个类,标记为向上,编码为1,表示价格上涨的情况。

下跌:此类标记为向下并用0编码,表示价格下跌的情况。

图13显示了每小时和每日频率的类分布和数据集,突出显示了我们在每小时频率的情况下处理的是相当平衡的分类问题,在每日频率的情况下处理的是稍微不平衡的分类问题。

表18显示了上涨下跌实例的详细信息,比特币的实例分别为48%、5%和51.5%,以太坊的实例分别为49%、8%和50%、2%。对于每日频率,比特币为44%、8%和55.2%,以太坊为48%、5%和51%、5%。对于比特币的日频率,我们有一个稍微不平衡的分布向上类,在这种情况下,我们将考虑f1分数连同准确性,以评估模型的性能。

2.5 时间序列处理

由于我们使用的是有监督学习问题,我们准备我们的数据有一个向量的x输入和y输出与时间相关。在这种情况下,输入向量x称为回归量。x输入包括模型的预测值,即过去的一个或多个值,即所谓的滞后值。输入对应于前面章节中讨论的选定特征的值。目标变量y是二进制变量,可以是0或1。0(down)实例表示价格向下跌。当时间t的收盘价与时间t+1的开盘价之差小于或等于0时,获得时间t的0实例。1(up)实例表示价格向上,即价格上涨情况。当时间t的收盘价与下一时间步t+1的开盘价之差大于0时,得到1实例。我们考虑了两个时间序列模型:

受限:输入向量x仅包含技术指标(开盘、闭盘、最高、最低、交易量)。

无限制:输入向量x由技术、交易和社交媒体指标组成。

对于限制模型和非限制模型,我们对每个指标使用1个滞后值。这种区分的目的是确定和量化回归向量中添加的交易和社交媒体情绪指标是否会有效改善比特币和以太坊的价格变化分类。

3 方法论

本节描述了我们分析中考虑的深度学习算法,然后讨论了超参数的微调。

3.1多层感知器

多层感知器(MLP)是一类前馈人工神经网络(ANNs),具有多层感知器和典型的激活函数的特点。

最常见的激活功能有:

其中Vi是输入的加权向量。

MLP包含三个主要节点类别:输入层节点、隐藏层节点和输出层节点。除了输入节点外,神经网络的所有节点都是使用非线性激活函数的感知器。MLP不同于线性感知器,因为它具有多层结构和非线性激活函数。

一般来说,MLP神经网络对噪声有很强的抵抗能力,并且在缺失值时也能支持学习和推理。神经网络对映射函数没有很强的假设,很容易学习线性和非线性关系。可以指定任意数量的输入特征,为多维预测提供直接支持。可以指定任意数量的输出值,为多步甚至多变量预测提供直接支持。基于这些原因,MLP神经网络可能对时间序列预测特别有用。

在深度学习技术的最新发展中,整流线性单元(ReLU)是一种分段线性函数,经常被用来解决与sigmoid函数相关的数值问题。ReLU的例子是在-1和1之间变化的双曲正切函数,或者在0和1之间变化的logistic函数。这里第i个节点(神经元)的输出是yi,输入连接的加权和是vi。

通过包含整流器和softmax函数,开发了替代激活函数。径向基函数包括更高级的激活函数(用于径向基网络,另一类监督神经网络模型)。

由于MLPs是完全连接的架构,因此一层中的每个节点用特定的权重wi,j连接到下一层中的每个节点。神经网络的训练采用有监督的反向传播法和最优化方法(随机梯度下降法是一种广泛使用的方法)。数据处理后,感知机通过调整连接权值进行学习,这取决于输出中相对于预期结果的误差量。感知器中的反向传播是最小均方(LMS)算法的推广。

当第n个训练样本呈现给输入层时,输出节点j中的误差量为ej(n)=

发表评论