试图在一个简单的 BS 公式的实现中找到错误
Trying to find an error on the implementation of a simple BS formula
Blackscholes_formula <- function(spot,timetomat,strike,r,q=0,sigma,opt_type=1,greek_type=1)
{
d_1<-(log(spot/k) + (r+ (sigma^2)/2)(timetomat))/sigma*sqrt(T-t)
d_2 <-d_1-((sigma^2)/2)*timetomat)
if(greek_type == 1) result <- spot*pnorm(d_1)- K exp(-r*timetomat)*pnorm(d_2)
if(greek_type == 2) result <- pnorm(d_1)
Blackscholes_formula <- result
}
我正在开始编程,由于我的领域,我从 R 开始。但是我正在努力编写一段有效的代码。在编写上面的 Black-Scholes 估值公式时,我收到错误消息:
Error: unexpected '}' in "}"
我在网上搜索过类似的错误,但尽管“症状”相同,但错误来源不同。我不知道我是否在代码上犯了一个重大错误或者问题是什么。
问题:
如果有人可以就如何改进上述代码提供反馈,我将不胜感激。
提前致谢!
几件事。首先,我认为你漏掉了一个星号,但还有其他问题。
- 您的函数需要
K
的提示。这个变量在你的函数中也是大写和小写的。您还需要变量 t
和 t_cap
。 (我们不使用 T
作为变量,因为它是为 TRUE
保留的)
- 您在第一个
if()
语句中有一个松散的 K
(K
如何与 exp()
交互?)
- 我不是 100% 肯定,但你问你的功能 return 本身。我只是输入
result
.
这是为我编译的函数,所有新变量都设置为 1
Blackscholes_formula <- function(spot,timetomat,strike,r, K = 1, t = 1, t_cap = 1, q=0,sigma = 1,opt_type=1,greek_type=1){
d_1 <- (log(spot/K) + (r+ (sigma^2)/2) * (timetomat))/sigma*sqrt(t_cap-t)
d_2 <- d_1-((sigma^2)/2)*timetomat
if(greek_type == 1) result <- spot*pnorm(d_1)- K*exp(-r*timetomat)*pnorm(d_2)
if(greek_type == 2) result <- pnorm(d_1)
result
}
Blackscholes_formula(1,2,3,4)
Blackscholes_formula <- function(spot,timetomat,strike,r,q=0,sigma,opt_type=1,greek_type=1)
{
d_1<-(log(spot/k) + (r+ (sigma^2)/2)(timetomat))/sigma*sqrt(T-t)
d_2 <-d_1-((sigma^2)/2)*timetomat)
if(greek_type == 1) result <- spot*pnorm(d_1)- K exp(-r*timetomat)*pnorm(d_2)
if(greek_type == 2) result <- pnorm(d_1)
Blackscholes_formula <- result
}
我正在开始编程,由于我的领域,我从 R 开始。但是我正在努力编写一段有效的代码。在编写上面的 Black-Scholes 估值公式时,我收到错误消息:
Error: unexpected '}' in "}"
我在网上搜索过类似的错误,但尽管“症状”相同,但错误来源不同。我不知道我是否在代码上犯了一个重大错误或者问题是什么。
问题:
如果有人可以就如何改进上述代码提供反馈,我将不胜感激。
提前致谢!
几件事。首先,我认为你漏掉了一个星号,但还有其他问题。
- 您的函数需要
K
的提示。这个变量在你的函数中也是大写和小写的。您还需要变量t
和t_cap
。 (我们不使用T
作为变量,因为它是为TRUE
保留的) - 您在第一个
if()
语句中有一个松散的K
(K
如何与exp()
交互?) - 我不是 100% 肯定,但你问你的功能 return 本身。我只是输入
result
.
这是为我编译的函数,所有新变量都设置为 1
Blackscholes_formula <- function(spot,timetomat,strike,r, K = 1, t = 1, t_cap = 1, q=0,sigma = 1,opt_type=1,greek_type=1){
d_1 <- (log(spot/K) + (r+ (sigma^2)/2) * (timetomat))/sigma*sqrt(t_cap-t)
d_2 <- d_1-((sigma^2)/2)*timetomat
if(greek_type == 1) result <- spot*pnorm(d_1)- K*exp(-r*timetomat)*pnorm(d_2)
if(greek_type == 2) result <- pnorm(d_1)
result
}
Blackscholes_formula(1,2,3,4)