我现在已经使用R一段时间了,仅仅是为了简单的事情。现在,我试图创建一个函数来计算资产的Black-Scholes值。这在金融领域是一个非常标准的事情。我非常确定语法是正确的,但我得到了一个奇怪的结果。
以下是我的参数:
myfunction(1000000000,500000000,.04,.2,5)
这是我的功能:
myfunction <- function(Firm_Value, Face_Value, Rate, Volatility_Value, Time)
{
s <- Firm_Value
X <- Face_Value
r <- Rate
v <- Volatility_Value
T <- Time
t1 <- log(s / X) + (r + v ^ 2 / 2) * T
t2 <- v * sqrt(T)
d1 <- t1 / t2
t3 <- log(s / X) + (r - v ^ 2 / 2) * T
d2 <- t3 / t2
ta <- s * qnorm(d1)
tb <- X * exp( - r * T) * qnorm(d2)
Equityvalue <- ta - tb
}
这是我的结果:
Warning messages:
1: In qnorm(d1) : NaNs produced
2: In qnorm(d2) : NaNs produced
结果应该是:
$593,035,186.31
我在这里做错了什么?
答案 0 :(得分:3)
问题是qnorm
函数需要概率。如果您在函数中进行单独计算,则d1和d2不会给出概率。我认为他们会给出分位数。我想你想要pnorm
而不是qnorm
。
myfunction <- function(Firm_Value, Face_Value, Rate, Volatility_Value, Time)
{
s <- Firm_Value
X <- Face_Value
r <- Rate
v <- Volatility_Value
T <- Time
t1 <- log(s / X) + (r + v ^ 2 / 2) * T
t2 <- v * sqrt(T)
d1 <- t1 / t2
t3 <- log(s / X) + (r - v ^ 2 / 2) * T
d2 <- t3 / t2
ta <- s * pnorm(d1)
tb <- X * exp( - r * T) * pnorm(d2)
Equityvalue <- ta - tb
Equityvalue
}
注意:我最后通过添加Equityvalue
返回了最终计算结果。调用函数时,上面的函数不会打印最终结果。