通过多元蒙特卡罗模拟来预测股票价格的日内波动性

news2024/11/26 17:40:06

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:
       
日内价格波动对交易策略的重要性不言而喻,尤其是美跨式交易策略(The American straddle)。由于无法预测所有影响股价的因素,本文采用多元蒙特卡罗模拟来测试不同的价格路径,以评估交易策略的成功概率。文章介绍了如何使用多元蒙特卡罗模拟分析 UBER 股票的开盘、最高、最低和收盘价(OHLC),并预测未来 n 天的R日内价格走势。

       若你是一名每天都进行美股交易的散户,那想必你曾遇到过如下情形:股票价格朝着某一方向剧烈波动后,又重新回到了开盘价附近。亦或是在整个交易日中股价都较为稳定,然而在下午收盘时又有消息传出,使得盘后 / 盘前市场中的股价大幅波动。这些价格行为,无论是因为大型机构对数十亿美元进行重新平衡而产生价格滑点所致,还是由于预期的公司公告引起,都有可能决定仓位的成败。从美跨式交易的使用角度来看,这属于最为理想的情况。

       ​​​​​​​为什么选择多元蒙特卡罗模拟(multivariate Monte Carlo Simulation)而不是复杂的机器学习(ML)算法呢?预测价格走势是极具挑战性的,因为股票价格受到众多因素的影响。明天可能会有新的经济数据公布,竞争对手可能会推出更优质的产品,对公司至关重要的首席执行官可能会宣布退休,战争可能会爆发,COVID 等情况也可能发生。要考虑到所有这些因素几乎是不可能的。

       ​​​​​​​对于蒙特卡罗模拟,我喜欢将其比作漫威电影《复仇者联盟:无限战争》中的奇异博士。如果你不了解这部电影,奇异博士是一个超级英雄角色,他是团队的一员,拥有预见无限宇宙的能力。在与反派萨诺斯的战斗中,奇异博士查看了战争中所有可能的结果,找到了通向胜利的事件路径。蒙特卡罗模拟的本质也是如此。我们利用过去观察到的价格走势,从当前价格推断出未来 n 天内的 m 条价格路径。通过这 m 条价格路径,我们可以计算出其中有多少条对我们有利。根据这些路径,我们可以决定是否应该参与交易。


一、数据(Data)

       ​​​​​​​在理想状态下,挑选带有刻度线的专业数据源无疑是更为高阶的选择。然而,鉴于性价比方面的考量,我选择免费的雅虎财经数据源。采用每日数据的问题在于,我们会错失全天的所有价格动态。诚如动机部分所提及,正因上述缘由,很多时候你会目睹较大幅度的价格波动。那么,究竟怎样才能获取日内价格走势呢?答案便是运用每日 OHLC 价格。通过使用 OHLC,我们必须借助多元方法进行模拟。首先,让我们针对 UBER 的 OHLC 数据展开一番探索,瞧瞧如何将这些变量加以结合以进行模拟。

       ​​​​​​​OHLC:这是金融领域中常用的一种价格表示方法,它代表开盘价(Open)、最高价(High)、最低价(Low)和收盘价(Close)。在金融市场中,尤其是在股票、期货、外汇等交易领域,OHLC 数据被广泛用于分析价格走势和市场行为。通过观察一段时间内的 OHLC 数据,可以了解资产在特定时间段内的价格波动范围、趋势以及市场的活跃程度。


二、分析(Analysis)

       ​​​​​​​观察 OHLC 数据的价格走势,你会发现价格之间的差距有时很大,有时很小。例如,在 2024 年 5 月左右,你可以看到当日最高价达到峰值,而收盘价接近开盘价。这种价格走势可能为交易者带来日内所需的利润。

       ​​​​​​​价格通常是非稳态的,因此需要进行一些转换才能使其成为稳态。我们可以通过以下转换计算得出转换变量。

       ​​​​​​​通过计算每个 OHLC 变量之间的对数收益率,变量会变得更加静态。这可以通过运行增强型 Dickey Fuller 检验来验证。

Augmented Dickey Fuller Test results:

Random variable log range is Stationary
 p-value is 5.528319339238798e-06

Random variable open close is Stationary
 p-value is 0.0

Random variable after market is Stationary
 p-value is 1.4682759344310902e-17

Random variable open low is Stationary
 p-value is 8.112066684592019e-07

Random variable open high is Stationary
 p-value is 8.751210005436563e-08

       ​​​​​​​从折线图中可以看出,没有出现普遍的趋势。通过 ADF 检验,我们得到所有变量的 p 值都小于 0.05,这表明时间序列现在是静态的。既然变量是静态的,那么它们就非常适合建模和分析。

       ​​​​​​​当把对数收益率与对数范围、开盘低点和开盘高点等变量绘制成图时,你会发现盘中价格有一些滑动的迹象,但最终又回到了原来的价格。对于能够实现盈利的美式跨式交易策略来说,了解这些信息是非常重要的。

       ​​​​​​​为了使用多元蒙特卡罗模拟对所有变量进行建模,我们需要了解它们的一些特征。首先是它们的分布情况,其次是它们之间的相关性。如果它们之间没有相关性,我们就可以对它们进行独立采样。如果它们之间存在相关性,我们就需要考虑它们之间的关系。通过下面的图表,我们可以更清楚地了解这一点。

       ​​​​​​​在处理“对数收益率”这类变量时,我使用“对数收益率”这个表述,因为这基本上就是我在处理 OHLC 变量之间的关系;它们的分布肥大的尾部。尾部是由于极端离群事件造成的。对于盘后和开盘收盘,这些变量的两端都有肥尾,因为其值可能为负,也可能为正。就这些变量而言,student-t 分布最为合适。另一方面,log range 和 open high 始终为正,而 open low 为负。这些分布会有偏度,指数分布或伽马分布更可能是最佳拟合。通过观察散点图,我们可以发现一些线性关系正在形成,这给我们一个信号,即我们不能简单地对变量进行独立模拟。

       ​​​​​​​从散点图和相关热图来看,开盘低点-开盘收盘和开盘高点-开盘收盘变量之间存在很强的线性关系。这在直觉上是有道理的,开盘高点越极端,开盘收盘变量就越有可能在交易日结束时倾向于更高的正收益。低开与收盘之间的反比关系也是如此。同时,没有一个变量与后市变量存在任何关系。

       ​​​​​​​根据上述信息,我们现在明白了在用多元方法建立模型时应如何处理这些变量。鉴于与盘后变量没有任何关系,可以对其进行单独取样。接下来,可以将开盘收盘作为开盘低点和开盘高点的自变量。由于它被视为自变量,因此也可以单独进行模拟。要模拟高开和低开变量,我们可以使用回归模型来模拟这些变量。

       ​​​​​​​利用开盘收盘价预测开盘最高价和开盘最低价有多种回归模型。简单的线性回归模型、多项式回归或基于上述散点图颜色协调的量化回归,使用开盘收盘百分位数排名。在这种情况下,当两个因变量的开盘收盘价接近 0 时,我们需要在线性模型中出现结构性中断或弯曲。为了简单起见,我们首先使用多项式回归模型。

       ​​​​​​​上图直观地显示了以开盘收盘价作为预测因子,对开盘最低价和开盘最高价变量的历史数据拟合多项式回归模型后的最佳拟合线。当我们绘制两个回归模型的残差时,可以得到下图。

       ​​​​​​​3 x 2 图形的第一行表示高开和低开的拟合多项式回归模型的误差分布。理想情况下,我们希望这些分布呈正态分布。但低开度是负数,而高开度是正数,因此分布显示出偏斜。第二行的 qq 图也显示了同样的情况。第三行是误差与实际值的对比图。同样,在对这些图进行回归分析时,我们希望看到散点图呈现零模式。然而,随着高开值的增加和低开值的减少,我们看到了一种扇形的性质。

       ​​​​​​​这表明,随着相应变量值的增减,可变性也在增减。虽然对于我们的回归模型来说,这些情况在学术上并不理想,但考虑到我将模拟这些值,我决定继续下去。此外,我还将通过从与上述误差拟合的 weibull 分布中采样,将噪声添加回预测值中。最终的回归模型如下所示。

       ​​​​​​​Betas (β) 0、1 和 2 是模型的系数。Epsilon (𝜖) 是一个从伽马分布中采样的随机变量,与训练模型的误差相拟合。

多元模拟的步骤如下:

  1. 对历史后市变量拟合 student t 分布,并模拟 n 个样本。
  2. 对历史开仓收仓变量拟合 student t 分布,并模拟 n 个样本。
  3. 以开盘收盘价为自变量,开盘最高价为因变量,拟合多项式回归模型。
  4. 计算模型在其所训练的历史数据上的误差,并拟合 Weibull 分布。
  5. 利用训练模型的系数和步骤 2 中获得的 n 个样本,计算出 n 个高开样本。
  6. 从步骤 4 中的误差分布中生成 n 个样本,产生一个误差随机变量。然后将步骤 5 中的高开随机变量与本步骤中生成的误差随机变量 OH + E 相加。
  7. 对于低电平开路,重复高电平开路的 3 至 6 步骤。

       ​​​​​​​执行以下步骤后,得出以下个体分布和联合分布。

       ​​​​​​​根据上述所有变量的配对图,将实际值与模拟值进行比较后发现,个体分布和联合分布都非常相似。


三、结论(Conclusion)

       ​​​​​​​从前面的单个分布和联合分布图可以看出,模拟多个变量的步骤非常有效。由于它比较接近,因此可以在多元蒙特卡罗模拟中使用这些步骤来模拟从当前价格算起 n 天后的 OHLC 价格。虽然效果不错,但仍有一些地方需要改进。首先,多项式回归可能不是最佳的拟合方法,另一种线性模型解决方案可能会产生更准确的结果。其次,这并不是一个适用于所有股票的稳健解决方案,它只特别适用于 UBER。其他股票的计算变量可能有不同的关系和分布。本文观点总结如下:

多元蒙特卡罗模拟是一种有效的方法来预测股票价格走势,尤其是在无法准确预测所有市场因素的情况下。

对数收益率的转换和稳态性检验对于建立模型至关重要,这有助于确保模型的准确性和可靠性。

价格行为的分析可以揭示交易策略中的利润机会,特别是对于日内交易者和使用美式跨式交易策略的投资者。

选择合适的概率分布来拟合股票价格数据是模型建立的关键,如 student-t 分布、伽马分布和Weibull分布。

多项式回归模型在某些情况下可能不是最佳选择,需要根据具体情况考虑其他线性模型解决方案。

模拟结果表明,通过多元模拟可以得到与实际数据相似的分布,这为评估交易策略的成功率提供了依据。

对于不同的股票,可能需要定制特定的价格行为模型,因为每只股票的变量关系和分布特性可能都不相同。


本文内容仅仅是技术探讨和学习,并不构成任何投资建议。

转发请注明原作者和出处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2210395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【原创】java+springboot+mysql法律咨询网系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

loadlocale.c:130: _nl_intern_locale_data: failed已放弃 (核心已转储)]问题

在进行交叉编译cortex-a9架构时,出现以上错误。 问题描述: 在使用 arm-none-linux-gnueabi-gdb 进行 Cortex-A9 架构交叉编译调试时,出现如下错误: arm-none-linux-gnueabi-gdb: loadlocale.c:130: _nl_intern_locale_data: As…

新型物联网电力数据采集器 智能网关通讯协议有哪些?

随着智能化技术的快速发展,电气监测与管理在各个域的应用愈发重要,在物联网(IoT)应用的发展中,网关扮演着至关重要的角色。它作为连接设备与云平台或数据中心的桥梁,负责数据的收集、处理和传输。网关不仅支…

鸿蒙开发之ArkUI 界面篇 三十四 容器组件Tabs二 常用属性

barPosition:位置开头或结尾,vertical 水平或者垂直,scrollable手势滑动切换,animationDuration 滑动动画时间。BarPosition.Start 效果如下图: BarPosition.End 效果如下图: 如果显示在左边,使用的是vertical属性,下图&#xff0…

Chrome(谷歌)浏览器 数据JSON格式美化 2024显示插件安装和使用

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 没有美化的格式浏览器展示 美化之后效果图 安装流程 下载地址 https://github.com/gildas-lormeau/JSONVue 点击下载 下载成功,如图所示 解压文件 添加成功,如图所示 通过浏览器…

密码学算法概览大全

区块链密码学 目录 对称密码算法 1. 流密码2. 分组密码3. 对称密码算法小结4. 对称密码算法在区块链中的应用 非对称密码算法 1. RSA2. ECC3. 非对称密码算法小结4. 非对称密码算法在区块链中的应用 Hash函数 1. SHA2. RipeMD-1603. Hash函数在区块链中的应用 PKI 1. PKI组成2…

STM32——USART原理及应用

1.什么是USART? 1.1 基本概念 USART英文全称:universal asynchronous receiver and transmitter ,翻译过来就是:通用同步异步收/发器。USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧…

Python | Leetcode Python题解之第476题数字的补数

题目&#xff1a; 题解&#xff1a; class Solution:def findComplement(self, num: int) -> int:highbit 0for i in range(1, 30 1):if num > (1 << i):highbit ielse:breakmask (1 << (highbit 1)) - 1return num ^ mask

NVIDIA Bluefield DPU上的启动流程4个阶段分别是什么?作用是什么?

文章目录 Bluefield上的硬件介绍启动流程启动流程:eMMC中的两个存储分区:ATF介绍ATF启动的四个阶段:四个主要步骤:各个阶段依赖的启动文件一次烧录fw失败后的信息看启动流程综述Bluefield上的硬件介绍 本文以Bluefield2为例,可以看到RSHIM实际上是Boot相关的集合。也能看…

QT 连接SQL SEVER 之后无法读取浮点和整型

1、ODBC Driver 的版本要对应上。 if (!strDbDirPath.isEmpty())m_strDbDirPath strDbDirPath;m_strDatabaseName strDatabaseName;if (m_database.isOpen() || m_bConnected){qDebug() << QString("QODBC:已经连接成功&#xff01;") << "\n&quo…

八、Linux之实用指令

1、指定运行级别 1.1 基本介绍 运行级别说明 0 &#xff1a;关机 1 &#xff1a;单用户【找回丢失密码】 2&#xff1a;多用户状态没有网络服务&#xff08;用的非常少&#xff09; 3&#xff1a;多用户状态有网络服务&#xff08;用的最多&#xff09; 4&#xff1a;系统未使…

《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版分片集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面向不通的客户安装我们的业务系统&…

【自动驾驶汽车通讯协议】GMSL通信技术以及加串器(Serializer)解串器(Deserializer)介绍

文章目录 0. 前言1. GMSL技术概述2. 为什么需要SerDes&#xff1f;3. GMSL技术特点4.自动驾驶汽车中的应用5. 结论 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但是内容可能存在不准…

图解 微信开发者工具 小程序源码 调试、断点标记方法 , 微信小程序调试器,真机调试断点调试方法,小程序网络API请求调试方法 总结

在我们使用微信开发者工具进行微信小程序开发的时候&#xff0c;在这个微信开发者工具的代码编辑框里面我们是无法像使用vscode, idea等IDE工具时那样直接对代码打断点进行调试&#xff0c; 原因是小程序实际上他就是一个web浏览器应用的包装, 在其内部使用的还是类似chrome的…

mac 桌面版docker no space left on device

报错信息 docker pull镜像时报&#xff1a; failed to register layer: Error processing tar file(exit status 1): write /home/admin/oceanbase_bak/bin/observer: no space left on device 解决 增加 docker 虚拟磁盘大小。 调整完点击重启即可。

如何使用vscode的launch.json来debug调试

1、创建一个launch.json文件 选择Python Debugger&#xff0c;再选择Python文件&#xff0c;创建处理如下 默认有下面五个参数 "name": "Python Debugger: Current File","type": "debugpy","request": "launch"…

使用OpenCV处理视频并显示灰度图像

目录 导入OpenCV库打开视频文件定义显示图像的函数检查视频是否成功打开并读取第一帧循环读取视频帧释放资源完整代码 导入OpenCV库 import cv2 # 导入OpenCV库打开视频文件 注意&#xff1a;视频随便去搜一个就可以 我用的是风景的 # 打开视频文件 vc cv2.VideoCapture(b…

ubuntu18.04系统中图形化界面

一、Ubuntu 18.04 中&#xff0c;使用 GDM 作为默认的图形用户界面&#xff08;GUI&#xff09;管理器。GDM 是 GNOME Display Manager 的缩写&#xff0c;它是用于 Ubuntu 的显示管理器&#xff0c;负责处理登录和会话管理。 通过命令行重启 Ubuntu 18.04 上的图形界面服务&am…

本地部署Ollama+千文大模型,docker openui访问

文章目录 前言 1. 运行Ollama 2. 安装Open WebUI 2.1 在Windows系统安装Docker 2.2 使用Docker部署Open WebUI 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具&#xff0c;并安装Open WebUI结合cpolar内网穿透软件&#xff0c;实现在公网环境也能访问…

回答网友从内存中执行函数的一个问题

事情是这样的 网友想调用dll&#xff0c;但是不想把dll释放到硬盘&#xff0c;想放在内存中。 俺的回答是&#xff1a;是从内存中&#xff0c;根据pe结构确定call的地址。 例子 先准备一个dll library dll; {$R *.res} function getValue(p1, p2: integer): integer; s…