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

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

原文链接: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(nsim, t, 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 的矢量化工具,我们可以立即运行数以万计的模拟。

相关文章
|
3月前
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
3月前
|
数据可视化 数据挖掘 数据处理
R语言高级可视化技巧:使用Plotly与Shiny制作互动图表
【8月更文挑战第30天】通过使用`plotly`和`shiny`,我们可以轻松地创建高度互动的数据可视化图表。这不仅增强了图表的表现力,还提高了用户与数据的交互性,使得数据探索变得更加直观和高效。本文仅介绍了基本的使用方法,`plotly`和`shiny`还提供了更多高级功能和自定义选项,等待你去探索和发现。希望这篇文章能帮助你掌握使用`plotly`和`shiny`制作互动图表的技巧,并在你的数据分析和可视化工作中发挥更大的作用。
|
3月前
|
数据可视化
R语言可视化设计原则:打造吸引力十足的数据可视化
【8月更文挑战第30天】R语言可视化设计是一个综合性的过程,需要综合运用多个设计原则来创作出吸引力十足的作品。通过明确目标、选择合适的图表类型、合理运用色彩与视觉层次、明确标注与引导视线以及引入互动性与动态效果等原则的应用,你可以显著提升你的数据可视化作品的吸引力和实用性。希望本文能为你提供一些有益的启示和帮助。
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
R语言从数据到决策:R语言在商业分析中的实践
【9月更文挑战第1天】R语言在商业分析中的应用广泛而深入,从数据收集、预处理、分析到预测模型构建和决策支持,R语言都提供了强大的工具和功能。通过学习和掌握R语言在商业分析中的实践应用,我们可以更好地利用数据驱动企业决策,提升企业的竞争力和盈利能力。未来,随着大数据和人工智能技术的不断发展,R语言在商业分析领域的应用将更加广泛和深入,为企业带来更多的机遇和挑战。
|
24天前
|
数据挖掘 C语言 C++
R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。
【10月更文挑战第21天】时间序列分析是一种重要的数据分析方法,广泛应用于经济学、金融学、气象学、生态学等领域。R语言是一种强大的统计分析工具,提供了丰富的函数和包用于时间序列分析。本文将介绍使用R语言进行时间序列分析的基本概念、方法和实例,帮助读者掌握R语言在时间序列分析中的应用。
41 3
|
6月前
|
数据可视化 数据挖掘 API
【R语言实战】聚类分析及可视化
【R语言实战】聚类分析及可视化
|
6月前
|
机器学习/深度学习 数据可视化
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为2
R语言逻辑回归logistic模型ROC曲线可视化分析2例:麻醉剂用量影响、汽车购买行为
|
2月前
|
数据采集 数据可视化 数据挖掘
R语言在金融数据分析中的深度应用:探索数据背后的市场智慧
【9月更文挑战第1天】R语言在金融数据分析中展现出了强大的功能和广泛的应用前景。通过丰富的数据处理函数、强大的统计分析功能和优秀的可视化效果,R语言能够帮助金融机构深入挖掘数据价值,洞察市场动态。未来,随着金融数据的不断积累和技术的不断进步,R语言在金融数据分析中的应用将更加广泛和深入。
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
R语言在数据科学中的应用实例:探索与预测分析
【8月更文挑战第31天】通过上述实例,我们展示了R语言在数据科学中的强大应用。从数据准备、探索、预处理到建模与预测,R语言提供了完整的解决方案和丰富的工具集。当然,数据科学远不止于此,随着技术的不断发展和业务需求的不断变化,我们需要不断学习和探索新的方法和工具,以更好地应对挑战,挖掘数据的潜在价值。 未来,随着大数据和人工智能技术的普及,R语言在数据科学领域的应用将更加广泛和深入。我们期待看到更多创新的应用实例,为各行各业的发展注入新的动力。
|
3月前
|
数据采集 存储 数据可视化
R语言时间序列分析:处理与建模时间序列数据的深度探索
【8月更文挑战第31天】R语言作为一款功能强大的数据分析工具,为处理时间序列数据提供了丰富的函数和包。从数据读取、预处理、建模到可视化,R语言都提供了灵活且强大的解决方案。然而,时间序列数据的处理和分析是一个复杂的过程,需要结合具体的应用场景和需求来选择合适的方法和模型。希望本文能为读者在R语言中进行时间序列分析提供一些有益的参考和启示。