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}