原文链接: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

其中 ϵ 来自正态分布

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

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

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

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

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

这里,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))

#用于获取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))

点击标题查阅往期内容

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

左右滑动查看更多

01

02

03

04

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

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

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

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

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

下面的第二张图显示了上面运行的模拟的收益率分布。可以很容易地观察到,收益呈正态分布,平均值约为 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))

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

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

一旦模型被检查为正常工作,它就会用真实的库存数据进行测试。耐克 (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'))

#使用输入参数的样本值运行多个模拟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)

解释模拟结果

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

首先需要注意的是,使用等式 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")

评论和结论

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


点击文末“阅读原文”

获取全文完整资料。

本文选自《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模型和金融时间序列案例

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

  1. Python蒙特卡罗(Monte Carlo)模拟计算投资组合的风险价值(VaR)

    最近我们被客户要求撰写关于风险价值(VaR)的研究报告,包括一些图形和统计输出. 如何使用Python通过蒙特卡洛模拟自动计算风险值(VaR)来管理投资组合或股票的金融风险. 金融和投资组合风险管理中 ...

  2. 蒙特卡罗(Monte Carlo)方法

    蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数"的计算方法.          一 起源 这一方法源于美国在第二次世界大战进研制原子弹的&qu ...

  3. 蒙特卡罗(Monte Carlo)法

    蒙特卡罗(Monte Carlo)法 又称统计实验法,是以概率论和数理统计为指导的模拟方法. 它的实质是运用一连串的随机数来模拟可能出现的随机现象,即为了求解确定的数学问题,要构造一个与原来的问题没有 ...

  4. python可视化分析网易云音乐评论_Python数据可视化:网易云音乐歌单

    通过Python对网易云音乐华语歌单数据的获取,对华语歌单数据进行可视化分析. 可视化库不采用pyecharts,来点新东西. 使用matplotlib可视化库,利用这个底层库来进行可视化展示. 推荐 ...

  5. 用Python可视化分析绝地求生上万场游戏数据,教你做最强吃鸡攻略啦~

    导语 大吉大利,今晚吃鸡~ 今天跟朋友玩了几把吃鸡,经历了各种死法,还被嘲笑说论女生吃鸡的100种死法,比如被拳头抡死.跳伞落到房顶边缘摔死 .把吃鸡玩成飞车被车技秀死.被队友用燃烧瓶烧死的.这种游戏 ...

  6. 用Python采集【去哪了】旅游景点攻略,可视化分析旅游出行数据

    知识点 requests 发送网络请求 parsel 解析数据 csv 保存数据 第三方库 requests >>> pip install requests parsel > ...

  7. Python爬虫+可视化分析技术实现招聘网站岗位数据抓取与分析推荐系统

    程序主要采用Python 爬虫+flask框架+html+javascript实现岗位推荐分析可视化系统,实现工作岗位的实时发现,推荐检索,快速更新以及工作类型的区域分布效果,关键词占比分析等. 程序 ...

  8. 蒙特卡罗(Monte Carlo)

    一 起源 蒙特卡罗(Monte Carlo)方法,或称计算机随机模拟方法,是一种基于"随机数"的计算方法.这一方法源于美国在第一次世界大战进研制原子弹的"曼哈顿计划&qu ...

  9. Monte carlo

    转载 http://blog.sciencenet.cn/blog-324394-292355.html 蒙特卡罗(Monte Carlo)方法,也称为计算机随机模拟方法,是一种基于"随机数 ...

  10. 在我方某前沿防守地域 matlab,[matlab]Monte Carlo模拟学习笔记

    理论基础:大数定理,当频数足够多时,频率可以逼近概率,从而依靠概率与$\pi$的关系,求出$\pi$ 所以,rand在Monte Carlo中是必不可少的,必须保证测试数据的随机性. 用蒙特卡洛方法进 ...

最新文章

  1. Java8中的Mapreduce
  2. 如何为windows服务添加安装程序(转)
  3. 26、HTML 区块
  4. Tensorflow yolov3 Intel Realsense D435 识别时间测试
  5. ifix如何设画面大小_如何让你的视频又小又清晰?视频编码输出软件来了
  6. 设计模式之MVC设计模式初阶
  7. String s = new String(“xyz“);创建了几个字符串对象?
  8. 查看svn服务器上的文件,如何在命令行通过SVN命令筛选出修改过的文件并递交
  9. Python如何设置对数log坐标系的range
  10. stm32驱动TFTLCD液晶屏显示图片+汉字(快速上手,只教怎么用,不讲原理!)
  11. java中lastmodified_Java File lastModified()用法及代码示例
  12. 霍夫曼编码代码matlab,matlab 实现霍夫曼编码
  13. python绘制等边三角形的代码_python 打印直角三角形,等边三角形,菱形,正方形的代码...
  14. 预算一万以内的机器学习台式机/主机配置推荐
  15. C++ 制作简易音乐播放器
  16. Android 9(P)之init进程启动源码分析指南之一
  17. 用Python画国旗
  18. i7 9750h和r5 4600u 哪个好
  19. 《python数据分析与挖掘实战》笔记第5章
  20. 读写文本文件-StreamReader和StreamWriter

热门文章

  1. 关于双硬盘安装双系统
  2. 【损失函数】生成任务感知损失小结
  3. 用java把word转pdf
  4. Linux电源管理(五)thermal
  5. 华为任正非写的《致新员工书》
  6. python爬微博步骤手机_新浪微博爬取笔记(2):wap端模拟登陆 python
  7. 移动互联网组建与优化
  8. 对话Huobi Prime首发项目TOP:李林80%的时间都在问项目能否落地
  9. html万花筒相册旋转效果,jquery css3 3D万花筒图片相册展示特效
  10. 服务器无线存储器,教你把无线路由器打造成网络存储器