MCPcopy Create free account
hub / github.com/Open-Quant/openquant / _get_beta

Function _get_beta

crates/openquant/src/microstructural_features.rs:85–119  ·  view source on GitHub ↗
(high: &[f64], low: &[f64], window: usize)

Source from the content-addressed store, hash-verified

83}
84
85fn _get_beta(high: &[f64], low: &[f64], window: usize) -> Vec<f64> {
86 let mut ret_sq = vec![NAN; high.len()];
87 for i in 0..high.len() {
88 if low[i] == 0.0 {
89 continue;
90 }
91 ret_sq[i] = (high[i] / low[i]).ln().powi(2);
92 }
93 // rolling sum over 2
94 let mut two_sum = vec![NAN; ret_sq.len()];
95 for i in 1..ret_sq.len() {
96 if ret_sq[i].is_nan() || ret_sq[i - 1].is_nan() {
97 continue;
98 }
99 two_sum[i] = ret_sq[i] + ret_sq[i - 1];
100 }
101 // rolling mean over window
102 let mut beta = vec![NAN; ret_sq.len()];
103 if window == 0 {
104 return beta;
105 }
106 for i in 0..two_sum.len() {
107 if i + 1 < window {
108 continue;
109 }
110 let start = i + 1 - window;
111 let slice = &two_sum[start..=i];
112 if slice.iter().any(|v| v.is_nan()) {
113 continue;
114 }
115 let mean = slice.iter().sum::<f64>() / window as f64;
116 beta[i] = mean;
117 }
118 beta
119}
120
121fn _get_gamma(high: &[f64], low: &[f64]) -> Vec<f64> {
122 let high_max = rolling_max(high, 2);

Callers 2

get_bekker_parkinson_volFunction · 0.85

Calls 1

lenMethod · 0.80

Tested by

no test coverage detected