Indicator

Abstractions for stream aggregation, we call them Indicator s.

Crates.io MIT licensed Build Status

API Docs

Example

Add indicator as a dependency of your project.

toml [dependencies] indicator = "0.3" rust_decimal = "1.17.0" rust_decimal_macros = "1.17.0" time = { version = "0.3", default-features = false, features = ["macros"] }

And then, you can try these codes.

```rust use arrayvec::ArrayVec; use indicator::*; use rustdecimal::Decimal; use rustdecimal_macros::dec; use time::macros::{datetime, offset};

/// Return an indicator that calculate hl2 and ohlc4 simultaneously. fn hl2ohlc4(period: Period) -> impl Operator, Output = (Decimal, Decimal)> { tumbling( period, |w: &ArrayVec<[Decimal; 4], 0>, y: &mut Option<[Decimal; 4]>, x| match y { Some(ohlc) => { ohlc[1] = ohlc[1].max(x); ohlc[2] = ohlc[2].min(x); ohlc[3] = x; *ohlc } None => { let ohlc = [x; 4]; *y = Some(ohlc); ohlc } }, ) .then(facett( mapt(|ohlc: [Decimal; 4]| (ohlc[1] + ohlc[2]) / dec!(2)), map_t(|ohlc: [Decimal; 4]| (ohlc[0] + ohlc[1] + ohlc[2] + ohlc[3]) / dec!(4)), )) .map(|v| v.value) } ```