chrono-ta 2.2.0

Timestamp-aware, duration-windowed technical indicators for Rust
Documentation
use std::time::Duration;

use chrono::{Duration as ChronoDuration, TimeZone, Utc};
use chrono_ta::indicators::{AverageTrueRange, RollingVwap};
use chrono_ta::{DataItem, Next};

fn main() -> Result<(), chrono_ta::errors::TaError> {
    let start = Utc.with_ymd_and_hms(2026, 9, 20, 14, 30, 0).unwrap();
    let first = DataItem::builder()
        .open(100.0)
        .high(104.0)
        .low(99.0)
        .close(102.0)
        .volume(1_000.0)
        .build()?;
    let second = DataItem::builder()
        .open(102.0)
        .high(106.0)
        .low(101.0)
        .close(105.0)
        .volume(1_500.0)
        .build()?;

    let bucket = Duration::from_secs(60);
    let window = Duration::from_secs(15 * 60);
    let mut atr = AverageTrueRange::new(window, bucket)?;
    let mut vwap = RollingVwap::new(window, bucket)?;

    println!("ATR: {}", atr.next((start, first)));
    println!(
        "ATR: {}",
        atr.next((start + ChronoDuration::minutes(1), second))
    );
    println!("VWAP: {:?}", vwap.next((start, first)));
    println!(
        "VWAP: {:?}",
        vwap.next((start + ChronoDuration::minutes(1), second))
    );

    Ok(())
}