use std::rc::Rc;
use std::time::Duration;
use wingfoil::adapters::statistics::*;
use wingfoil::*;
fn main() {
let price = ticker(Duration::from_millis(100))
.count()
.map(|n: u64| 100.0 + ((n as f64) * 0.6).sin() * 5.0);
let labels = ["price", "ewma", "sma", "std", "min", "max", "twap"];
let columns: Vec<Rc<dyn Stream<f64>>> = vec![
price.clone(),
price.ewma(EwmaSpan::PerTick(0.3)),
price.mean(Window::Count(10), Weighting::Count),
price.std(Window::Count(10), Weighting::Count),
price.min(Window::Count(10)),
price.max(Window::Count(10)),
price.mean(Window::Unbounded, Weighting::Time),
];
print!("{:>6}", "time");
for label in labels {
print!(" {label:>7}");
}
println!();
let trigger = ticker(Duration::from_millis(500));
let table = combine(columns).sample(trigger).for_each(|row, time| {
print!("{:>5.1}s", f64::from(time) / 1e9);
for value in &row {
print!(" {value:>7.2}");
}
println!();
});
Graph::new(
vec![table],
RunMode::HistoricalFrom(NanoTime::ZERO),
RunFor::Duration(Duration::from_secs(5)),
)
.run()
.unwrap();
}