GBS <- function(S, X, T, v, r, b,phi=1) {
# phi=1 call, phi=-1 put
# b=r BS, b=r-q Merton (cont div)
# b=0 black76 formula
# b=r-rf ccy Garman KohlHagen opt formula
# b,r=0 asay 1982 margined futures option model
# b=rf-q-corr(FX,s)*v*volFX , FX=(nr dom x 1 foreign)
d1<- (log(S/X)+(b+v^2/2)*T)/(v*sqrt(T))
d2<- d1-v*sqrt(T)
phi*S*exp((b-r)*T)*pnorm(phi*d1)-phi*X*exp(-r*T)*pnorm(phi*d2)
}
# TODO: FARE TEST
BS <- function(S,X,T,v,rd,rf=0,qcor=0,fxvol=0, phi=1) {GBS(S,X,T,v,rd,rd-qcor*v*fxvol,phi)}
B76 <- function(S,X,T,v,rd,rf=0,qcor=0,fxvol=0, phi=1) {GBS(S,X,T,v,rd,-qcor*v*fxvol,phi)}
BSM <- function(S,X,T,v,rd,rf=0,d,qcor=0,fxvol=0, phi=1) {GBS(S,X,T,v,rd,rf-d-qcor*v*fxvol,phi)}
GK <- function(S,X,T,v,rd,rf=0,qcor=0,fxvol=0, phi=1) {GBS(S,X,T,v,rd,r-rf-qcor*v*fxvol,phi)}
# ESEMPI
# BSM(S=60,X=65,T=3/12,v=0.3,r=0.08,d=.01,phi=-1)
# BSM(S=60,X=65,T=3/12,v=0.3,r=0.08,d=.01,phi=1)
# BSM(S=100,X=95,T=0.5,v=0.2,r=0.1,d=0.05,phi=-1)
# TROVARE METODO ELEGANTE PER PASSARLE AI VARI SOTTOMODELLI BS76 ETC
# GBS_all(S=60,X=65,T=3/12,v=0.3,r=0.08,d=.01,phi=1)
GBS_all<-function(S, X, T, v, r, b,phi=1){
d1<- (log(S/X)+(b+v^2/2)*T)/(v*sqrt(T))
d2<- d1-v*sqrt(T)
value<-phi*S*exp((b-r)*T)*pnorm(phi*d1)-phi*X*exp(-r*T)*pnorm(phi*d2)
delta<-phi*exp((b-r)*T)*pnorm(phi*d1)
elast<-delta*S/value
gamma<-pnorm(d1)*exp((b-r)*T) / (S*v*sqrt(T))
vega<-S*exp((b-r)*T)*pnorm(d1)*sqrt(T)
#theta<-
#rho<-
list(v=value,d=delta,g=gamma,e=elast)
}
# TODO: FARE TEST
BS_all <- function(S,X,T,v,rd,rf=0,qcor=0,fxvol=0, phi=1) {GBS_all(S,X,T,v,rd,rd-qcor*v*fxvol,phi)}
B76_all <- function(S,X,T,v,rd,rf=0,qcor=0,fxvol=0, phi=1) {GBS_all(S,X,T,v,rd,-qcor*v*fxvol,phi)}
BSM_all <- function(S,X,T,v,rd,rf=0,d,qcor=0,fxvol=0, phi=1) {GBS_all(S,X,T,v,rd,rf-d-qcor*v*fxvol,phi)}
GK_all <- function(S,X,T,v,rd,rf=0,qcor=0,fxvol=0, phi=1) {GBS_all(S,X,T,v,rd,r-rf-qcor*v*fxvol,phi)}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.