试图找到一个简单的 BS 公式的实现错误

问题描述


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. 您在第一个 K 语句中有一个松散的 if()K 如何与 exp() 交互?)
  3. 我不是 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)