finance-query 3.0.0

A Rust library for querying financial data
Documentation
// @generated by `cargo soothfast docs gen-tests`
// source: docs/library/indicators.md line 145
#[cfg(feature = "indicators")]
fn main() {
    use finance_query::indicators::{bollinger_bands, macd, stochastic};

    // Synthetic OHLC series — with live data: chart.close_prices() etc.
    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();

    // Bollinger Bands - returns BollingerBands struct
    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
        );
    }

    // Stochastic Oscillator - returns StochasticResult struct
    // Args: k_period, k_slow (1 = no smoothing), d_period
    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);
    }

    // MACD - returns MacdResult struct
    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() {}