pub struct HestonProcess {
pub mu: f64,
pub kappa: f64,
pub theta: f64,
pub sigma: f64,
pub rho: f64,
pub price: f64,
pub variance: f64,
/* private fields */
}Expand description
Heston stochastic volatility model.
$$dS_t = mu * S_t * dt + sqrt(v_t) * S_t * dW_t^S$$ $$dv_t = kappa * (theta - v_t) * dt + sigma * sqrt(v_t) * dW_t^v$$
with correlation rho between the two Brownian motions.
Fields§
§mu: f64§kappa: f64§theta: f64§sigma: f64§rho: f64§price: f64§variance: f64Implementations§
Source§impl HestonProcess
impl HestonProcess
pub fn new( mu: f64, kappa: f64, theta: f64, sigma: f64, rho: f64, initial_price: f64, initial_variance: f64, ) -> Self
pub fn price(&self) -> f64
pub fn volatility(&self) -> f64
Sourcepub fn expected_variance(&self, t: f64) -> f64
pub fn expected_variance(&self, t: f64) -> f64
Closed-form expected variance.
Sourcepub fn variance_of_variance(&self, t: f64) -> f64
pub fn variance_of_variance(&self, t: f64) -> f64
Closed-form variance of variance.
Trait Implementations§
Source§impl Clone for HestonProcess
impl Clone for HestonProcess
Source§fn clone(&self) -> HestonProcess
fn clone(&self) -> HestonProcess
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Simulatable for HestonProcess
impl Simulatable for HestonProcess
Source§type Output = (f64, f64)
type Output = (f64, f64)
The type emitted at each step (e.g.
f64 for GBM, BookSnapshot for L3).Source§fn dim(&self) -> usize
fn dim(&self) -> usize
Dimensionality of the Brownian driver. Used by the runner to
pre-generate the correct number of random normals per step.
GBM is 1, Heston is 2, etc.
Source§impl StochasticProcess for HestonProcess
impl StochasticProcess for HestonProcess
type State = ArrayBase<OwnedRepr<f64>, Dim<[usize; 1]>>
type Diffusion = ArrayBase<OwnedRepr<f64>, Dim<[usize; 2]>>
type BrownianIncrement = ArrayBase<OwnedRepr<f64>, Dim<[usize; 1]>>
fn drift(&self, x: &Array1<f64>, _t: f64) -> Array1<f64>
fn diffusion(&self, x: &Array1<f64>, _t: f64) -> Array2<f64>
fn jump_size<R: Rng + ?Sized>( &self, x: &Array1<f64>, _t: f64, _rng: &mut R, ) -> Array1<f64>
fn expected_value(&self, x0: &Array1<f64>, t: f64) -> Array1<f64>
fn variance(&self, x0: &Array1<f64>, t: f64) -> Array1<f64>
fn step<R: Rng + ?Sized>( &self, x: &Array1<f64>, t: f64, dt: f64, dw: &Array1<f64>, _rng: &mut R, ) -> Array1<f64>
fn generate_increment<R: Rng + ?Sized>( &self, rng: &mut R, dt: f64, ) -> Array1<f64>
fn simulate<R: Rng + ?Sized>( &self, x0: Array1<f64>, t0: f64, t_end: f64, dt: f64, rng: &mut R, ) -> Vec<(f64, Array1<f64>)>
fn jump_intensity(&self, _x: &Self::State, _t: f64) -> f64
fn simulate_paths( &self, x0: Self::State, t0: f64, t_end: f64, dt: f64, num_paths: usize, ) -> Vec<Vec<(f64, Self::State)>>
Auto Trait Implementations§
impl Freeze for HestonProcess
impl RefUnwindSafe for HestonProcess
impl Send for HestonProcess
impl Sync for HestonProcess
impl Unpin for HestonProcess
impl UnsafeUnpin for HestonProcess
impl UnwindSafe for HestonProcess
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more