试图在一个简单的 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 "}" 我在网上搜索过类似的错误,但尽管“症状”相同,但错误来源不同。我不知道我是否在代码上犯了一个重大错误或者问题是什么。

问题:

如果有人可以就如何改进上述代码提供反馈,我将不胜感激。

提前致谢!

几件事。首先,我认为你漏掉了一个星号,但还有其他问题。

  1. 您的函数需要 K 的提示。这个变量在你的函数中也是大写和小写的。您还需要变量 tt_cap。 (我们不使用 T 作为变量,因为它是为 TRUE 保留的)
  2. 您在第一个 if() 语句中有一个松散的 KK 如何与 exp() 交互?)
  3. 我不是 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)