use std::fs::OpenOptions;
use std::io::Read;
use serde_derive::{Deserialize, Serialize};
use quotick::quotick::Quotick;
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
struct Trade {
size: u32,
price: u32,
}
impl quotick::tick::Tick for Trade {
fn epoch(&self, time: u64) -> u64 {
time / 86_400_000_000_000
}
}
#[derive(Debug, Serialize, Deserialize, Clone)]
pub struct TestDataTrade {
#[serde(rename = "T")]
T: Option<String>,
#[serde(rename = "t")]
t: i64,
#[serde(rename = "y")]
y: Option<i64>,
#[serde(rename = "f")]
f: Option<i64>,
#[serde(rename = "q")]
q: i64,
#[serde(rename = "i")]
i: String,
#[serde(rename = "x")]
x: i64,
#[serde(rename = "s")]
s: i64,
#[serde(rename = "c")]
c: Option<Vec<i64>>,
#[serde(rename = "p")]
p: Option<f32>,
#[serde(rename = "z")]
z: i64, }
fn run(ticks: &[TestDataTrade]) {
let mut quotick =
Quotick::<Trade>::new(
"SYMBL",
"./test_data/qt-db",
)
.expect("Could not open test database.");
for tick in ticks {
if let Some(_) = tick.p {
}
quotick.insert(
"ick::Frame::new(
tick.t as u64,
Trade {
size: tick.s as u32,
price: match tick.p {
Some(p) => p as u32,
None => { continue; }
},
},
)
);
}
quotick.persist();
quotick
.epochs()
.for_each(
|mut epoch| {
epoch
.frames()
.for_each(
|frame| {
frame.time();
},
);
}
);
}
fn main() {
let mut file =
OpenOptions::new()
.read(true)
.write(false)
.open("./test_data/test_data")
.expect("Could not open ./test_data/test_data for reading.");
let mut test_data = Vec::<u8>::new();
file.read_to_end(&mut test_data);
let ticks =
bincode::deserialize::<Vec<TestDataTrade>>(
&test_data,
)
.expect("Could not parse test data.");
run(&ticks);
}