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

Function get_bvc_buy_volume

crates/openquant/src/microstructural_features.rs:384–413  ·  view source on GitHub ↗
(close: &[f64], volume: &[f64], window: usize)

Source from the content-addressed store, hash-verified

382}
383
384pub fn get_bvc_buy_volume(close: &[f64], volume: &[f64], window: usize) -> Vec<f64> {
385 let mut out = vec![NAN; close.len()];
386 let norm = Normal::new(0.0, 1.0).unwrap();
387 let mut diff = vec![NAN; close.len()];
388 for i in 1..close.len() {
389 diff[i] = close[i] - close[i - 1];
390 }
391 let mut rolling_std = vec![NAN; close.len()];
392 for i in 0..close.len() {
393 if i + 1 < window {
394 continue;
395 }
396 let start = i + 1 - window;
397 let slice = &diff[start..=i];
398 if slice.iter().any(|v| v.is_nan()) {
399 continue;
400 }
401 let mean = slice.iter().sum::<f64>() / window as f64;
402 let var = slice.iter().map(|v| (v - mean).powi(2)).sum::<f64>() / (window as f64 - 1.0);
403 rolling_std[i] = var.sqrt();
404 }
405 for i in 0..close.len() {
406 if diff[i].is_nan() || rolling_std[i].is_nan() {
407 continue;
408 }
409 let z = diff[i] / rolling_std[i].max(1e-12);
410 out[i] = volume[i] * norm.cdf(z);
411 }
412 out
413}
414
415// Encoding utilities
416pub fn encode_tick_rule_array(arr: &[i32]) -> Result<String, String> {

Callers 2

ms_get_bvc_buy_volumeFunction · 0.85

Calls 1

lenMethod · 0.80

Tested by 1