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

Function get_vpin

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

Source from the content-addressed store, hash-verified

361}
362
363pub fn get_vpin(volume: &[f64], buy_volume: &[f64], window: usize) -> Vec<f64> {
364 let sell_volume: Vec<f64> = volume.iter().zip(buy_volume.iter()).map(|(v, b)| v - b).collect();
365 let imbalance: Vec<f64> =
366 buy_volume.iter().zip(sell_volume.iter()).map(|(b, s)| (b - s).abs()).collect();
367 let mut out = vec![NAN; volume.len()];
368 for i in 0..volume.len() {
369 if i + 1 < window {
370 continue;
371 }
372 let start = i + 1 - window;
373 let imb_slice = &imbalance[start..=i];
374 let vol = volume[i];
375 if vol == 0.0 || imb_slice.iter().any(|v| v.is_nan()) {
376 continue;
377 }
378 let mean_imb = imb_slice.iter().sum::<f64>() / window as f64;
379 out[i] = mean_imb / vol;
380 }
381 out
382}
383
384pub fn get_bvc_buy_volume(close: &[f64], volume: &[f64], window: usize) -> Vec<f64> {
385 let mut out = vec![NAN; close.len()];

Callers 2

ms_get_vpinFunction · 0.85

Calls 1

lenMethod · 0.80

Tested by 1