Function black76
pub fn black76<R: Scalar>(
forward: R,
strike: f64,
vol: R,
expiry: f64,
kind: OptionKind,
) -> Result<R, ModelError>Expand description
The Black-76 forward-lognormal price, undiscounted.
omega·[F·N(omega·d1) − K·N(omega·d2)] with omega the option’s sign, which
is why there is one body rather than a call formula and a put formula that
have to be kept in step.
A non-positive variance is a degenerate case with an obvious answer —
no optionality left means intrinsic value — and that is returned. So is a
zero strike, the limit of the formula: a call is worth the forward and a
put nothing (a 0% floor). A
non-positive forward or a negative strike is not: see
ModelError::NotLognormal.
§Errors
ModelError::NotLognormal if the forward is not strictly positive or
the strike is negative.