我正在尝试基于黑色scholes变量在R中创建自己的函数,并解决我认为是sigma的“向后”问题。

我创建了一个函数来查找调用价格;但是,现在我必须在R中找到sigma(隐含波动率)估计值,然后测试我的函数以查看它是否起作用...我尝试了不同的函数,但似乎无法弄清楚我做错了什么,这是其中一部分我认为我需要了解sigma才能找到sigma,但是我不确定这是否有意义。

这是我为Black Scholes模型中的欧式看涨期权的价格创建的函数:

call <- function(s0, K, r, T, sigma) {
  d1 <- (log(s0/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
  d2 <- d1 - sigma*sqrt(T
  c <- s0*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
  c
}

我测试了我的函数,看它是否可以与不同的代码一起正常工作:
call(100, 70, 0.05, 1, 0.16)
[1] 33.43686

call(300, 280, 0.03, 3, 0.18)
[1] 60.81694

call(400, 350, 0.04, 5, 0.20)
[1] 133.1626

现在,我需要使用以下函数来查找sigma:
    sigma <- function(call, s0, K, r, T) {

???
    }

创建函数后,需要使用以下命令对其进行测试:
sigma(33.43686, 100, 70, 0.05, 1)

sigma(60.81694, 300, 280, 0.03, 3)

sigma(133.1626, 400, 350, 0.04, 5)

格式相同,但我无法弄清楚。我需要包括一个范围或序列才能找到sigma吗?

我已经尝试过了,但是我不相信我们应该在函数中包含“v”
sigma <- function(call, s0, K, r, T, v) {
  d1 <- (log(s0/K) + (r + v^2/2)*T) / (v*sqrt(T))
  d2 <- d1 - v*sqrt(T)
  c <- s0*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
  sigma_value <- d1 - d2 / sqrt(T)
  sigma_value
}

sigma(33.43686, 100, 70, 0.05, 1, 0.16)
[1] 0.16
sigma(60.81694, 300, 280, 0.03, 3, 0.18)
[1] 0.4614232
sigma(133.1626, 400, 350, 0.04, 5, 0.20)
[1] 0.7358743

我试图通过创建自己的函数来找到接近于0.16的估计值。

我也觉得我的sigma离我们太远了

我也尝试过:
sigma <- function(call, s0, K, r, T) {
  v = seq(from = 0.1, to = .2, by = .01)
  k.range = floor(seq(from = 100, to = 400, length.out = length(v)))
  for (i in 1:length(v)) {
    d1 <- (log(s0/K[i]) + (r + (v^2)/2) * T) / (v * sqrt(T))
    d2 <- d1 - v * sqrt(T)
    C  <- s0 * pnorm(d1) - K[i] * exp(-r*T) * pnorm(d2) - call[i]
  }
  v
}

在功能方面的任何帮助将是巨大的。谢谢

最佳答案

RQuant库中有一个内置的隐含波动率函数
例如。

AmericanOptionImpliedVolatility(type="call", value=11.10, underlying=100,
    strike=100, dividendYield=0.01, riskFreeRate=0.03,
    maturity=0.5, volatility=0.4)

它也是fOptions软件包中的一个函数,
GBS波动率
返回给定价格的GBS期权隐含波动率。 GBS =广义Black Scholes模型
GBSVolatility(price, TypeFlag, S, X, Time, r, b, tol, maxiter)
BlackScholesOption(...)

见Espen Haug的书1997,2007完整期权定价适用于MS excel VBA中的算法。

关于r - 如何计算R中的隐含波动率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55779207/

10-12 17:59