#' 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)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.