暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

拓端数据部落 2022-05-19
564

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

对于模拟股票价格,几何布朗运动 (GBM) 是 事实上的首选 模型。

它有一些很好的属性,通常与股票价格一致,例如对数正态分布(因此向下限制为零),并且期望收益不取决于价格的大小。

当然,GBM 只是一个模型,没有一个模型可以完美地代表现实。特别是,GBM 使用恒定波动率,这显然与现实不符。它也没有考虑跳跃,例如由新闻引起的跳跃。

尽管有这些限制,GBM 仍然是对股票价格行为进行建模的有用起点。特别是,它非常有助于建立对各种金融概念的直觉——尤其是期权定价。

通常,当我们对股票价格进行建模时,我们的用例需要运行大量模拟以生成可能结果的分布。

由于这样的用例需要多次运行 GBM 模拟器,因此考虑优化代码以提高速度是值得的。少量的深思熟虑可以节省大量的时间。

当然,您要避免提早优化的诱惑,以免花费更多时间优化代码,而不是优化本身节省的时间。

在这篇文章中,我将展示两种使用 GBM 模拟价格路径的方法:

  • 使用 for
     循环迭代价格路径的数量和每个路径中的时间步数

  • 向量化,我们一次对整个向量或矩阵进行操作

基于循环的 GBM 模拟

for
 下面是在嵌套循环中运行 GBM 模拟的一些代码 :

g_op <- function {
gm <- mrix(nol = nsm, nrow = t)

for (imu in 1:nim) {

gm\[1, smu\] <- S0

for (ay in 2:t) {

eslon <- rnrm(1)

dt = 1 / 365

bm\[day, imu\] <-bm\[(day-1), smu\] * exp((u - sgma * sima / 2) * dt + sima * epilo * sqt(dt))

100 个时间步长 50 次,年化波动率为 10%,偏移为 0,起始价格为 100,我得到的价格路径如下所示:

gm <- gbo(nsimt, mu, sigma, S0)

这看起来像是上面指定的参数所描述的随机价格过程的合理表示。这个循环实际上运行得很快。



点击标题查阅往期内容


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


左右滑动查看更多


01

02

03

04



如果我们要求它进行 50,000 次模拟,让我们看看运行得有多快:

sar <- ys.tme()

gm <- gbmlp(nim , t, mu, siga, S0)

Sys.time() - srt

大约十秒钟。

GBM 模拟的矢量化方法

R 中的许多操作都是矢量化的——这意味着操作可以在后台并行发生,或者至少可以使用用 C 编写的、对用户隐藏的紧密循环运行得更快。

向量化的经典例子是两个向量的元素相加。这种操作的 for 循环版本如下所示:

x <- c(1:10)

y <- c(10:1)

z <- numeric(length(x))

for(i in c(1:length(x))) {

z\[i\] <- x\[i\] + y\[i\]

}

z

通过矢量化,我们可以简单地做到:

z <- x + y

z

R 中的许多操作都是矢量化的——事实上,R 的设计就是考虑到这一点。

让我们在我们的 GBM 模拟中对一个操作进行矢量化来演示。

不像我们在循环版本中那样为每天的每个模拟生成一个新的随机数,我们将在一开始就生成一个包含整个模拟所需的所有随机数的矩阵。这就是下面代码中的矩阵 epsilon
 。

然后,我们可以在单个操作 中 将该矩阵转换 nsim * t
 为具有我们所需参数的 GBM 的实现。

作为最后一步,我们将给定的初始价格添加 S0
 到每个模拟的第一个元素,然后我们通过时间累积产品来获得我们的价格路径。

这是代码:

gbc <- function {

# 随机抽样的矩阵--每次模拟每天都有一个

epln <- matrix(norm(t*nim), ncol = nsim, nrow = t)

# 得到GBM并转换为价格路径

gm <- exp((mu - sgma * sma / 2) * dt + sia  pson * sqrtdt) )

如果我运行 50 次,我会得到如下所示的价格路径:

nsim <- 50


ggplot(aes) +

geom_line() +

theme(leend.poon = 'none')

让我们模拟50,000 条价格路径,看看我们是否在循环版本中获得了加速:

gbm <- gb_ec(nim = 50000)

Sys.time() - start

这是一个数量级加速的最佳部分。

GBM 模拟器可以用来做什么?

鉴于我们的模型假设,我们可以使用它来估计未来某个时间点的价格分布:

ggplot(aes(x = pce)) +

geom_hstgam(aes(y = ..denity..), biwdth = 0.1) +

geom_dnsity() +

从那里,估计被模拟股票期权的 概率加权收益曲线 ,比如一个 看涨期权 在 105 处执行(同样,考虑到我们的模型假设,并忽略远期利率和股息):

proile <- ble(

prce = D$x,

vaue = casewen(price <= trke ~ 0, TRUE ~ prce - srie)

)

# 报酬和概率的数据框架

prieghdyf_pile <- prle %>%

muta(desity = D$y/sm(D$y))



ggplot +

geom_line() +

xlab('price')

最后,我们可以通过对概率加权收益曲线下的面积求和来获得期权的期望值:

expeue <- proile %>%

suse(ev = sum(density * value))

explue

结论

几何布朗运动模拟器是您开始对股票价格进行建模时首先使用的工具之一。

特别是,它是一个有用的工具,可以帮助您建立 _期权定价_等概念。

利用 R 的矢量化工具,我们可以立即运行数以万计的模拟。




点击文末“阅读原文”

获取全文完整资料


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


点击标题查阅往期内容

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模型和金融时间序列案例


文章转载自拓端数据部落,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论