R 中的 Black Scholes 期权定价模型
Black Scholes Option Pricing Model in R
我在这里尝试用 R 编写 BS 模型。从数学上讲,我认为这很好,但代码返回错误。
price = function(S, K, r, T, sigma, type){
if(type=="C"){
d1 <- (log(S/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sigma*sqrt(T)
price = S*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
return(price)}
if (type=="P"){
d1 <- (log(S/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sig*sqrt(T)
price = (K*exp(-r*T)*pnorm(-d2) - S*pnorm(-d1))
return(price)}
我尝试使用 if,else if 都返回了 "Error: Incomplete expression:" - 我希望远离 else,因为选项类型必须通过 "C" 调用或 "P"对于 Put.
我需要你的帮助来检查为什么代码不是 运行。
此致
您需要关闭函数的括号。此外,第二个 if 语句具有 sig 而不是 sigma。我已经更改了给出的内容:
price = function(S, K, r, T, sigma, type){
if(type=="C"){
d1 <- (log(S/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sigma*sqrt(T)
price = S*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
return(price)}
if (type=="P"){
d1 <- (log(S/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sigma*sqrt(T)
price = (K*exp(-r*T)*pnorm(-d2) - S*pnorm(-d1))
return(price)}
}
这就有效了:
price(50,50,0.05,0.5,0.25,'C')
[1] 4.130008
price(50,50,0.05,0.5,0.25,'P')
[1] 2.895503
我在这里尝试用 R 编写 BS 模型。从数学上讲,我认为这很好,但代码返回错误。
price = function(S, K, r, T, sigma, type){
if(type=="C"){
d1 <- (log(S/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sigma*sqrt(T)
price = S*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
return(price)}
if (type=="P"){
d1 <- (log(S/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sig*sqrt(T)
price = (K*exp(-r*T)*pnorm(-d2) - S*pnorm(-d1))
return(price)}
我尝试使用 if,else if 都返回了 "Error: Incomplete expression:" - 我希望远离 else,因为选项类型必须通过 "C" 调用或 "P"对于 Put.
我需要你的帮助来检查为什么代码不是 运行。
此致
您需要关闭函数的括号。此外,第二个 if 语句具有 sig 而不是 sigma。我已经更改了给出的内容:
price = function(S, K, r, T, sigma, type){
if(type=="C"){
d1 <- (log(S/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sigma*sqrt(T)
price = S*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
return(price)}
if (type=="P"){
d1 <- (log(S/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T))
d2 <- d1 - sigma*sqrt(T)
price = (K*exp(-r*T)*pnorm(-d2) - S*pnorm(-d1))
return(price)}
}
这就有效了:
price(50,50,0.05,0.5,0.25,'C')
[1] 4.130008
price(50,50,0.05,0.5,0.25,'P')
[1] 2.895503