首页 > 其他分享 >R语言中进行期权定价的Heston随机波动率模型|附代码数据

R语言中进行期权定价的Heston随机波动率模型|附代码数据

时间:2023-05-11 20:00:30浏览次数:54  
标签:模型 波动 随机 期权 Heston 模拟

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

最近我们被客户要求撰写关于期权定价的研究报告,包括一些图形和统计输出。

在本文中,我将向您展示如何模拟股票价格的Heston随机波动率模型

Heston模型是一种期权估值方法,它考虑到同一资产在给定时间交易的不同期权的波动性变化。它试图通过使用随机过程来模拟波动率和利率来重新创建市场定价。Heston模型的特点是将波动率函数的平方根包含在整个定价函数中。

对于固定的无风险利率,描述为:

图片

通过使用这种模型,可以得出欧洲看涨期权的价格 。

这是函数的描述。

callHestoncf(S, X, tau, r, v0, vT, rho, k, sigma){
# S = 股价在到期日的价格, X = 行权价格, tau = 到期日
# r = 为无风险利率, q = 股息收益
# v0 = 初始方差, vT = 长期方差
# rho = 相关系数, k = 是Vt回归至θ的速度;
# sigma = 波动率
}

点击标题查阅往期内容

图片

R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例

图片

左右滑动查看更多

图片

01

图片

02

图片

03

图片

04

图片

现在,进行蒙特卡洛定价。我们将为3个欧洲看涨期权定价,具有3种不同的行权价格。我们在15年中使用100000个模拟,每个月进行一次。以下是仿真的参数:

#初始价格
S0 <- 100
# 模拟次数(可以随意减少)
n <- 100000
# 抽样频率
freq <- "monthly"
# 波动率均值回复速度
kappa <- 0.003
#波动率
volvol <- 0.009
# 相关性。成交量和现货价格
rho <- -0.5
# 初始方差
V0 <- 0.04
# 长期的方差
theta <- 0.04
#初始短期利率
r0 <- 0.015
 
# 期权到期日
horizon <- 15
#期权行权价格
strikes <- c(140, 100, 60)

为了使用模拟Heston模型,我们首先需要定义如何进行模拟。

此函数提供一个包含2个成分的列表,每个成分包含模拟的随机高斯增量。

#  随机波动模拟
sim.vol <- simdiff(n =  n, horizon =  horizon,
frequency =  freq, model = "CIR", x0 =  V0,
theta1 =  kappa*theta, theta2 =  kappa,
theta3 =  volvol, eps =  shocks[[1]])
 
# 股票价格模拟
sim.price <- simdiff(n = n, horizon = horizon,
frequency = freq, model = "GBM", x0 = S0,
theta1 = r0, theta2 = sqrt(sim.vol),
eps = shocks[[2]])

现在,我们可以计算3种不同的期权价格。

# 到期股票价格(15年)

print(results)
 
 
strikes mcprices  lower95  upper95 pricesAnalytic
1     140 25.59181 25.18569 25.99793         25.96174
2     100 37.78455 37.32418 38.24493         38.17851
3      60 56.53187 56.02380 57.03995         56.91809

从这些结果中,我们看到这三个期权的蒙特卡洛价格与使用函数(直接使用公式来计算价格)计算出的价格相当接近。95%的置信区间包含理论价格。

下面是期权价格,作为模拟次数的函数。计算出的理论价格用蓝色绘制,蒙特卡洛平均价格用红色绘制,阴影区域表示均值(蒙特卡洛价格)周围的95%置信区间。

图片


图片

本文摘选 《 R语言用加性多元线性回归、随机森林、弹性网络模型预测鲍鱼年龄和可视化 》 ,点击“阅读原文”获取全文完整资料。


点击标题查阅往期内容

r语言二元期权barrier option实现案例
R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型
R语言用多元ARMA,GARCH ,EWMA, ETS,随机波动率SV模型对金融时间序列数据建模
WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较
Matlab马尔可夫链蒙特卡罗法(MCMC)估计随机波动率(SV,Stochastic Volatility) 模型
WINBUGS对随机波动率模型进行贝叶斯估计与比较
WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系
stata马尔可夫Markov区制转移模型分析基金利率
R语言对HullWhite短期利率模型仿真
Matlab通过市场数据校准Hull-White利率模型参数

标签:模型,波动,随机,期权,Heston,模拟
From: https://www.cnblogs.com/tecdat/p/17392073.html

相关文章

  • Pillow模块——生成随机验证码
    urls.pypath('get_code/',views.get_code),views.py中fromPILimportImage,ImageFont,ImageDraw"""Image 产生图片ImageFont 字体样式ImageDraw 画笔对象"""fromioimportBytesIO,StringIO"""BytesIO在内存中临时......
  • Stable Diffusion 的随机种子 seed
    seed参数允许您指定一个随机种子,将用于初始化图像生成过程。相同的种子值每次都会产生相同的图像集,这对于再现性和一致性很有用。如果将种子值保留为-1,则每次运行文本-图像特性时将生成一个随机种子。最重要的是,具有相同参数、prompt和seed将产生完全相同的图像。多亏了这......
  • 随机事件与概率
    模块导图知识剖析随机事件与概率①有限样本空间与随机事件(1)我们把对随机现象的实现和对它的观察称为随机试验,简称试验,常用字母\(E\)表示,我们把随机试验\(E\)的每个可能的基本结果称为样本点,全体样本点的集合称为\(E\)试验的样本空间.用\(Ω\)表示样本空间,用\(ω\)表示......
  • MySQL的随机排序(random orderby)
    MySQL的随机排序(randomorderby)是指在查询数据库时,将结果集以随机的方式排列。这种排序方式可以用于有趣的应用场景,例如实现随机音乐播放、广告推荐等。要实现MySQL的随机排序,可以使用RAND()函数。RAND()函数可以生成0-1之间的随机数,将它作为排序的依据即可。SELECT*FROM`my......
  • 随机颜色函数
    1//1、定义一个随机颜色函数,如果输入true(默认),2//返回#ffffff;;false返回rbg3functiongetRandomColor(flag=true){4if(flag){5constarr=['0','1','2','3','4','5','6&#......
  • C# Random类 伪随机数生成器
     Random类表示伪随机数生成器,它是一种能够产生满足某些随机性统计要求的数字序列的设备,其方法如下表:Random类方法方法说明Next已重载。返回随机数NextBytes用随机数填充指定字节数组的元素NextDouble返回一个介于0.0和1.0之间的随机数Sample返回一个介于......
  • R语言随机波动模型SV:马尔可夫蒙特卡罗法MCMC、正则化广义矩估计和准最大似然估计上证
    全文链接:http://tecdat.cn/?p=31162最近我们被客户要求撰写关于SV模型的研究报告,包括一些图形和统计输出本文做SV模型,选取马尔可夫蒙特卡罗法(MCMC)、正则化广义矩估计法和准最大似然估计法估计。模拟SV模型的估计方法:sim<-svsim(1000,mu=-9,phi=0.97,sigma=0.15)pr......
  • 7.3.2 离散型随机变量的方差
    基础知识方差的概念(1)一般地,若离散型随机变量\(x\)的概率分布列为\(X\)\(x_1\)\(x_2\)⋯\(x_i\)⋯\(x_n\)\(P\)\(p_1\)\(p_2\)⋯\(p_i\)⋯\(p_n\)则称\[D(X)=(x_1-E(X))^2p_1+(x_2-E(X))^2p_2+\cdots+(x_n-E(X))^2p_n=\sum_{i=1}^n\left(x_i-E(X)\r......
  • 【二分查找】LeetCode 528. 按权重随机选择
    题目链接528.按权重随机选择思路代码classSolution{privateint[]sum;publicSolution(int[]w){sum=newint[w.length+1];for(inti=1;i<sum.length;i++){sum[i]=sum[i-1]+w[i-1];}}p......
  • 软硬件随机数对比
    本文对比C++中std::mt19937和硬件随机数效率。注意硬件随机数指令_rdrand32_step等属于AVX指令集。文档中说明_rdrand32_step可能会失败,失败时返回0,经过几次测试没有发现失败的情况。所以如果程序要求不严可以不管返回值。对比的结果是硬件随机数更慢。所以一般硬件随机数只产生一......