backtester/
utils.rs

1use std::f64;
2
3/// Number Round
4/// Round number to n decimal places
5pub fn round_float(num: f64, decimals: i32) -> f64 {
6  let multiplier: f64 = 10f64.powi(decimals);
7  (num * multiplier).round() / multiplier
8}
9
10/// Normalise Returns
11/// Converts log returns to normal for an array
12pub fn normalise_returns(log_returns: &Vec<f64>) -> Vec<f64> {
13  log_returns.iter().map(|&x| f64::exp(x) - 1.0).collect()
14}
15
16/// Cumulative Returns
17/// Cumulatively adds and log returns
18pub fn cumulative_returns(log_returns: &Vec<f64>) -> Vec<f64> {
19  log_returns.iter().scan(0.0, |state, &x| {
20    *state = *state + x;
21    Some(*state)
22  }).collect()
23}