张春 发表于 3 天前

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




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

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

该项目分两部门完成:

[*]第一部门涉及为几何布朗运动编写代码,并查抄和验证它是否工作。这是使用 Python 中的几个函数完成的,并使用迭代设置将后续股票价格建模为马尔可夫链,给定初始起始价格 S0。验证过程包括运行多个模拟或随机游走样本,然后查抄结果分布,以查看股票价格、收益和波动性是否满足某些属性和假设。
[*]第二阶段涉及探索,将模型实际应用于实际股票价格,并使用耐克股票的真实股票数据举行回测。模拟是通过获取收益率 μ 和波动率 σ 的样本值并观察股票价格演变的模拟数据和真实数据之间的相干水平来完成的。
模拟需要大约 10-15 分钟才能完全运行。请注意,对模拟结果的所有表明都是通过表明价格水平和收益率的结果分布的均值和方差等参数来完成的。
假设

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

[*]S0 - 初始股票价格
[*]St - 时间的股票价格,t
[*]μ - 在特定时间段内均匀的股票收益(漂移)率
[*]σ - 在特定时间段内均匀的股票波动率(标准差)
[*]dt - 模拟的时间步长,对应于一天内股票价格采样的频率
[*]N - 模拟的总天数。
[*]r - 无风险利率,任何人都可以借/贷
还对股票市场/价格做出了以下假设。虽然这些假设确实有助于大大简化模型,但它们非常现实,有助于在理想情况下制定模型。

[*]股票价格遵照马尔科夫过程,即是无记忆的,随后的股票价格仅取决于当前代价,而不取决于任何先前的代价。
[*]与 N 相比,考虑的时间步长 dt 较短,即 Ndt>>1
[*]市场完备高效,不存在套利机会。
[*]没有股息、生意业务本钱或税收考虑。
维纳过程和几何布朗运动

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

[*]所有的 Δz 都是统计独立的。
[*]dz = εdt
其中 ϵ 来自正态分布
https://i-blog.csdnimg.cn/img_convert/655ed8d0523a6c337c05d80664137ef4.png
通过将漂移项 a(x,t)dt 添加到随机过程 dz 上,可以将维纳过程进一步推广到 Ito 过程。 
https://i-blog.csdnimg.cn/img_convert/ad0686ba48179bcda99f748dbf290777.png
对于股票价格,上述方程是 Ito 过程,也称为几何布朗运动,描述了随时间的随机变化。请注意,μ 和 σ 分别是瞬时漂移和标准偏差率。S 遵照一个受乘性噪声影响的随机过程。这里还需要注意的是,几何布朗运动模型制止了负股票价格的问题。
为股票价格的办理方案建模

上述随机微分方程 (SDE) 具有以下情势的解析解:
https://i-blog.csdnimg.cn/img_convert/4e15d8856b2b44ffc571e98e7f915ef5.png
请注意,在上述等式中,常数 μ 和 σ 分别对应于股票价格的百分比漂移(收益)和百分比波动(标准差)率。Wt 指的是由 dz=ϵdt 给出的维纳过程,如上所述。该解方程用于以下列方式迭代盘算每个时间步的 St:
https://i-blog.csdnimg.cn/img_convert/f54f4ed35a720c6415e89b62de12f4d1.png
这里,t 是盘算的时间步长,每个 St 仅取决于之前的起始价格 St−1,这是布朗运动模型所要求的,由于它是一个马尔可夫过程。请注意,通过选择一个小的时间步长,我们可以接近连续时间的极限。
因此,给定某个时间步长,随后的每个股票价格 St 完全由三个参数描述:

[*]初始“开始”价格,St−1
[*]百分比收益(漂移)率,μ
[*]波动率或标准偏差率,σ
下面的代码实现了上面描述的迭代过程。时间步长由 dt 给出,对应于对股票价格举行采样的频率,N 是模拟运行的总天数。
#几何布朗运动模型#使用mu=收益率#sigma=波动率#dt=时间步长#Si=每个时间段的初始(开始)价格值#价格和收益的时间演变#使用布朗运动模型来生成N天(时间段)的价格列表def gices(mu, sigma, dt, Si, N):

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

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

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

        #注意price\是每次迭代的Si        pr\_arr\ = geoeti\_bown(mu, sigma, dt, price_arr\)运行单个模拟/步行

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

[*]股票价格的演变,St 作为 N 的函数
[*]股票价格水平的分布,绘制为直方图。
[*]收益和对数收益的分布,也绘制为直方图。
在随后的部门中举行了多次模拟,以实际验证模型的精确性。
#运行单个模拟以检查功能#使用 mu、sigma 和 Si 的样本值进行测试#调用函数Slst, RitRlolist = gpes(mu, sigma, dt, Si, N)#绘制结果plt.figure(figsize=(15,5))https://i-blog.csdnimg.cn/img_convert/3f7653f62cd851bc97fbd5cfd6934f93.png
https://i-blog.csdnimg.cn/img_convert/888c75fd2d65a424162c6f11e48dd842.png
https://i-blog.csdnimg.cn/img_convert/3f736335fd1c6c30e2689543993be494.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))点击标题查阅往期内容
https://i-blog.csdnimg.cn/img_convert/015f3f0debf6832040f1aa481c722433.png
R语言几何布朗运动GBM模拟股票价格优化建立期权定价用概率加权收益曲线可视化
https://csdnimg.cn/release/phoenix/outside_default.png
左右滑动查看更多
https://csdnimg.cn/release/phoenix/outside_default.png
01
https://i-blog.csdnimg.cn/img_convert/3319fcd051ac4b4d53e2b5373bd444d1.png
02
https://i-blog.csdnimg.cn/img_convert/2bddc69c2b78437e109fa6cf8f4da610.png
03
https://i-blog.csdnimg.cn/img_convert/dbf5a89f1ec7c3003b7b8319f1e13ed3.png
04
https://i-blog.csdnimg.cn/img_convert/d36e7d30c59ea197666bf13c53c8fc64.png
查抄和测试多个模拟的代码

上面的代码包含一个函数,可以为几何布朗运动描述的随机游走运行多个模拟。还编写了另一个盘算给定输入数组的均匀收益和波动率水平的函数。这两个函数都用于天生几个模拟/随机游走,如上图所示。
上图显示了在相同起始价格、S0=100 和收益率和波动率、μ=0.2 和 σ=0.07 下运行的 500 次模拟图。使用的时间步长为 dt=0.01,体现天天对股票价格举行频繁抽样。每条线代表使用前面描述的几何布朗运动模型建模的样本随机游走。然后通过绘制股票价格、收益和标准差的分布来分析使用这些模拟天生的数据。然后分析这些价格水平、收益和波动率的分布,以查抄其精确性和划一性。
从下面的第一张图中可以看出,价格水平遵照近似对数正态分布。这实际上是一个预期的结果。解,St 是一个对数正态分布的随机变量,其期望值和方差由下式给出:
https://i-blog.csdnimg.cn/img_convert/93a4b5e22e4a6d366b486eaf567b6d0e.png
从下面的第一幅图中可以看出,对于 sim_count = 500 次模拟,价格水平确实近似于对数正态分布,均匀值约为 200。使用 tats.lmfit 函数丈量的均值和方差也与以上定义的值在合理的误差范围内。对于使用上面给出的参数的模拟运行,它们被盘算为:
https://i-blog.csdnimg.cn/img_convert/365e0d6ed24a0f130fcf7e0aa3628306.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))https://i-blog.csdnimg.cn/img_convert/407a6c4b3811d3b459c5ca5307f0eaec.png
https://i-blog.csdnimg.cn/img_convert/de58451aca0deb0a3c32158b9f39a393.png
https://i-blog.csdnimg.cn/img_convert/59852a19570b14078e9e2bf20e8f98d6.png
print(lono_ean)print(np.sqrt(loomvr))https://i-blog.csdnimg.cn/img_convert/ccec2b8fa7c113d891fc8f5a17cbeec8.png
探索:使用真实股票数据测试模型

一旦模型被查抄为正常工作,它就会用真实的库存数据举行测试。耐克 (NKE) 2013-2015 年的股价被用来回测该模型。并且使用上述几何布朗运动模型运行 Monte Carlo 模拟。
以下值用于在两年期间使用 NKE 的真实数据测试代码。假设一年大约有 250 个工作日,N = 500 体现大约两年的时间框架。通过将数据导入单独的 .csv 文件并对股票价格的收益率和标准差举行所需的盘算来盘算收益率和波动率。

[*]制止 2013 年 1 月 2 日,起始价格 S0 为 52.4。两年期末的预期价格 St 预计在 98.6 左右。
[*]两年年化收益率为 μ=0.13,这是使用雅虎财履历史记录天生的价格列表盘算得出的。
[*]两年年化波动率也从价格中获得,σ=0.05。
以下代码调用函数以通过几何布朗运动模型天生随机游走。
#使用这些价格计算回报率和波动率。pprint(k.geical('2013-01-01', '2015-01-01'))https://i-blog.csdnimg.cn/img_convert/db4f9b0a26b1042b8c6ba04dc49a3e2f.png
#使用输入参数的样本值运行多个模拟dt = 0.01sim_count = 500#调用函数并运行模拟prie, mu_arr, sigrr = geiple(mu, sgma, dt, Si, N, icont)

在 \ 中:lorm_ean = Si\*np.exp(mu\*N*dt)https://i-blog.csdnimg.cn/img_convert/a6faf042d0d8cf50b2ff7663df1776b1.pnghttps://i-blog.csdnimg.cn/img_convert/008d41507b3ac0bfd2b9437da0d6d56e.png
表明模拟结果

从上图中天生的随机游走可以看出,我们在这里使用的模型乍一看似乎产生了精确方向和近似幅度的价格演变。由于它是一个随机游走模型,重要的是要注意,结果只能表明为价格水平或团体收益分布,而不是单个模拟。下面的代码和数字为价格水平和收益率和波动率天生所需的分布图。
首先需要注意的是,使用等式 E=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")https://i-blog.csdnimg.cn/img_convert/0d49d0e8034ebcfa1ca798e7eef389db.png
https://i-blog.csdnimg.cn/img_convert/36027c1083b5825427cb07152a65507b.png
https://i-blog.csdnimg.cn/img_convert/6f57e55ffb1568962dfd3b043407b1ec.png
评论和结论

从天生的模拟结果可以看出,几何布朗运动模型可以很好地使用上面讨论的随机过程来模拟股票价格。该模型首先被查抄以满足几何布朗运动的特性,然后用真实的股票价格数据举行回测。NKE 2013-2015 年的股票价格用于盘算 μ 和 σ 的值,然后用于运行该期间的模拟。股票价格的模拟结果和真实代价在 5% 的误差范围内相似。
https://i-blog.csdnimg.cn/img_convert/0a2e6ef8a849bc99d15940a4be937ba7.jpeg
本文中分析的数据、代码分享到会员群,扫描下面二维码即可加群! 

https://i-blog.csdnimg.cn/img_convert/651ff99fe082f54693283a2073754d49.png
https://i-blog.csdnimg.cn/img_convert/3944be795c0e3ad12bdcc2917ac0bbde.png
点击文末“阅读原文”
获取全文完备资料。
本文选自《PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据》。
https://i-blog.csdnimg.cn/img_convert/4db978fb8dbe006d4152aa0bcbb9af96.jpeg
https://i-blog.csdnimg.cn/img_convert/35295e00329a128e91c17ea1c8fd6995.png
点击标题查阅往期内容
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模型和金融时间序列案例
https://i-blog.csdnimg.cn/img_convert/11334ae4a97e7fb506546bee4ef842ae.png
https://i-blog.csdnimg.cn/img_convert/1152777a1fca625ee123257d3d1e0922.jpeg
https://i-blog.csdnimg.cn/img_convert/e909b00b4f01d370dfb1dd958012d299.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: PYTHON用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据