Skip to content

Commit

Permalink
vama
Browse files Browse the repository at this point in the history
  • Loading branch information
m5l14i11 committed Jun 25, 2023
1 parent fccbddd commit 48736e6
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 0 deletions.
1 change: 1 addition & 0 deletions ta_lib/overlap/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ edition = "2021"

[dependencies]
price = { path = "../price" }
statistics = { path = "../statistics" }
48 changes: 48 additions & 0 deletions ta_lib/overlap/src/vama.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
use statistics::stddev::std_dev;

pub fn vama(
close: &[f64],
short_volatility: usize,
long_volatility: usize,
alpha_factor: f64,
) -> Vec<Option<f64>> {
let short_std = std_dev(close, short_volatility);
let long_std = std_dev(close, long_volatility);

let mut alpha = vec![None; close.len()];
let mut vama = vec![None; close.len()];

for i in 0..close.len() {
if let (Some(ss), Some(ls)) = (short_std[i], long_std[i]) {
alpha[i] = Some((ss / ls) * alpha_factor);
}
}

let alpha = alpha.iter().filter_map(|&x| x).collect::<Vec<_>>();

vama = ema(&alpha, short_volatility);

vama
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_vama() {
let close = vec![100.0, 105.0, 110.0, 115.0, 120.0];
let short_volatility = 2;
let long_volatility = 3;
let alpha_factor = 0.5;
let expected = vec![
None,
Some(102.5),
Some(106.25),
Some(110.625),
Some(115.3125),
];
let result = vama(&close, short_volatility, long_volatility, alpha_factor);
assert_eq!(result, expected);
}
}

0 comments on commit 48736e6

Please sign in to comment.