what: character: what to compute. Currently only call or put are supported.
call: call price
put: put price
S: underlier
X: strike
tau: time to expiry
r: interest rate
q: dividend rate
tauD: numeric vector: time to dividend
D: numeric vector: dividends
Details
Put--call parity only works for European options. The function is vectorised (like vanillaOptionEuropean), except for dividends.
Returns
Numeric vector.
References
Gilli, M., Maringer, D. and Schumann, E. (2019) Numerical Methods and Optimization in Finance. 2nd edition. Elsevier. tools:::Rd_expr_doi("10.1016/C2017-0-01621-X")
S <-100; X <-100; tau <-1; r <-0.02; q <-0.0;vol <-0.3; D <-20; tauD <-0.5call <- vanillaOptionEuropean(S, X, tau, r, q, vol^2, tauD = tauD, D = D, type ="call")$value
put <- vanillaOptionEuropean(S, X, tau, r, q, vol^2, tauD = tauD, D = D, type ="put")$value
## recover the call from the put (et vice versa)all.equal(call, putCallParity("call", put = put, S=S, X=X, tau=tau, r=r, q=q, tauD=tauD, D=D))all.equal(put, putCallParity("put", call = call, S=S, X=X, tau=tau, r=r, q=q, tauD=tauD, D=D))## Black--Scholes--Merton with with 'callCF'S <-100; X <-90; tau <-1; r <-0.02; q <-0.08v <-0.2^2## variance, not volatility(ccf <- callCF(cf = cfBSM, S = S, X = X, tau = tau, r = r, q = q, v = v, implVol =TRUE))all.equal(ccf$value, vanillaOptionEuropean(S, X, tau, r, q, v, type ="call")$value)all.equal( putCallParity("put", call=ccf$value, S=S, X=X, tau=tau, r=r, q=q), vanillaOptionEuropean(S, X, tau, r, q, v, type ="put")$value)