ta_lib_in_rust/indicators/oscillators/
mod.rs1use polars::prelude::*;
4
5pub mod dpo;
7pub mod macd;
8pub mod ppo;
9pub mod rsi;
10pub mod stoch_rsi;
11pub mod stochastic;
12pub mod trix;
13pub mod ultimate_oscillator;
14pub mod williams_r;
15
16pub use dpo::calculate_dpo;
18pub use macd::calculate_macd;
19pub use ppo::calculate_ppo;
20pub use rsi::calculate_rsi;
21pub use stoch_rsi::calculate_stoch_rsi;
22pub use stochastic::calculate_stochastic;
23pub use trix::calculate_trix;
24pub use ultimate_oscillator::calculate_ultimate_oscillator;
25pub use williams_r::calculate_williams_r;
26
27pub fn add_oscillator_indicators(df: &DataFrame) -> PolarsResult<DataFrame> {
50 let mut result_df = df.clone();
51
52 let rsi_14 = calculate_rsi(df, 14, "close")?;
54 result_df.with_column(rsi_14)?;
55
56 let (macd, macd_signal) = calculate_macd(df, 12, 26, 9, "close")?;
58 result_df.with_column(macd)?;
59 result_df.with_column(macd_signal)?;
60
61 let williams_r_14 = calculate_williams_r(df, 14)?;
63 result_df.with_column(williams_r_14)?;
64
65 let (stoch_k, stoch_d) = calculate_stochastic(df, 14, 3, 3)?;
67 result_df.with_column(stoch_k)?;
68 result_df.with_column(stoch_d)?;
69
70 Ok(result_df)
71}