Skip to content

Commit

Permalink
harami
Browse files Browse the repository at this point in the history
  • Loading branch information
m5l14i11 committed Aug 1, 2023
1 parent 8ff1c1b commit c31de09
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 3 deletions.
64 changes: 64 additions & 0 deletions ta_lib/patterns/src/harami_flexible.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
use core::series::Series;

pub fn bullish(open: &[f64], high: &[f64], low: &[f64], close: &[f64]) -> Vec<bool> {
let open = Series::from(open);
let high = Series::from(high);
let low = Series::from(low);
let close = Series::from(close);

(close.lt(&open.shift(1))
& open.gte(&close.shift(1))
& high.lt(&high.shift(1))
& low.gt(&low.shift(1))
& close.gt(&open)
& close.shift(1).lt(&open.shift(1))
& close.shift(2).lt(&open.shift(2)))
.into()
}

pub fn bearish(open: &[f64], high: &[f64], low: &[f64], close: &[f64]) -> Vec<bool> {
let open = Series::from(open);
let high = Series::from(high);
let low = Series::from(low);
let close = Series::from(close);

(close.gt(&open.shift(1))
& open.lte(&close.shift(1))
& high.lt(&high.shift(1))
& low.gt(&low.shift(1))
& close.lt(&open)
& close.shift(1).gt(&open.shift(1))
& close.shift(2).gt(&open.shift(2)))
.into()
}

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

#[test]
fn test_harami_flexible_bullish() {
let open = vec![4.0, 3.0, 4.0, 3.0, 4.0];
let high = vec![4.5, 3.5, 4.5, 3.5, 4.5];
let low = vec![4.0, 3.0, 4.0, 3.0, 4.0];
let close = vec![4.5, 3.5, 4.5, 3.5, 4.5];
let expected = vec![false, false, false, false, false];

let result = bullish(&open, &high, &low, &close);

assert_eq!(result, expected);
}

#[test]
fn test_harami_flexible_bearish() {
let open = vec![4.0, 3.0, 4.0, 3.0, 4.0];
let high = vec![4.0, 3.0, 4.0, 3.0, 4.0];
let low = vec![3.5, 2.5, 3.5, 2.5, 3.5];
let close = vec![3.5, 2.5, 3.5, 2.5, 3.5];
let expected = vec![false, false, false, false, false];

let result = bearish(&open, &high, &low, &close);

assert_eq!(result, expected);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ mod tests {
use super::*;

#[test]
fn test_harami_bullish() {
fn test_harami_strict_bullish() {
let open = vec![4.0, 3.0, 4.0, 3.0, 4.0];
let high = vec![4.5, 3.5, 4.5, 3.5, 4.5];
let low = vec![4.0, 3.0, 4.0, 3.0, 4.0];
Expand All @@ -46,7 +46,7 @@ mod tests {
}

#[test]
fn test_harami_bearish() {
fn test_harami_strict_bearish() {
let open = vec![4.0, 3.0, 4.0, 3.0, 4.0];
let high = vec![4.0, 3.0, 4.0, 3.0, 4.0];
let low = vec![3.5, 2.5, 3.5, 2.5, 3.5];
Expand Down
3 changes: 2 additions & 1 deletion ta_lib/patterns/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ pub mod doji;
pub mod double_doji;
pub mod engulfing;
pub mod h;
pub mod harami;
pub mod harami_flexible;
pub mod harami_strict;
pub mod hexad;
pub mod marubozu;
pub mod on_neck;
Expand Down

0 comments on commit c31de09

Please sign in to comment.