use polars::prelude::*;
pub mod dpo;
pub mod macd;
pub mod ppo;
pub mod rsi;
pub mod stoch_rsi;
pub mod stochastic;
pub mod trix;
pub mod ultimate_oscillator;
pub mod williams_r;
pub use dpo::calculate_dpo;
pub use macd::calculate_macd;
pub use ppo::calculate_ppo;
pub use rsi::calculate_rsi;
pub use stoch_rsi::calculate_stoch_rsi;
pub use stochastic::calculate_stochastic;
pub use trix::calculate_trix;
pub use ultimate_oscillator::calculate_ultimate_oscillator;
pub use williams_r::calculate_williams_r;
pub fn add_oscillator_indicators(df: &DataFrame) -> PolarsResult<DataFrame> {
let mut result_df = df.clone();
let rsi_14 = calculate_rsi(df, 14, "close")?;
result_df.with_column(rsi_14)?;
let (macd, macd_signal) = calculate_macd(df, 12, 26, 9, "close")?;
result_df.with_column(macd)?;
result_df.with_column(macd_signal)?;
let williams_r_14 = calculate_williams_r(df, 14)?;
result_df.with_column(williams_r_14)?;
let (stoch_k, stoch_d) = calculate_stochastic(df, 14, 3, 3)?;
result_df.with_column(stoch_k)?;
result_df.with_column(stoch_d)?;
Ok(result_df)
}