ta_lib_in_rust/indicators/moving_averages/
hull.rs1use polars::prelude::*;
2
3pub fn calculate_hma(df: &DataFrame, column: &str, period: usize) -> PolarsResult<Series> {
7 let half_period = period / 2;
9
10 let wma_full = super::wma::calculate_wma(df, column, period)?;
12 let wma_half = super::wma::calculate_wma(df, column, half_period)?;
13
14 let raw_hma = wma_half
16 .multiply(&Series::new("mult".into(), &[2.0f64]))?
17 .subtract(&wma_full)?;
18
19 let temp_df = DataFrame::new(vec![raw_hma.clone().into()])?;
21
22 let sqrt_period = (period as f64).sqrt().round() as usize;
24 super::wma::calculate_wma(&temp_df, raw_hma.name(), sqrt_period)
25}