PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据...

news2025/1/16 20:03:09

原文链接:http://tecdat.cn/?p=27099 

金融资产/证券已使用多种技术进行建模。该项目的主要目标是使用几何布朗运动模型和蒙特卡罗模拟来模拟股票价格。该模型基于受乘性噪声影响的随机(与确定性相反)变量点击文末“阅读原文”获取完整代码数据)。

相关视频

该项目分两部分完成:

  1. 第一部分涉及为几何布朗运动编写代码,并检查和验证它是否工作。这是使用 Python 中的几个函数完成的,并使用迭代设置将后续股票价格建模为马尔可夫链,给定初始起始价格 S0。验证过程包括运行多个模拟或随机游走样本,然后检查结果分布,以查看股票价格、收益和波动性是否满足某些属性和假设。

  2. 第二阶段涉及探索,将模型实际应用于实际股票价格,并使用耐克股票的真实股票数据进行回测。模拟是通过获取收益率 μ 和波动率 σ 的样本值并观察股票价格演变的模拟数据和真实数据之间的相关程度来完成的。

模拟需要大约 10-15 分钟才能完全运行。请注意,对模拟结果的所有解释都是通过解释价格水平和收益率的结果分布的均值和方差等参数来完成的。

假设

此项目中使用了以下变量和符号列表:

  1. S0 - 初始股票价格

  2. St - 时间的股票价格,t

  3. μ - 在特定时间段内平均的股票收益(漂移)率

  4. σ - 在特定时间段内平均的股票波动率(标准差)

  5. dt - 模拟的时间步长,对应于一天内股票价格采样的频率

  6. N - 模拟的总天数。

  7. r - 无风险利率,任何人都可以借/贷

还对股票市场/价格做出了以下假设。虽然这些假设确实有助于大大简化模型,但它们非常现实,有助于在理想情况下制定模型。

  1. 股票价格遵循马尔科夫过程,即是无记忆的,随后的股票价格仅取决于当前价值,而不取决于任何先前的价值。

  2. 与 N 相比,考虑的时间步长 dt 较短,即 Ndt>>1

  3. 市场完整高效,不存在套利机会。

  4. 没有股息、交易成本或税收考虑。

维纳过程和几何布朗运动

维纳过程(也称为布朗运动)是一个具有连续变量和连续时间的马尔可夫过程。对于随机变量 z,它有两个重要的性质:

  1. 所有的 Δz 都是统计独立的。

  2. dz = εdt

其中 ϵ 来自正态分布

2ea03ab9193a120e9edc5441ac257ba2.png

通过将漂移项 a(x,t)dt 添加到随机过程 dz 上,可以将维纳过程进一步推广到 Ito 过程。 

66b95c51ed8838f540102643a655da38.png

对于股票价格,上述方程是 Ito 过程,也称为几何布朗运动,描述了随时间的随机变化。请注意,μ 和 σ 分别是瞬时漂移和标准偏差率。S 遵循一个受乘性噪声影响的随机过程。这里还需要注意的是,几何布朗运动模型避免了负股票价格的问题。

为股票价格的解决方案建模

上述随机微分方程 (SDE) 具有以下形式的解析解:

7ee73138adc28806a4b52a5f8ba47595.png

请注意,在上述等式中,常数 μ 和 σ 分别对应于股票价格的百分比漂移(收益)和百分比波动(标准差)率。Wt 指的是由 dz=ϵdt 给出的维纳过程,如上所述。该解方程用于以下列方式迭代计算每个时间步的 St:

178e954c0441f47b51b010ec7319d9ec.png

这里,t 是计算的时间步长,每个 St 仅取决于之前的起始价格 St−1,这是布朗运动模型所要求的,因为它是一个马尔可夫过程。请注意,通过选择一个小的时间步长,我们可以接近连续时间的极限。

因此,给定某个时间步长,随后的每个股票价格 St 完全由三个参数描述:

  1. 初始“开始”价格,St−1

  2. 百分比收益(漂移)率,μ

  3. 波动率或标准偏差率,σ

下面的代码实现了上面描述的迭代过程。时间步长由 dt 给出,对应于对股票价格进行采样的频率,N 是模拟运行的总天数。

#几何布朗运动模型#使用mu=收益率#sigma=波动率#dt=时间步长#Si=每个时间段的初始(开始)价格值#价格和收益的时间演变#使用布朗运动模型来生成N天(时间段)的价格列表def gices(mu, sigma, dt, Si, N):

    pirr = np.zeros(N) #初始化一个长度为N的向量来存储价格值    pr_r\[0\] = Si #存储第一个价格值  

    retrr = np.zeros(N) #初始化向量来存储返回值    

    #还可以计算连续N之间的价格回报率    for i in range (1,N):

        #注意price\[i-1\]是每次迭代的Si        pr\_arr\[i\] = geoeti\_bown(mu, sigma, dt, price_arr\[i-1\])

运行单个模拟/步行

这部分代码只是调用上面编写的函数并绘制结果。给出了收益率和波动率、起始价格和时间步长的样本值。以下数字按出现顺序显示:

  1. 股票价格的演变,St 作为 N 的函数

  2. 股票价格水平的分布,绘制为直方图。

  3. 收益和对数收益的分布,也绘制为直方图。

在随后的部分中进行了多次模拟,以实际验证模型的正确性。

#运行单个模拟以检查功能#使用 mu、sigma 和 Si 的样本值进行测试#调用函数Slst, RitRlolist = gpes(mu, sigma, dt, Si, N)#绘制结果plt.figure(figsize=(15,5))

eda98bedc795537e6a70511c6388f224.png

e719bef7f7524a7cdeebc98de61eae2e.png

356ff3d044fc5d44dd555ce24917c4de.png

#用于获取mu\_multiple和sigma\_multiple#将价格数组作为输入并返回 mu 和 sigmadef v\_tun(price\_array):

    mu_single = 0    sgm_sigle = 0    

    #计算模拟的平均收益率,mu和平均波动率,sigma    musigle = np.mean(mu_temp)

    sigmsile = np.std(mu_temp)

    #Monte Carlo 模拟几何布朗运动演化#运行几个模拟来生成几个可能的价格演变数组#用它来计算平均波动率和回报率def gmlie(mu, sigma, dt, Si, N, sim_count):

    cacies = np.zeros(shape=(N,sim_count)) #创建一个数组来存储模拟值    #对于 alc_res 数组,我们只关心值    #创建数组来存储每个的mu和sigma的值    m\_mutple = np.zeros(sim\_count)

    sigmmiple = np.zeros(sim_count)

    

    vl = np.linspace(0,N-1,N)

    #运行模拟并绘制每个价格演变的结果    plt.figure(figsize=(20,20))

点击标题查阅往期内容

79507c74b1092a45f5405c430a938d74.png

R语言几何布朗运动GBM模拟股票价格优化建立期权定价用概率加权收益曲线可视化

outside_default.png

左右滑动查看更多

outside_default.png

01

6fe9ab7560e9d4f850bace825780e09b.png

02

76bf530a96ced9536fcc308593897fae.png

03

f47395d3c56275869077fb337684641e.png

04

ce6c5c5493f1fb7613e836c0b7f7f304.png

检查和测试多个模拟的代码

上面的代码包含一个函数,可以为几何布朗运动描述的随机游走运行多个模拟。还编写了另一个计算给定输入数组的平均收益和波动率水平的函数。这两个函数都用于生成几个模拟/随机游走,如上图所示。

上图显示了在相同起始价格、S0=100 和收益率和波动率、μ=0.2 和 σ=0.07 下运行的 500 次模拟图。使用的时间步长为 dt=0.01,表示每天对股票价格进行频繁抽样。每条线代表使用前面描述的几何布朗运动模型建模的样本随机游走。然后通过绘制股票价格、收益和标准差的分布来分析使用这些模拟生成的数据。然后分析这些价格水平、收益和波动率的分布,以检查其正确性和一致性。

从下面的第一张图中可以看出,价格水平遵循近似对数正态分布。这实际上是一个预期的结果。解,St 是一个对数正态分布的随机变量,其期望值和方差由下式给出:

2344826f32db0a684b1cc77427fab474.png

从下面的第一幅图中可以看出,对于 sim_count = 500 次模拟,价格水平确实近似于对数正态分布,平均值约为 200。使用 tats.lmfit 函数测量的均值和方差也与以上定义的值在合理的误差范围内。对于使用上面给出的参数的模拟运行,它们被计算为:

ae7f2249c7fa67af486b2adfc8aed56d.png

下面的第二张图显示了上面运行的模拟的收益率分布。可以很容易地观察到,收益呈正态分布,平均值约为 0.15,这是模拟中 μ 的输入值。这种收益率的正态分布也是布朗运动模型的预期结果。下面的第三张图显示了标准偏差率的分布,也可以观察到其呈正态分布,平均值约为 0.07,这是模拟的 σ 输入值。

因此,上述讨论验证了几何布朗运动编码模型确实按预期工作,并生成与模型的属性和假设相对应的结果。自相似性也被证明适用于模型,其中不同的时间步长 dt 与调整后的 μ 和 σ 一起使用,以产生相似的价格水平和收益分布。这是模型的另一个预期结果,因为布朗运动在不同尺度上表现出分形行为。

#绘制价格水平和收益的分布以检查代码的有效性#价格水平应根据几何布朗运动模型呈对数正态分布#Retu ate 和 Vlatiiy 应该是正态分布的#Plot 价格水平plt.figure(figsize=(15,5))#与下面给出的均值和标准差的对数正态分布进行比较logorman = Si\*np.exp(mu\*N*dt)logmvar = (Si\*\*2)\*np.exp(2\*mu\*N\*dt)\*(np.exp((sigma\*\*2)\*N*dt)-1)plt.plot(bns,lonm_dst,"g",lw=5) #绘制预期的对数正态密度分布#绘制收益和波动率分布plt.figure(figsize=(15,5))

48d927bb26bf666a73180d349647b3ac.png

b3a66540283612eaef00b2c297ca0039.png

69f532f4a233d0d6f7fcab1340c9657f.png

print(lono_ean)print(np.sqrt(loomvr))

af49b00249bfb1c7643651709148c1fb.png

探索:使用真实股票数据测试模型

一旦模型被检查为正常工作,它就会用真实的库存数据进行测试。耐克 (NKE) 2013-2015 年的股价被用来回测该模型。并且使用上述几何布朗运动模型运行 Monte Carlo 模拟。

以下值用于在两年期间使用 NKE 的真实数据测试代码。假设一年大约有 250 个工作日,N = 500 表示大约两年的时间框架。通过将数据导入单独的 .csv 文件并对股票价格的收益率和标准差进行所需的计算来计算收益率和波动率。

  1. 截至 2013 年 1 月 2 日,起始价格 S0 为 52.4。两年期末的预期价格 St 预计在 98.6 左右。

  2. 两年年化收益率为 μ=0.13,这是使用雅虎财经历史记录生成的价格列表计算得出的。

  3. 两年年化波动率也从价格中获得,σ=0.05。

以下代码调用函数以通过几何布朗运动模型生成随机游走。

#使用这些价格计算回报率和波动率。pprint(k.geical('2013-01-01', '2015-01-01'))

f4694a904b04e335812dcb9f914706a8.png

#使用输入参数的样本值运行多个模拟dt = 0.01sim_count = 500#调用函数并运行模拟prie, mu_arr, sigrr = geiple(mu, sgma, dt, Si, N, icont)

在 \[29\] 中:lorm_ean = Si\*np.exp(mu\*N*dt)

5e78c271ac189802eeb9d31a3ac4c3e2.png56b40e5dd1e890f68e9aabdb639440e1.png

解释模拟结果

从上图中生成的随机游走可以看出,我们在这里使用的模型乍一看似乎产生了正确方向和近似幅度的价格演变。由于它是一个随机游走模型,重要的是要注意,结果只能解释为价格水平或整体收益分布,而不是单个模拟。下面的代码和数字为价格水平和收益率和波动率生成所需的分布图。

首先需要注意的是,使用等式 E[St]=S0e(μNt) 的对数正态分布价格水平的计算平均值为 100.374。这位于真实值 98.6 的 5% 误差范围内,是使用 500 次模拟生成的。

其次,可以看出几何布朗运动的所有性质都得到满足——价格水平服从对数正态分布,收益率和波动率正态分布,均值对应于输入参数值。

请注意,模拟还针对其他时间范围和不同的股票价格运行,平均而言,该模型显示的值在圣路易斯真实价值的 10% 以内。

#绘制价格水平的分布并返回以检查真实数据的代码#价格水平应根据几何布朗运动模型呈对数正态分布#Return Rate 和 Volatility 应该是正态分布的#Plot 价格水平plt.hist(prestiple,bins=100,normed=1,label="R")#与下面给出的均值和标准差的对数正态分布进行比较lognorm_mean = Si\*np.exp(mu\*N*dt)lognorm_var = (Si\*\*2)\*np.exp(2\*mu\*N\*dt)\*(np.exp((sigma\*\*2)\*N*dt)-1)#绘制预期的对数正态密度分布#绘制收益和波动率分布plt.hist(mu_arr,bins=100,normed=1,label="R")

63bb80b557f0cbb98ffadb728f20b8b2.png

90c195784b3f12d0771103884d317c98.png

86956f9f704933ab44a9cf5cb04725c1.png

评论和结论

从生成的模拟结果可以看出,几何布朗运动模型可以很好地使用上面讨论的随机过程来模拟股票价格。该模型首先被检查以满足几何布朗运动的特性,然后用真实的股票价格数据进行回测。NKE 2013-2015 年的股票价格用于计算 μ 和 σ 的值,然后用于运行该期间的模拟。股票价格的模拟结果和真实价值在 5% 的误差范围内相似。


533cd37c84efbaedab5b3699d9a82a0f.png

点击文末“阅读原文”

获取全文完整资料。

本文选自《PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据》。

点击标题查阅往期内容

R语言做复杂金融产品的几何布朗运动的模拟

MATLAB用COPULA模型进行蒙特卡洛(MONTE CARLO)模拟和拟合股票收益数据分析

python中的copula:Frank、Clayton和Gumbel copula模型估计与可视化

R语言中的copula GARCH模型拟合时间序列并模拟分析

matlab使用Copula仿真优化市场风险数据VaR分析

R语言多元Copula GARCH 模型时间序列预测

R语言Copula函数股市相关性建模:模拟Random Walk(随机游走)

R语言实现 Copula 算法建模依赖性案例分析报告

R语言ARMA-GARCH-COPULA模型和金融时间序列案例

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言COPULA和金融时间序列案例

matlab使用Copula仿真优化市场风险数据VaR分析

matlab使用Copula仿真优化市场风险

R语言多元CopulaGARCH模型时间序列预测

R语言Copula的贝叶斯非参数MCMC估计

R语言COPULAS和金融时间序列

R语言乘法GARCH模型对高频交易数据进行波动性预测

R语言GARCH-DCC模型和DCC(MVT)建模估计

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测

R语言时间序列GARCH模型分析股市波动率

R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测

matlab实现MCMC的马尔可夫转换ARMA - GARCH模型估计

Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模拟进行股价预测

使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略

R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模

R语言股票市场指数:ARMA-GARCH模型和对数收益率数据探索性分析

R语言多元Copula GARCH 模型时间序列预测

R语言使用多元AR-GARCH模型衡量市场风险

R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格

R语言用Garch模型和回归模型对股票价格分析

GARCH(1,1),MA以及历史模拟法的VaR比较

matlab估计arma garch 条件均值和方差模型

R语言ARMA-GARCH-COPULA模型和金融时间序列案例

91e724be8bc4848ae4362bfb297af8af.png

a384c8ad80bf13d4eb87590fbc7d5a74.jpeg

3723d28f15983c907bd12f5b62382767.png

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

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

相关文章

【 医学影像| 数据预处理】

影像读取及预处理:预处理后的数据集建议保存在本地,可以减少训练时的部分资源消耗。里面提到了归一化的 对分割的一些理解:基于深度学习来做医学图像处理,主要的工作集中在了数据预处理部分:深入理解医学图像的格式和特…

GLAD:体全息

概述 自从伽伯1948年提出全息术后,光学全息术已经被广泛用于三维光学成像领域。体全息成像技术是采用体全息光栅作为成像元件对物体进行三维成像的技术。 1990年,由Barbastathis和Brady提出体全息成像技术,采用体全息光栅作为选择成像元件&#xf…

【微信小程序高频面试题——精选一】

微信小程序高频面试题小程序中如何进行接口请求?会不会跨域,为什么小程序的常用命令有哪些你认为微信小程序的优点是什么,缺点是什么微信小程序中的js和浏览器中的js以及node中的js的区别微信小程序中的数据渲染浏览器中有什么不同小程序中如…

全国所有地级市环境污染、企业、公路、固定资产、外商投资-最新面板数据

一、1990-2019年地级市面板数据 1、数据来源:中国城市统计年鉴、WIND数据库 2、时间跨度:2000-2019 3、区域范围:所有地级市 4、指标说明: 该份部分数据指标如下: 主营业务税金及附加(万元) 发明专利…

android-CHECK_xxx分析

android-CHECK_xxx 在android源码中有不少类似这样的用法,上图中就是检查获得的hal版本是否大于等于版本1_3,满足继续往下走,不满足则assert,并报错。 接下来就展开看看CHECK_xx家族: 用法 类型用法含义CHECK_EQ(val…

【SpringCloud】07 流量管理sentinel

sentinel Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 1. 微服务中的服务雪崩 服务雪崩效应是一种因“服务提供者的不可…

Springboot系列(二十二):如何纯文本转成.csv格式文件?|超级详细,建议收藏

一、前言🔥 不知道大家有咩有遇到这么个需求,给你一长串文本,要求你能导成excel格式展示数据,一时间我陷入了沉思,如果要常规转excel,最明显的一点就是固定表头名,然而并不是,这表头…

[附源码]计算机毕业设计springboot冬奥资讯系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【DL with Pytorch】第 2 章 : 神经网络的构建块

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

第一个Shader Graph

上篇我们用ShaderLab来实现了第一个Shader,但对于初学者也太复杂了,那有没有简单的方式来实现shader的操作呢? 现在我们来分享下ShaderGraph,可视化编程,如图所示 ShaderGraph介绍 ShaderGraph是2018年推出的,可以看下官网出的例子https://github.com/UnityTechnologi…

[Linux] 进程程序替换之实现一个简单的shell

进程程序替换替换原理替换函数实现一个简单的shell主要过程实现代码替换原理 用fork创建子进程后执行的是和父进程相同的程序,若要执行不同的代码分支,子进程往往要调用一种exec函数以执行另一个程序;当进程调用一种exec函数时,该…

信息论与编码:随参信道特性

文章目录随参信道数学模型的建立随参信道对信号传输的影响平坦性衰落及频率选择性衰落1.平坦性衰落Rayleigh 分布Rice 分布2.频率选择性衰落多径随参信道的时延扩展与相干带宽随参信道的多径时延特性多径信道的频域特性移动信道的多普勒扩展及相干时间1.多普勒扩展2.信道的相干…

nodejs大前端从入门到精通一

一、nodejs架构 nodejs核心组成Natives Modules 当前层内容由JS实现提供应用程序可直接调用库,例如fs、path、http等JS语文无法直接操作底层硬件设置 在和硬件交互的的桥梁,通过Builtin Modules(胶水层) 底层: V8:执行JS代码&…

Android——Theme和Style-由浅入深,全面讲解

1、官方详细解读 样式和主题背景 | Android 开发者 | Android Developers 2、应用场景 类似web设计中css样式。将应用设计的细节与界面的结构和行为分开。 样式style :应用于 单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性 主题theme&…

【仿牛客网笔记】项目发布与总结——单元测试、项目监控

在项目上线之前需做好单元测试,平时开发的过程中,每个功能也需要进行单元测试。 验证注解的作用,注解是修饰方法的。 每次调方法都是静态的 对test1和test2分别进行运行 通过类进行运行,运行所有的方法 测试帖子的Service&#x…

【序列召回推荐】(task5)多兴趣召回Comirec-DR

note: 多兴趣召回建模。Comirec论文中的提出的第一个模型:Comirec-DR(DR就是dynamic routing),阿里将用户行为序列的item embeddings作为初始的capsule,然后提取出多个兴趣capsules,即为用户的…

【Java】博客系统——详细解释+代码+详细注释(课设必过)

目录 前言 博客系统简要分析 一、数据库的设计 1.1 分析 1.2 代码实现(创建数据库和表) 二、封装数据库(JDBC代码的编写) 2.1、首先通过创建Maven项目,基于Small Tomcat部署 servlet; 2.2、封装数据…

telnet配置设备远程管理—eNSP

案例:给路由器配置远程管理,使一台路由器远程管理另一台。 所需设备:两台路由器,一根网线 图示 一、给两台设备配置IP地址 AR1(以下命令) a. sy b. int g0/0/0 c. ip add 1.1.1.1 24AR2 a. sy b. int g0/0…

区间信息维护与查询【线段树 】 - 原理1 线段树的基本操作

区间信息维护与查询【线段树 】 - 原理1 线段树的基本操作 线段树(segment tree)是一种基于分治思想的二叉树,它的每个节点都对应一个[L , R ]区间,叶子节点对应的区间L R 。每一个非叶子节点[L , R ]其左子节点的区间都为[L , (…

进程与线程的区别及联系

目录 1. 操作系统功能简介 2. 进程 2.1 认识进程 2.2 进程操作系统中如何管理 2.3 PCB如何描述 2.3.1 pid 2.3.2 内存指针 2.3.3 文件描述符表 2.3.4 进程调度相关属性 3. 内存管理 4. 线程 4.1 认识线程 4.2 进程与线程的关系 4.3 线程安全问题 1.操作系统功能简…