r - 通过 R 中的蒙特卡罗模拟进行简单的美式期权定价 - 结果太高
问题描述
我更像是 R 的新手,并且一直在尝试使用简单的蒙特卡罗模拟(无回归等)建立一个公式来为美式期权(看涨或看跌)定价。虽然代码适用于欧式期权,但它似乎高估了美式期权(与二叉树/三叉树和其他定价模型相比)。
非常感谢您的意见!
我采取的步骤概述如下。
1.) 用 m+1 步模拟 n 个股票价格路径(几何布朗运动):
n = 10000; m = 100; T = 5; S = 100; X = 100; r = 0.1; v = 0.1; d = 0
pat = matrix(NA,n,m+1)
pat[,1] = S
dt = T/m
for(i in 1:n)
{
for (j in seq(2,m+1))
{
pat[i,j] = pat[i,j-1] + pat[i,j-1]*((r-d)* dt + v*sqrt(dt)*rnorm(1))
}
}
2.)我通过反向归纳计算看涨期权和看跌期权的收益矩阵和折扣:
# Put option
payP = matrix(NA,n,m+1)
payP[,m+1] = pmax(X-pat[,m+1],0)
for (j in seq(m,1)){
payP[,j] = pmax(X-pat[,j],payP[,j+1]*exp(-r*dt))
}
# Call option
payC = matrix(NA,n,m+1)
payC[,m+1] = pmax(pat[,m+1]-X,0)
for (j in seq(m,1)){
payC[,j] = pmax(pat[,j]-X,payC[,j+1]*exp(-r*dt))
}
3.) 我将期权价格计算为时间 0 的平均(平均)收益:
mean(payC[,1])
mean(payP[,1])
在上面的示例中,找到了大约 44.83 的看涨价格和 3.49 的近似看跌价格。然而,按照三叉树方法(n = 250 步),价格应该更高 39.42(看涨)和 1.75(看跌)。Black Scholes Call Price(因为没有股息收益率)为 39.42。
正如我所说,任何输入都将受到高度赞赏。非常感谢您!
万事如意!
解决方案
我认为您的问题是一个概念问题,而不是实际的编码问题。
您的代码当前所做的是,在整个模拟股票价格路径上行使美式期权需要事后的最佳时间点。它没有考虑到一旦美式期权的内在价值高于其计算出的期权价格,您就会行使它——这意味着您放弃了在未来内在价值与期权之间的差异时行使它的机会价格可能更大(取决于已实现的股票价格变动)。
因此,您高估了期权价格。
推荐阅读
- azure - 有没有办法在不打开路由的情况下连接到具有私有 IP 的 AKS 节点?
- java - java - 如何在java中一一获取来自Kafka Consumer的消息?
- c++ - 我想将一个对象中的一个对象调用到 c++ 中的其他类
- python - Pandas DataFrame 列字符串连接
- mainframe - 在 PDS 目录中选择一组成员进行编辑
- java - 我的 Java 代码在执行过程中停止
- python - 如何根据python中其他列的索引值复制相同的值
- logging - 如何从 Neo4j 桌面登录 Neo4j(尊重原始字母大小写,例如大写)
- javascript - 当数据不是某个索引位置时改变元素数组
- asp.net - Windows 补丁 KB4576947 的 .NET IIS 问题