HQu-0.0.0.0: src/Q/Options/ImpliedVol/LetsBeRational.hs
{-# LANGUAGE ForeignFunctionInterface #-}
module Q.Options.ImpliedVol.LetsBeRational (
euImpliedVol
) where
import Data.Coerce (coerce)
import Data.Number.Erf
import Foreign.C.Types
import Numeric.IEEE (epsilon, maxFinite, minNormal)
import Q.Options.BlackScholes
import Q.Options
import Q.Types
import Statistics.Distribution (cumulative, density, quantile)
import Statistics.Distribution.Normal (standard)
foreign import ccall
"lets_be_rational.h implied_volatility_from_a_transformed_rational_guess" c_lbr ::
CDouble -> CDouble -> CDouble -> CDouble -> CDouble -> CDouble
euImpliedVol :: OptionType -> Forward -> Strike -> YearFrac -> Rate -> Premium -> Vol
euImpliedVol cp (Forward f) (Strike k) (YearFrac t) (Rate r) (Premium p) =
coerce $ c_lbr (CDouble p) (CDouble f) (CDouble k) (CDouble t) (CDouble (cpi cp))