{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module Q.Options.ImpliedVol.SVI where
import           Q.Types      (Forward (..), Strike (..), Vol (..),
                               YearFrac (..))
import           Q.Options.ImpliedVol.TimeSlice
import           GHC.Generics (Generic)
import Q.Greeks (Bump, Bumpable(..))

newtype Alpha  = Alpha  Double deriving ((forall x. Alpha -> Rep Alpha x)
-> (forall x. Rep Alpha x -> Alpha) -> Generic Alpha
forall x. Rep Alpha x -> Alpha
forall x. Alpha -> Rep Alpha x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Alpha x -> Alpha
$cfrom :: forall x. Alpha -> Rep Alpha x
Generic, Alpha -> Alpha -> Bool
(Alpha -> Alpha -> Bool) -> (Alpha -> Alpha -> Bool) -> Eq Alpha
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Alpha -> Alpha -> Bool
$c/= :: Alpha -> Alpha -> Bool
== :: Alpha -> Alpha -> Bool
$c== :: Alpha -> Alpha -> Bool
Eq, Int -> Alpha -> ShowS
[Alpha] -> ShowS
Alpha -> String
(Int -> Alpha -> ShowS)
-> (Alpha -> String) -> ([Alpha] -> ShowS) -> Show Alpha
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Alpha] -> ShowS
$cshowList :: [Alpha] -> ShowS
show :: Alpha -> String
$cshow :: Alpha -> String
showsPrec :: Int -> Alpha -> ShowS
$cshowsPrec :: Int -> Alpha -> ShowS
Show, Eq Alpha
Eq Alpha
-> (Alpha -> Alpha -> Ordering)
-> (Alpha -> Alpha -> Bool)
-> (Alpha -> Alpha -> Bool)
-> (Alpha -> Alpha -> Bool)
-> (Alpha -> Alpha -> Bool)
-> (Alpha -> Alpha -> Alpha)
-> (Alpha -> Alpha -> Alpha)
-> Ord Alpha
Alpha -> Alpha -> Bool
Alpha -> Alpha -> Ordering
Alpha -> Alpha -> Alpha
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Alpha -> Alpha -> Alpha
$cmin :: Alpha -> Alpha -> Alpha
max :: Alpha -> Alpha -> Alpha
$cmax :: Alpha -> Alpha -> Alpha
>= :: Alpha -> Alpha -> Bool
$c>= :: Alpha -> Alpha -> Bool
> :: Alpha -> Alpha -> Bool
$c> :: Alpha -> Alpha -> Bool
<= :: Alpha -> Alpha -> Bool
$c<= :: Alpha -> Alpha -> Bool
< :: Alpha -> Alpha -> Bool
$c< :: Alpha -> Alpha -> Bool
compare :: Alpha -> Alpha -> Ordering
$ccompare :: Alpha -> Alpha -> Ordering
$cp1Ord :: Eq Alpha
Ord, Integer -> Alpha
Alpha -> Alpha
Alpha -> Alpha -> Alpha
(Alpha -> Alpha -> Alpha)
-> (Alpha -> Alpha -> Alpha)
-> (Alpha -> Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Integer -> Alpha)
-> Num Alpha
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> Alpha
$cfromInteger :: Integer -> Alpha
signum :: Alpha -> Alpha
$csignum :: Alpha -> Alpha
abs :: Alpha -> Alpha
$cabs :: Alpha -> Alpha
negate :: Alpha -> Alpha
$cnegate :: Alpha -> Alpha
* :: Alpha -> Alpha -> Alpha
$c* :: Alpha -> Alpha -> Alpha
- :: Alpha -> Alpha -> Alpha
$c- :: Alpha -> Alpha -> Alpha
+ :: Alpha -> Alpha -> Alpha
$c+ :: Alpha -> Alpha -> Alpha
Num, Num Alpha
Num Alpha
-> (Alpha -> Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Rational -> Alpha)
-> Fractional Alpha
Rational -> Alpha
Alpha -> Alpha
Alpha -> Alpha -> Alpha
forall a.
Num a
-> (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
fromRational :: Rational -> Alpha
$cfromRational :: Rational -> Alpha
recip :: Alpha -> Alpha
$crecip :: Alpha -> Alpha
/ :: Alpha -> Alpha -> Alpha
$c/ :: Alpha -> Alpha -> Alpha
$cp1Fractional :: Num Alpha
Fractional, Fractional Alpha
Alpha
Fractional Alpha
-> Alpha
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha -> Alpha)
-> (Alpha -> Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> (Alpha -> Alpha)
-> Floating Alpha
Alpha -> Alpha
Alpha -> Alpha -> Alpha
forall a.
Fractional a
-> a
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> Floating a
log1mexp :: Alpha -> Alpha
$clog1mexp :: Alpha -> Alpha
log1pexp :: Alpha -> Alpha
$clog1pexp :: Alpha -> Alpha
expm1 :: Alpha -> Alpha
$cexpm1 :: Alpha -> Alpha
log1p :: Alpha -> Alpha
$clog1p :: Alpha -> Alpha
atanh :: Alpha -> Alpha
$catanh :: Alpha -> Alpha
acosh :: Alpha -> Alpha
$cacosh :: Alpha -> Alpha
asinh :: Alpha -> Alpha
$casinh :: Alpha -> Alpha
tanh :: Alpha -> Alpha
$ctanh :: Alpha -> Alpha
cosh :: Alpha -> Alpha
$ccosh :: Alpha -> Alpha
sinh :: Alpha -> Alpha
$csinh :: Alpha -> Alpha
atan :: Alpha -> Alpha
$catan :: Alpha -> Alpha
acos :: Alpha -> Alpha
$cacos :: Alpha -> Alpha
asin :: Alpha -> Alpha
$casin :: Alpha -> Alpha
tan :: Alpha -> Alpha
$ctan :: Alpha -> Alpha
cos :: Alpha -> Alpha
$ccos :: Alpha -> Alpha
sin :: Alpha -> Alpha
$csin :: Alpha -> Alpha
logBase :: Alpha -> Alpha -> Alpha
$clogBase :: Alpha -> Alpha -> Alpha
** :: Alpha -> Alpha -> Alpha
$c** :: Alpha -> Alpha -> Alpha
sqrt :: Alpha -> Alpha
$csqrt :: Alpha -> Alpha
log :: Alpha -> Alpha
$clog :: Alpha -> Alpha
exp :: Alpha -> Alpha
$cexp :: Alpha -> Alpha
pi :: Alpha
$cpi :: Alpha
$cp1Floating :: Fractional Alpha
Floating)
newtype Beta   = Beta   Double deriving ((forall x. Beta -> Rep Beta x)
-> (forall x. Rep Beta x -> Beta) -> Generic Beta
forall x. Rep Beta x -> Beta
forall x. Beta -> Rep Beta x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Beta x -> Beta
$cfrom :: forall x. Beta -> Rep Beta x
Generic, Beta -> Beta -> Bool
(Beta -> Beta -> Bool) -> (Beta -> Beta -> Bool) -> Eq Beta
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Beta -> Beta -> Bool
$c/= :: Beta -> Beta -> Bool
== :: Beta -> Beta -> Bool
$c== :: Beta -> Beta -> Bool
Eq, Int -> Beta -> ShowS
[Beta] -> ShowS
Beta -> String
(Int -> Beta -> ShowS)
-> (Beta -> String) -> ([Beta] -> ShowS) -> Show Beta
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Beta] -> ShowS
$cshowList :: [Beta] -> ShowS
show :: Beta -> String
$cshow :: Beta -> String
showsPrec :: Int -> Beta -> ShowS
$cshowsPrec :: Int -> Beta -> ShowS
Show, Eq Beta
Eq Beta
-> (Beta -> Beta -> Ordering)
-> (Beta -> Beta -> Bool)
-> (Beta -> Beta -> Bool)
-> (Beta -> Beta -> Bool)
-> (Beta -> Beta -> Bool)
-> (Beta -> Beta -> Beta)
-> (Beta -> Beta -> Beta)
-> Ord Beta
Beta -> Beta -> Bool
Beta -> Beta -> Ordering
Beta -> Beta -> Beta
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Beta -> Beta -> Beta
$cmin :: Beta -> Beta -> Beta
max :: Beta -> Beta -> Beta
$cmax :: Beta -> Beta -> Beta
>= :: Beta -> Beta -> Bool
$c>= :: Beta -> Beta -> Bool
> :: Beta -> Beta -> Bool
$c> :: Beta -> Beta -> Bool
<= :: Beta -> Beta -> Bool
$c<= :: Beta -> Beta -> Bool
< :: Beta -> Beta -> Bool
$c< :: Beta -> Beta -> Bool
compare :: Beta -> Beta -> Ordering
$ccompare :: Beta -> Beta -> Ordering
$cp1Ord :: Eq Beta
Ord, Integer -> Beta
Beta -> Beta
Beta -> Beta -> Beta
(Beta -> Beta -> Beta)
-> (Beta -> Beta -> Beta)
-> (Beta -> Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Integer -> Beta)
-> Num Beta
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> Beta
$cfromInteger :: Integer -> Beta
signum :: Beta -> Beta
$csignum :: Beta -> Beta
abs :: Beta -> Beta
$cabs :: Beta -> Beta
negate :: Beta -> Beta
$cnegate :: Beta -> Beta
* :: Beta -> Beta -> Beta
$c* :: Beta -> Beta -> Beta
- :: Beta -> Beta -> Beta
$c- :: Beta -> Beta -> Beta
+ :: Beta -> Beta -> Beta
$c+ :: Beta -> Beta -> Beta
Num, Num Beta
Num Beta
-> (Beta -> Beta -> Beta)
-> (Beta -> Beta)
-> (Rational -> Beta)
-> Fractional Beta
Rational -> Beta
Beta -> Beta
Beta -> Beta -> Beta
forall a.
Num a
-> (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
fromRational :: Rational -> Beta
$cfromRational :: Rational -> Beta
recip :: Beta -> Beta
$crecip :: Beta -> Beta
/ :: Beta -> Beta -> Beta
$c/ :: Beta -> Beta -> Beta
$cp1Fractional :: Num Beta
Fractional, Fractional Beta
Beta
Fractional Beta
-> Beta
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta -> Beta)
-> (Beta -> Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> (Beta -> Beta)
-> Floating Beta
Beta -> Beta
Beta -> Beta -> Beta
forall a.
Fractional a
-> a
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> Floating a
log1mexp :: Beta -> Beta
$clog1mexp :: Beta -> Beta
log1pexp :: Beta -> Beta
$clog1pexp :: Beta -> Beta
expm1 :: Beta -> Beta
$cexpm1 :: Beta -> Beta
log1p :: Beta -> Beta
$clog1p :: Beta -> Beta
atanh :: Beta -> Beta
$catanh :: Beta -> Beta
acosh :: Beta -> Beta
$cacosh :: Beta -> Beta
asinh :: Beta -> Beta
$casinh :: Beta -> Beta
tanh :: Beta -> Beta
$ctanh :: Beta -> Beta
cosh :: Beta -> Beta
$ccosh :: Beta -> Beta
sinh :: Beta -> Beta
$csinh :: Beta -> Beta
atan :: Beta -> Beta
$catan :: Beta -> Beta
acos :: Beta -> Beta
$cacos :: Beta -> Beta
asin :: Beta -> Beta
$casin :: Beta -> Beta
tan :: Beta -> Beta
$ctan :: Beta -> Beta
cos :: Beta -> Beta
$ccos :: Beta -> Beta
sin :: Beta -> Beta
$csin :: Beta -> Beta
logBase :: Beta -> Beta -> Beta
$clogBase :: Beta -> Beta -> Beta
** :: Beta -> Beta -> Beta
$c** :: Beta -> Beta -> Beta
sqrt :: Beta -> Beta
$csqrt :: Beta -> Beta
log :: Beta -> Beta
$clog :: Beta -> Beta
exp :: Beta -> Beta
$cexp :: Beta -> Beta
pi :: Beta
$cpi :: Beta
$cp1Floating :: Fractional Beta
Floating)
newtype Rho    = Rho    Double deriving ((forall x. Rho -> Rep Rho x)
-> (forall x. Rep Rho x -> Rho) -> Generic Rho
forall x. Rep Rho x -> Rho
forall x. Rho -> Rep Rho x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Rho x -> Rho
$cfrom :: forall x. Rho -> Rep Rho x
Generic, Rho -> Rho -> Bool
(Rho -> Rho -> Bool) -> (Rho -> Rho -> Bool) -> Eq Rho
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Rho -> Rho -> Bool
$c/= :: Rho -> Rho -> Bool
== :: Rho -> Rho -> Bool
$c== :: Rho -> Rho -> Bool
Eq, Int -> Rho -> ShowS
[Rho] -> ShowS
Rho -> String
(Int -> Rho -> ShowS)
-> (Rho -> String) -> ([Rho] -> ShowS) -> Show Rho
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Rho] -> ShowS
$cshowList :: [Rho] -> ShowS
show :: Rho -> String
$cshow :: Rho -> String
showsPrec :: Int -> Rho -> ShowS
$cshowsPrec :: Int -> Rho -> ShowS
Show, Eq Rho
Eq Rho
-> (Rho -> Rho -> Ordering)
-> (Rho -> Rho -> Bool)
-> (Rho -> Rho -> Bool)
-> (Rho -> Rho -> Bool)
-> (Rho -> Rho -> Bool)
-> (Rho -> Rho -> Rho)
-> (Rho -> Rho -> Rho)
-> Ord Rho
Rho -> Rho -> Bool
Rho -> Rho -> Ordering
Rho -> Rho -> Rho
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Rho -> Rho -> Rho
$cmin :: Rho -> Rho -> Rho
max :: Rho -> Rho -> Rho
$cmax :: Rho -> Rho -> Rho
>= :: Rho -> Rho -> Bool
$c>= :: Rho -> Rho -> Bool
> :: Rho -> Rho -> Bool
$c> :: Rho -> Rho -> Bool
<= :: Rho -> Rho -> Bool
$c<= :: Rho -> Rho -> Bool
< :: Rho -> Rho -> Bool
$c< :: Rho -> Rho -> Bool
compare :: Rho -> Rho -> Ordering
$ccompare :: Rho -> Rho -> Ordering
$cp1Ord :: Eq Rho
Ord, Integer -> Rho
Rho -> Rho
Rho -> Rho -> Rho
(Rho -> Rho -> Rho)
-> (Rho -> Rho -> Rho)
-> (Rho -> Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Integer -> Rho)
-> Num Rho
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> Rho
$cfromInteger :: Integer -> Rho
signum :: Rho -> Rho
$csignum :: Rho -> Rho
abs :: Rho -> Rho
$cabs :: Rho -> Rho
negate :: Rho -> Rho
$cnegate :: Rho -> Rho
* :: Rho -> Rho -> Rho
$c* :: Rho -> Rho -> Rho
- :: Rho -> Rho -> Rho
$c- :: Rho -> Rho -> Rho
+ :: Rho -> Rho -> Rho
$c+ :: Rho -> Rho -> Rho
Num, Num Rho
Num Rho
-> (Rho -> Rho -> Rho)
-> (Rho -> Rho)
-> (Rational -> Rho)
-> Fractional Rho
Rational -> Rho
Rho -> Rho
Rho -> Rho -> Rho
forall a.
Num a
-> (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
fromRational :: Rational -> Rho
$cfromRational :: Rational -> Rho
recip :: Rho -> Rho
$crecip :: Rho -> Rho
/ :: Rho -> Rho -> Rho
$c/ :: Rho -> Rho -> Rho
$cp1Fractional :: Num Rho
Fractional, Fractional Rho
Rho
Fractional Rho
-> Rho
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho -> Rho)
-> (Rho -> Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> (Rho -> Rho)
-> Floating Rho
Rho -> Rho
Rho -> Rho -> Rho
forall a.
Fractional a
-> a
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> Floating a
log1mexp :: Rho -> Rho
$clog1mexp :: Rho -> Rho
log1pexp :: Rho -> Rho
$clog1pexp :: Rho -> Rho
expm1 :: Rho -> Rho
$cexpm1 :: Rho -> Rho
log1p :: Rho -> Rho
$clog1p :: Rho -> Rho
atanh :: Rho -> Rho
$catanh :: Rho -> Rho
acosh :: Rho -> Rho
$cacosh :: Rho -> Rho
asinh :: Rho -> Rho
$casinh :: Rho -> Rho
tanh :: Rho -> Rho
$ctanh :: Rho -> Rho
cosh :: Rho -> Rho
$ccosh :: Rho -> Rho
sinh :: Rho -> Rho
$csinh :: Rho -> Rho
atan :: Rho -> Rho
$catan :: Rho -> Rho
acos :: Rho -> Rho
$cacos :: Rho -> Rho
asin :: Rho -> Rho
$casin :: Rho -> Rho
tan :: Rho -> Rho
$ctan :: Rho -> Rho
cos :: Rho -> Rho
$ccos :: Rho -> Rho
sin :: Rho -> Rho
$csin :: Rho -> Rho
logBase :: Rho -> Rho -> Rho
$clogBase :: Rho -> Rho -> Rho
** :: Rho -> Rho -> Rho
$c** :: Rho -> Rho -> Rho
sqrt :: Rho -> Rho
$csqrt :: Rho -> Rho
log :: Rho -> Rho
$clog :: Rho -> Rho
exp :: Rho -> Rho
$cexp :: Rho -> Rho
pi :: Rho
$cpi :: Rho
$cp1Floating :: Fractional Rho
Floating)
newtype M      = M      Double deriving ((forall x. M -> Rep M x) -> (forall x. Rep M x -> M) -> Generic M
forall x. Rep M x -> M
forall x. M -> Rep M x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep M x -> M
$cfrom :: forall x. M -> Rep M x
Generic, M -> M -> Bool
(M -> M -> Bool) -> (M -> M -> Bool) -> Eq M
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: M -> M -> Bool
$c/= :: M -> M -> Bool
== :: M -> M -> Bool
$c== :: M -> M -> Bool
Eq, Int -> M -> ShowS
[M] -> ShowS
M -> String
(Int -> M -> ShowS) -> (M -> String) -> ([M] -> ShowS) -> Show M
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [M] -> ShowS
$cshowList :: [M] -> ShowS
show :: M -> String
$cshow :: M -> String
showsPrec :: Int -> M -> ShowS
$cshowsPrec :: Int -> M -> ShowS
Show, Eq M
Eq M
-> (M -> M -> Ordering)
-> (M -> M -> Bool)
-> (M -> M -> Bool)
-> (M -> M -> Bool)
-> (M -> M -> Bool)
-> (M -> M -> M)
-> (M -> M -> M)
-> Ord M
M -> M -> Bool
M -> M -> Ordering
M -> M -> M
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: M -> M -> M
$cmin :: M -> M -> M
max :: M -> M -> M
$cmax :: M -> M -> M
>= :: M -> M -> Bool
$c>= :: M -> M -> Bool
> :: M -> M -> Bool
$c> :: M -> M -> Bool
<= :: M -> M -> Bool
$c<= :: M -> M -> Bool
< :: M -> M -> Bool
$c< :: M -> M -> Bool
compare :: M -> M -> Ordering
$ccompare :: M -> M -> Ordering
$cp1Ord :: Eq M
Ord, Integer -> M
M -> M
M -> M -> M
(M -> M -> M)
-> (M -> M -> M)
-> (M -> M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (Integer -> M)
-> Num M
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> M
$cfromInteger :: Integer -> M
signum :: M -> M
$csignum :: M -> M
abs :: M -> M
$cabs :: M -> M
negate :: M -> M
$cnegate :: M -> M
* :: M -> M -> M
$c* :: M -> M -> M
- :: M -> M -> M
$c- :: M -> M -> M
+ :: M -> M -> M
$c+ :: M -> M -> M
Num, Num M
Num M
-> (M -> M -> M) -> (M -> M) -> (Rational -> M) -> Fractional M
Rational -> M
M -> M
M -> M -> M
forall a.
Num a
-> (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
fromRational :: Rational -> M
$cfromRational :: Rational -> M
recip :: M -> M
$crecip :: M -> M
/ :: M -> M -> M
$c/ :: M -> M -> M
$cp1Fractional :: Num M
Fractional, Fractional M
M
Fractional M
-> M
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M -> M)
-> (M -> M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> (M -> M)
-> Floating M
M -> M
M -> M -> M
forall a.
Fractional a
-> a
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> Floating a
log1mexp :: M -> M
$clog1mexp :: M -> M
log1pexp :: M -> M
$clog1pexp :: M -> M
expm1 :: M -> M
$cexpm1 :: M -> M
log1p :: M -> M
$clog1p :: M -> M
atanh :: M -> M
$catanh :: M -> M
acosh :: M -> M
$cacosh :: M -> M
asinh :: M -> M
$casinh :: M -> M
tanh :: M -> M
$ctanh :: M -> M
cosh :: M -> M
$ccosh :: M -> M
sinh :: M -> M
$csinh :: M -> M
atan :: M -> M
$catan :: M -> M
acos :: M -> M
$cacos :: M -> M
asin :: M -> M
$casin :: M -> M
tan :: M -> M
$ctan :: M -> M
cos :: M -> M
$ccos :: M -> M
sin :: M -> M
$csin :: M -> M
logBase :: M -> M -> M
$clogBase :: M -> M -> M
** :: M -> M -> M
$c** :: M -> M -> M
sqrt :: M -> M
$csqrt :: M -> M
log :: M -> M
$clog :: M -> M
exp :: M -> M
$cexp :: M -> M
pi :: M
$cpi :: M
$cp1Floating :: Fractional M
Floating)
newtype Sigma  = Sigma  Double deriving ((forall x. Sigma -> Rep Sigma x)
-> (forall x. Rep Sigma x -> Sigma) -> Generic Sigma
forall x. Rep Sigma x -> Sigma
forall x. Sigma -> Rep Sigma x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Sigma x -> Sigma
$cfrom :: forall x. Sigma -> Rep Sigma x
Generic, Sigma -> Sigma -> Bool
(Sigma -> Sigma -> Bool) -> (Sigma -> Sigma -> Bool) -> Eq Sigma
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Sigma -> Sigma -> Bool
$c/= :: Sigma -> Sigma -> Bool
== :: Sigma -> Sigma -> Bool
$c== :: Sigma -> Sigma -> Bool
Eq, Int -> Sigma -> ShowS
[Sigma] -> ShowS
Sigma -> String
(Int -> Sigma -> ShowS)
-> (Sigma -> String) -> ([Sigma] -> ShowS) -> Show Sigma
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Sigma] -> ShowS
$cshowList :: [Sigma] -> ShowS
show :: Sigma -> String
$cshow :: Sigma -> String
showsPrec :: Int -> Sigma -> ShowS
$cshowsPrec :: Int -> Sigma -> ShowS
Show, Eq Sigma
Eq Sigma
-> (Sigma -> Sigma -> Ordering)
-> (Sigma -> Sigma -> Bool)
-> (Sigma -> Sigma -> Bool)
-> (Sigma -> Sigma -> Bool)
-> (Sigma -> Sigma -> Bool)
-> (Sigma -> Sigma -> Sigma)
-> (Sigma -> Sigma -> Sigma)
-> Ord Sigma
Sigma -> Sigma -> Bool
Sigma -> Sigma -> Ordering
Sigma -> Sigma -> Sigma
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Sigma -> Sigma -> Sigma
$cmin :: Sigma -> Sigma -> Sigma
max :: Sigma -> Sigma -> Sigma
$cmax :: Sigma -> Sigma -> Sigma
>= :: Sigma -> Sigma -> Bool
$c>= :: Sigma -> Sigma -> Bool
> :: Sigma -> Sigma -> Bool
$c> :: Sigma -> Sigma -> Bool
<= :: Sigma -> Sigma -> Bool
$c<= :: Sigma -> Sigma -> Bool
< :: Sigma -> Sigma -> Bool
$c< :: Sigma -> Sigma -> Bool
compare :: Sigma -> Sigma -> Ordering
$ccompare :: Sigma -> Sigma -> Ordering
$cp1Ord :: Eq Sigma
Ord, Integer -> Sigma
Sigma -> Sigma
Sigma -> Sigma -> Sigma
(Sigma -> Sigma -> Sigma)
-> (Sigma -> Sigma -> Sigma)
-> (Sigma -> Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Integer -> Sigma)
-> Num Sigma
forall a.
(a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (Integer -> a)
-> Num a
fromInteger :: Integer -> Sigma
$cfromInteger :: Integer -> Sigma
signum :: Sigma -> Sigma
$csignum :: Sigma -> Sigma
abs :: Sigma -> Sigma
$cabs :: Sigma -> Sigma
negate :: Sigma -> Sigma
$cnegate :: Sigma -> Sigma
* :: Sigma -> Sigma -> Sigma
$c* :: Sigma -> Sigma -> Sigma
- :: Sigma -> Sigma -> Sigma
$c- :: Sigma -> Sigma -> Sigma
+ :: Sigma -> Sigma -> Sigma
$c+ :: Sigma -> Sigma -> Sigma
Num, Num Sigma
Num Sigma
-> (Sigma -> Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Rational -> Sigma)
-> Fractional Sigma
Rational -> Sigma
Sigma -> Sigma
Sigma -> Sigma -> Sigma
forall a.
Num a
-> (a -> a -> a) -> (a -> a) -> (Rational -> a) -> Fractional a
fromRational :: Rational -> Sigma
$cfromRational :: Rational -> Sigma
recip :: Sigma -> Sigma
$crecip :: Sigma -> Sigma
/ :: Sigma -> Sigma -> Sigma
$c/ :: Sigma -> Sigma -> Sigma
$cp1Fractional :: Num Sigma
Fractional, Fractional Sigma
Sigma
Fractional Sigma
-> Sigma
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma -> Sigma)
-> (Sigma -> Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> (Sigma -> Sigma)
-> Floating Sigma
Sigma -> Sigma
Sigma -> Sigma -> Sigma
forall a.
Fractional a
-> a
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> (a -> a)
-> Floating a
log1mexp :: Sigma -> Sigma
$clog1mexp :: Sigma -> Sigma
log1pexp :: Sigma -> Sigma
$clog1pexp :: Sigma -> Sigma
expm1 :: Sigma -> Sigma
$cexpm1 :: Sigma -> Sigma
log1p :: Sigma -> Sigma
$clog1p :: Sigma -> Sigma
atanh :: Sigma -> Sigma
$catanh :: Sigma -> Sigma
acosh :: Sigma -> Sigma
$cacosh :: Sigma -> Sigma
asinh :: Sigma -> Sigma
$casinh :: Sigma -> Sigma
tanh :: Sigma -> Sigma
$ctanh :: Sigma -> Sigma
cosh :: Sigma -> Sigma
$ccosh :: Sigma -> Sigma
sinh :: Sigma -> Sigma
$csinh :: Sigma -> Sigma
atan :: Sigma -> Sigma
$catan :: Sigma -> Sigma
acos :: Sigma -> Sigma
$cacos :: Sigma -> Sigma
asin :: Sigma -> Sigma
$casin :: Sigma -> Sigma
tan :: Sigma -> Sigma
$ctan :: Sigma -> Sigma
cos :: Sigma -> Sigma
$ccos :: Sigma -> Sigma
sin :: Sigma -> Sigma
$csin :: Sigma -> Sigma
logBase :: Sigma -> Sigma -> Sigma
$clogBase :: Sigma -> Sigma -> Sigma
** :: Sigma -> Sigma -> Sigma
$c** :: Sigma -> Sigma -> Sigma
sqrt :: Sigma -> Sigma
$csqrt :: Sigma -> Sigma
log :: Sigma -> Sigma
$clog :: Sigma -> Sigma
exp :: Sigma -> Sigma
$cexp :: Sigma -> Sigma
pi :: Sigma
$cpi :: Sigma
$cp1Floating :: Fractional Sigma
Floating)

-- | Stochastic volatility inspired parameterization of the vol surface.
data SVI = RSVI    -- ^ The original raw SVI representation from Gatheral
           Alpha   -- ^ Corresponds to a vertical translation of the smile.
           Beta    -- ^ Slope of call and put wings.
           Rho     -- ^ A counter clock wise rotation of the smile.
           M       -- ^ translate the smile to the right
           Sigma   -- ^ ATM curviture of the smile.

instance TimeSlice SVI LogRelStrike  where
  totalVar :: SVI -> LogRelStrike -> TotalVar
totalVar (RSVI (Alpha Double
𝜶) (Beta Double
𝜷) (Rho Double
𝛒) (M Double
𝐦) (Sigma Double
𝛔)) (LogRel Double
𝐤) =
    Double -> TotalVar
TotalVar (Double -> TotalVar) -> Double -> TotalVar
forall a b. (a -> b) -> a -> b
$ Double
𝜶 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
𝜷 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
𝛒 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
𝐤 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
𝐦) Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double -> Double
forall a. Floating a => a -> a
sqrt ((Double
𝐤 Double -> Double -> Double
forall a. Num a => a -> a -> a
- Double
𝐦) Double -> Double -> Double
forall a. Floating a => a -> a -> a
** Double
2 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
𝛔 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
𝛔))


isValidSVI :: SVI -> Bool
isValidSVI (RSVI (Alpha Double
𝜶) (Beta Double
𝜷) (Rho Double
𝛒) (M Double
𝐦) (Sigma Double
𝛔)) =
    Double
𝜷 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
0
  Bool -> Bool -> Bool
&& Double -> Double
forall a. Num a => a -> a
abs Double
𝛒 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
< Double
1
  Bool -> Bool -> Bool
&& Double
𝛔 Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
> Double
0
  Bool -> Bool -> Bool
&& Double
𝜶 Double -> Double -> Double
forall a. Num a => a -> a -> a
+ Double
𝜷 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
𝛔 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double -> Double
forall a. Floating a => a -> a
sqrt (Double
1 Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
𝛒Double -> Double -> Double
forall a. Num a => a -> a -> a
*Double
𝛒) Double -> Double -> Bool
forall a. Ord a => a -> a -> Bool
>= Double
0