pub mod adf;
pub mod kalman;
pub mod mackinnon;
pub mod metrics;
pub mod models;
pub mod simple;
pub mod utils;
use csv::Reader;
use serde::Deserialize;
pub type BoxErr = Box<dyn std::error::Error>;
#[derive(Debug, Deserialize)]
struct Record {
series_1: f64,
series_2: f64,
}
pub fn get_test_data() -> (Vec<f64>, Vec<f64>) {
let mut rdr: Reader<std::fs::File> = Reader::from_path("data/data3.csv").unwrap();
let mut series_1: Vec<f64> = vec![];
let mut series_2: Vec<f64> = vec![];
for result in rdr.deserialize() {
let record: Record = result.unwrap();
series_1.push(record.series_1);
series_2.push(record.series_2);
}
(series_1, series_2)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::metrics::{rolling_cointegration, rolling_correlation, rolling_zscore, spread_standard, spread_dynamic};
#[test]
fn integration_test() {
let (series_1, series_2) = get_test_data();
let x: &Vec<f64> = &series_1;
let y: &Vec<f64> = &series_2;
let w: usize = 50;
let spread_std: Vec<f64> = spread_standard(x, y).unwrap();
let spread_dyn: Vec<f64> = spread_dynamic(x, y).unwrap();
let roll_coint: Vec<f64> = rolling_cointegration(x, y, w).unwrap();
let roll_corr: Vec<f64> = rolling_correlation(x, y, w).unwrap();
let roll_zscore: Vec<f64> = rolling_zscore(&spread_std, w).unwrap();
assert_eq!(x.len(), y.len());
assert_eq!(x.len(), spread_std.len());
assert_eq!(x.len(), spread_dyn.len());
assert_eq!(x.len(), roll_coint.len());
assert_eq!(x.len(), roll_corr.len());
assert_eq!(x.len(), roll_zscore.len());
}
}