Skip to content

Commit

Permalink
median, avg prices
Browse files Browse the repository at this point in the history
  • Loading branch information
m5l14i11 committed Jun 24, 2023
1 parent a1ade7c commit b76df0d
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 0 deletions.
32 changes: 32 additions & 0 deletions ta_lib/price/src/avg.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
pub fn average_price(open: &[f64], high: &[f64], low: &[f64], close: &[f64]) -> Vec<Option<f64>> {
let len = high.len();

if len != low.len() || len != open.len() || len != close.len() {
return vec![None; len];
}

high.iter()
.zip(low)
.zip(open)
.zip(close)
.map(|(((&h, &l), &o), &c)| Some((h + l + o + c) / 4.0))
.collect()
}

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

#[test]
fn test_average_price() {
let open = vec![1.5, 3.0, 4.5];
let high = vec![2.0, 4.0, 6.0];
let low = vec![1.0, 2.0, 3.0];
let close = vec![1.75, 3.5, 5.25];

let expected = vec![Some(1.5625), Some(3.125), Some(4.6875)];
let result = average_price(&open, &high, &low, &close);

assert_eq!(result, expected);
}
}
2 changes: 2 additions & 0 deletions ta_lib/price/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
pub mod avg;
pub mod median;
pub mod typical;
28 changes: 28 additions & 0 deletions ta_lib/price/src/median.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
pub fn median_price(high: &[f64], low: &[f64]) -> Vec<Option<f64>> {
let len = high.len();

if len != low.len() {
return vec![None; len];
}

high.iter()
.zip(low)
.map(|(&h, &l)| Some((h + l) / 2.0))
.collect()
}

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

#[test]
fn test_median_price() {
let high = vec![1.0, 2.0, 3.0];
let low = vec![0.5, 1.0, 2.0];

let expected = vec![Some(0.75), Some(1.5), Some(2.5)];
let result = median_price(&high, &low);

assert_eq!(result, expected);
}
}

0 comments on commit b76df0d

Please sign in to comment.