#[cfg(feature = "indicators")]
fn main() {
use finance_query::indicators::{bollinger_bands, macd, stochastic};
let closes: Vec<f64> = (0..300)
.map(|i| 100.0 + (i as f64 / 4.0).sin() * 8.0)
.collect();
let highs: Vec<f64> = closes.iter().map(|c| c + 1.0).collect();
let lows: Vec<f64> = closes.iter().map(|c| c - 1.0).collect();
let bb = bollinger_bands(&closes, 20, 2.0).unwrap();
assert_eq!(bb.upper.len(), closes.len());
if let (Some(upper), Some(middle), Some(lower)) = (
bb.upper.last().copied().flatten(),
bb.middle.last().copied().flatten(),
bb.lower.last().copied().flatten(),
) {
println!(
"BB: Upper={:.2}, Middle={:.2}, Lower={:.2}",
upper, middle, lower
);
}
let stoch = stochastic(&highs, &lows, &closes, 14, 1, 3).unwrap();
if let (Some(k), Some(d)) = (
stoch.k.last().copied().flatten(),
stoch.d.last().copied().flatten(),
) {
println!("Stochastic: %K={:.2}, %D={:.2}", k, d);
}
let macd_data = macd(&closes, 12, 26, 9).unwrap();
if let (Some(line), Some(signal), Some(hist)) = (
macd_data.macd_line.last().copied().flatten(),
macd_data.signal_line.last().copied().flatten(),
macd_data.histogram.last().copied().flatten(),
) {
println!(
"MACD: Line={:.4}, Signal={:.4}, Histogram={:.4}",
line, signal, hist
);
}
}
#[cfg(not(feature = "indicators"))]
fn main() {}