R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列

简介: R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达自激过程时间序列

介绍

本文描述了一个模型,该模型解释了交易的聚集到达,并展示了如何将其应用于比特币交易数据。这是很有趣的,原因很多。例如,对于交易来说,能够预测在短期内是否有更多的买入或卖出是非常有用的。另一方面,这样的模型可能有助于理解基本新闻驱动价格与机器人交易员对价格变化的反应之间的区别。

订单到达的自激性和集群性

交易不会以均匀的间隔到达,但通常会在时间上聚集在一起。类似地,相同的交易标志往往会聚集在一起并产生一系列买入或卖出订单。 例如,将订单分成小块的算法交易者或对某些交易所事件做出反应的交易系统。

出于演示目的,我使用的数据是 2013 年 4 月 20 日 13:10 到 19:57 之间的 5000 笔交易。这是 1 分钟窗口内聚合的交易计数图。

plot(x, b, type = "l")

每分钟的平均交易数是 13,但是我们可以找出几个超过 50 的实例。通常较高的交易强度会持续几分钟,然后再次下降到平均值。特别是在 16:00 之后的 15 分钟左右,我们可以看到非常高的交易强度,其中一个实例每分钟超过 200 个订单,然后在接下来的约 10 分钟内强度缓慢下降。

描述事件计数到达的最基本方法,例如上面的时间序列,是泊松过程 ,有一个参数λ。在泊松过程中,每单位时间的预期事件数由一个参数定义。这种方法被广泛使用,因为它非常适合大量数据,例如呼叫中心的电话到达。然而,就我们的目的而言,这太简单了,因为我们需要一种方法来解释聚类和均值回归。

霍克斯过程(Hawkes Processes),是基本泊松过程的扩展,旨在解释这种聚类。像这样的自激模型广泛用于各种科学;一些例子是地震学(地震和火山喷发的建模)、生态学(野火评估 )、神经科学,当然还有金融和贸易。

让我们继续理解和拟合霍克斯过程(Hawkes Processes)到上面的数据。

霍克斯过程(Hawkes Processes)

霍克斯过程对随时间变化的强度或过程的事件发生率进行建模,这部分取决于过程的历史。另一方面,简单的泊松过程没有考虑事件的历史。

下图中绘制了霍克斯过程的示例实现。

它由 8 个事件组成,通常采用时间戳的形式,以及由三个参数定义的样本强度路径

这里,μ是过程恢复到的基本速率,α是事件发生后的强度跳跃,β是指数强度衰减。基准率也可以解释为外生事件的强度,例如新闻。其他参数 α 和 β 定义了过程的聚类属性。通常情况下 α<β 确保强度降低的速度快于新事件增加的速度。


自我激发性在时间标记 2 之前的前四个事件中是可见的。它们在彼此相距很短的时间内发生,这导致第四个事件的强度峰值很大。每一次事件的发生都会增加另一次发生的机会,从而导致事件的聚集。第五个数据点仅在时间标记 4 处到达,与此同时,导致整体强度呈指数下降。

条件强度最简单的形式是

指数函数定义了过程的记忆,即过去的事件如何影响当前的事件。求和将此函数应用于从事件 titi 到当前事件 t 的历史。λ(t)表示时间 t 的瞬时强度。

给定条件强度,两个派生量也很有趣:期望强度(在某些条件下)可以显示为 [4] 具有以下形式

并描述给定时间段的交易强度。另一个量是所谓的分支比

它描述了内生产生的交易比例(即作为另一笔交易的结果)。这可以用来评估交易活动中有多少是由反馈引起的。

可以使用传统的最大似然估计和凸求解器来拟合模型的参数。

将比特币交易的到来与霍克斯过程相匹配

在给定一组有序交易时间 t1<t2<⋯<tn的情况下,强度路径是完全定义的,在我们的例子中,这只是交易记录时的 unix 时间戳。鉴于此,我们可以使用R软件和Python轻松应用 MLE。给定参数的初始猜测和对参数的约束为正,以下函数拟合模型。

fhawks <- function(data) {
  # 初始猜测,a是α,C是β
  pstt <- c
  # 使用条件强度函数创建一个对象
  proc
  # 假设强度必须是正的
  conditi <- penaltany(parms < 0)
  # 使用标准优化法进行拟合
  fit(m, optrol = list(trace = 2))

我通过将存储在数据帧中的 5000 个交易时间戳传递给它来运行上面的拟合过程。与原始数据集的唯一区别是我为与另一笔交易共享时间戳的所有交易添加了一个随机毫秒时间戳。这是必需的,因为模型需要区分每笔交易(即每笔交易必须有唯一的时间戳)。文献描述了解决这个问题的不同方法 [4, 10],但将时间戳扩展到毫秒是一种常见的方法。

summary(f)

我们最终得到的参数估计为 μ=0.07,α=1.18,β=1.79。α 的参数估计表明,在单笔交易发生后,条件强度每秒增加 1.18 笔交易。此外,整个期间的平均强度为每秒 E[λ]=0.20次交易,一分钟内总共有 12 次交易,这与我们的经验计数相符。n=65%的分支率表明超过一半的交易是在模型内作为其他交易的结果产生的。鉴于所研究的时间相对平稳,价格呈上涨趋势,这一数字很高。将其应用于更动荡的区制或状态(例如一些崩溃)会很有趣,我认为该比率会高得多。

现在的目的是计算拟合模型的实际条件强度,并将其与经验计数进行比较。R 执行此评估,我们只需提供一系列时间戳即可对其进行评估。该范围介于原始数据集的最小和最大时间戳之间,对于该范围内的每个点,都会计算瞬时强度。

下图比较经验计数(来自本文的第一个图)和拟合的综合强度。

从图上看,这似乎是一个相当好的拟合。请注意,历史强度往往高于拟合的强度。可以通过引入有影响和无影响的交易来解决这个问题,这有效地减少了作为拟合程序一部分的交易数量。经验数据和拟合数据之间跳跃大小略微不匹配的另一个原因可能是同一秒内时间戳的随机化;在5000个原始交易中,超过2700个交易与另一个交易共享一个时间戳。这导致大量的交易(在同一秒内)失去订单,这可能会影响跳跃的大小。

拟合优度

评估拟合优度的方法有很多种。一种是通过比较AIC同质泊松模型的值,如上面的 R 总结中所示,我们的霍克斯模型更适合数据。

检验模型与数据拟合程度的另一种方法是评估残差。理论上说[4],如果模型拟合得好,那么残差过程应该是同质的,应该有事件间时间(两个残差事件时间戳之间的差值),这些时间是指数分布。事件间时间的对数图,或者在我们的案例中,对指数分布的QQ图,证实了这点。下面的图显示了一个很好的R2拟合。

现在我们知道该模型很好地解释了到达的聚类,那么如何将其应用于交易呢?下一步将是至少单独考虑买入和卖出的到达,并找到一种方法来预测给定的霍克斯模型。然后,这些强度预测可以构成做方向性策略的一部分。让我们看一下文献以获得一些想法。

申请交易

Hewlett[2]使用买入和卖出到达之间的双变量自激和交叉激振过程,预测了未来买入和卖出交易的不平衡性。作者设计了一个最佳的清算策略,由一个基于这种不平衡的价格影响公式得出。

在文献[3]中,作者使用双变量霍克斯过程的买入和卖出强度比作为进行方向性交易的进入信号。

改进

Hawkes 过程的对数似然函数具有 O(N2) 的计算复杂度,因为它在交易历史中执行嵌套循环。仍然是低效的,特别是对于高频交易目的。

结论

在本文中,我展示了霍克斯过程是解释 交易的聚集到达的一个很好的模型。我展示了如何在给定交易时间戳的情况下估计和评估模型,并强调了一些与估计有关的问题。

比特币交易数据及其价格发现尚未得到很好的研究。自激模型可能会回答诸如比特币价格变动有多少是由基本事件引起的等问题。该模型本身自然也可以成为交易策略的一部分。

参考

[1] J. Fonseca 和 R. Zaatour:霍克斯过程:快速校准、贸易聚类和扩散限制的应用 ssrn.

[2] P. Hewlett:订单到达聚类、价格影响和交易路径优化 pdf.

[3] J. Carlsson、M. Foo、H. Lee、H. Shek:使用双变量霍克斯过程进行高频交易预测。


相关文章
|
4月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
4月前
|
机器学习/深度学习 数据采集 算法
时间序列结构变化分析:Python实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
324 1
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
11种经典时间序列预测方法:理论、Python实现与应用
本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。
179 2
11种经典时间序列预测方法:理论、Python实现与应用
|
3月前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
62 3
|
3月前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
87 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
3月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
66 2
|
4月前
|
机器学习/深度学习 数据采集 算法
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
有多种方法可以处理时间序列数据中的噪声。本文将介绍一种在我们的研究项目中表现良好的方法,特别适用于时间序列概况中数据点较少的情况。
69 1
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
|
4月前
|
机器学习/深度学习 测试技术 数据处理
KAN专家混合模型在高性能时间序列预测中的应用:RMoK模型架构探析与Python代码实验
Kolmogorov-Arnold网络(KAN)作为一种多层感知器(MLP)的替代方案,为深度学习领域带来新可能。尽管初期测试显示KAN在时间序列预测中的表现不佳,近期提出的可逆KAN混合模型(RMoK)显著提升了其性能。RMoK结合了Wav-KAN、JacobiKAN和TaylorKAN等多种专家层,通过门控网络动态选择最适合的专家层,从而灵活应对各种时间序列模式。实验结果显示,RMoK在多个数据集上表现出色,尤其是在长期预测任务中。未来研究将进一步探索RMoK在不同领域的应用潜力及其与其他先进技术的结合。
115 4
|
4月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
2月前
|
数据采集 存储 数据挖掘
Python数据分析:Pandas库的高效数据处理技巧
【10月更文挑战第27天】在数据分析领域,Python的Pandas库因其强大的数据处理能力而备受青睐。本文介绍了Pandas在数据导入、清洗、转换、聚合、时间序列分析和数据合并等方面的高效技巧,帮助数据分析师快速处理复杂数据集,提高工作效率。
85 0