inditech 0.1.0

A set of technical indicators for time series analysis
Documentation
use inditech::{Frame, EMA, ROC, RSI, SMA};
use rand::{thread_rng, Rng};

fn generate_data() -> Vec<f32> {
    let mut rng = thread_rng();
    let mut v = Vec::with_capacity(256);

    v.push(10.);

    for _ in 1..v.capacity() {
        let item = rng.gen::<f32>();
        v.push((item - 0.5) * 1. + v.last().copied().unwrap_or_default());
    }

    v
}

#[test]
fn plot() {
    let data = generate_data();
    let mut frame = Frame::new();

    frame.add(Box::new(SMA::new(8)));
    frame.add(Box::new(EMA::new(8)));
    frame.add(Box::new(RSI::new(8)));
    frame.add(Box::new(ROC::new(8)));

    let file = std::fs::File::create("data.csv").unwrap();
    let mut wtr = csv::Writer::from_writer(file);

    let mut headers = vec!["data".to_owned()];
    headers.append(&mut frame.names());

    wtr.write_record(&headers).unwrap();
    for i in 0..data.len() {
        let item = *data.get(i).unwrap();
        frame.push(item);

        let mut row = vec![item];
        row.append(&mut frame.last());

        let row_str: Vec<String> = row.into_iter().map(|value| value.to_string()).collect();
        wtr.write_record(row_str).unwrap();
    }

    wtr.flush().unwrap();
}