R/vola_moneyness.R

Defines functions vola_moneyness

#' Vola using moneyness dataframe
#'
#' Vol
#' @param days Option days to matur,
#' @param strike Option strike,
#' @param spot Optio spot,
#' @param vol_matrix Volatility matrix
#' @return Volatility
#' @export

vola_moneyness <- function(days, strike, spot, vol_matrix){
  days_vec <- as.numeric(vol_matrix[,1])
  moneyness_vec <- as.numeric(colnames(vol_matrix)[-1])
  vol_data <- vol_matrix[,-1]
  # Interp over days:
  vol <- rep(0, length(days))
  for(i in 1:length(days)){
    target_moneyness <- 100*strike[i]/spot
    pos_ini <- max(1, findInterval(days, days_vec))
    if (pos_ini==length(days_vec)){
      pos_ini <- pos_ini - 1 
    }
    vols_vec <- vol_data[pos_ini,]+ (vol_data[pos_ini+1,]-vol_data[pos_ini,])* (days-days_vec[pos_ini])/(days_vec[pos_ini+1]-days_vec[pos_ini])
    
    pos_ini <- max(1, findInterval(target_moneyness, moneyness_vec))
    if (pos_ini==length(moneyness_vec)){
      pos_ini <- pos_ini - 1 
    }
    vol[i] <- as.numeric(vols_vec[pos_ini]+ (vols_vec[pos_ini+1]-vols_vec[pos_ini])*(target_moneyness-moneyness_vec[pos_ini])/(moneyness_vec[pos_ini+1]-moneyness_vec[pos_ini]))
  }
  return(vol)

}  
veldanie/SuraStructuredNotes documentation built on March 27, 2022, 5:28 p.m.