From e22d0d7e9967a90c272970fa219505547d498c51 Mon Sep 17 00:00:00 2001 From: Daniel Boros Date: Fri, 27 Sep 2024 13:32:59 +0200 Subject: [PATCH] feat: rename heston params --- stochastic-rs-core/Cargo.toml | 1 + stochastic-rs-core/src/main.rs | 63 +++++++-------------- stochastic-rs-core/src/volatility/heston.rs | 8 +-- 3 files changed, 26 insertions(+), 46 deletions(-) diff --git a/stochastic-rs-core/Cargo.toml b/stochastic-rs-core/Cargo.toml index 5654aaa..a6176d8 100644 --- a/stochastic-rs-core/Cargo.toml +++ b/stochastic-rs-core/Cargo.toml @@ -15,6 +15,7 @@ keywords = ["stochastic", "process", "random", "simulation", "monte-carlo"] ndarray = { version = "0.16.1", features = [ "rayon", "matrixmultiply-threading", + "blas" ] } num-complex = { version = "0.4.6", features = ["rand"] } rand = "0.8.5" diff --git a/stochastic-rs-core/src/main.rs b/stochastic-rs-core/src/main.rs index c58f0e4..b65626f 100644 --- a/stochastic-rs-core/src/main.rs +++ b/stochastic-rs-core/src/main.rs @@ -1,50 +1,29 @@ -use stochastic_rs::{process::fbm::Fbm, Sampling}; +use stochastic_rs::{noise::fgn::Fgn, Sampling}; fn main() { - // let fbm = Fbm::new(&Fbm { - // hurst: 0.9, - // n: 10000, - // t: None, - // m: Some(100), - // ..Default::default() - // }); + let fbm = Fgn::new(0.9, 10000, None, Some(10000)); - // let mut runs = Vec::new(); - - // for _ in 0..20 { - // let start = std::time::Instant::now(); - // for _ in 0..1000 { - // let _ = fbm.sample_par(); - // } + let start = std::time::Instant::now(); + for _ in 0..10000 { + let _ = fbm.sample(); + } - // let duration = start.elapsed(); - // println!( - // "Time elapsed in expensive_function() is: {:?}", - // duration.as_secs_f32() - // ); - // runs.push(duration.as_secs_f32()); - // } + let duration = start.elapsed(); + println!( + "Time elapsed in expensive_function() is: {:?}", + duration.as_secs_f32() + ); - // let sum: f32 = runs.iter().sum(); - // let average = sum / runs.len() as f32; - // println!("Average time: {}", average); - let fbm = Fbm::new(&Fbm { - hurst: 0.9, - n: 10000, - t: None, - m: Some(100), - ..Default::default() - }); + let fbm = Fgn::new(0.9, 10000, None, Some(10000)); - for _ in 0..10 { - let start = std::time::Instant::now(); - for _ in 0..1000 { - let _ = fbm.sample(); - } - let duration = start.elapsed(); - println!( - "Time elapsed in expensive_function() is: {:?}", - duration.as_secs_f32() - ); + let start = std::time::Instant::now(); + for _ in 0..10000 { + let _ = fbm.sample(); } + + let duration = start.elapsed(); + println!( + "Time elapsed in expensive_function() is: {:?}", + duration.as_secs_f32() + ); } diff --git a/stochastic-rs-core/src/volatility/heston.rs b/stochastic-rs-core/src/volatility/heston.rs index d839ada..c877af8 100644 --- a/stochastic-rs-core/src/volatility/heston.rs +++ b/stochastic-rs-core/src/volatility/heston.rs @@ -8,7 +8,7 @@ pub struct Heston { pub mu: f64, pub kappa: f64, pub theta: f64, - pub eta: f64, + pub sigma: f64, pub rho: f64, pub n: usize, pub s0: Option, @@ -33,7 +33,7 @@ impl Heston { mu: params.mu, kappa: params.kappa, theta: params.theta, - eta: params.eta, + sigma: params.sigma, rho: params.rho, n: params.n, s0: params.s0, @@ -61,8 +61,8 @@ impl Sampling2D for Heston { s[i] = s[i - 1] + self.mu * s[i - 1] * dt + s[i - 1] * v[i - 1].sqrt() * cgn1[i - 1]; let random: f64 = match self.use_sym.unwrap_or(false) { - true => self.eta * (v[i - 1]).abs().sqrt() * cgn2[i - 1], - false => self.eta * (v[i - 1]).max(0.0).sqrt() * cgn2[i - 1], + true => self.sigma * (v[i - 1]).abs().sqrt() * cgn2[i - 1], + false => self.sigma * (v[i - 1]).max(0.0).sqrt() * cgn2[i - 1], }; v[i] = v[i - 1] + self.kappa * (self.theta - v[i - 1]) * dt + random; }