问题描述
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
保留的) - 您在第一个
K
语句中有一个松散的if()
(K
如何与exp()
交互?) - 我不是 100% 肯定,但您要求您的函数自行返回。我只需输入
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)