pub struct VwapStdDevBands { /* private fields */ }Expand description
VWAP with volume-weighted standard-deviation envelopes.
tp_i = typical_price(candle_i) // (high + low + close) / 3
sum_v = Σ volume_i
sum_pv = Σ tp_i · volume_i
sum_p2v = Σ tp_i² · volume_i
vwap = sum_pv / sum_v
variance = sum_p2v / sum_v − vwap² // volume-weighted population variance
sigma = sqrt(max(variance, 0))
upper/lower = vwap ± multiplier · sigmaThe cumulative running sums make every update O(1) with no per-bar replay,
matching the streaming contract of Vwap. VWAP and its
stddev bands are an intraday-session tool: call Indicator::reset at
the start of each session boundary so the accumulators do not span the gap.
§Example
use wickra_core::{Candle, Indicator, VwapStdDevBands};
let mut indicator = VwapStdDevBands::new(2.0).unwrap();
let mut last = None;
for i in 0..40 {
let base = 100.0 + f64::from(i);
let candle =
Candle::new(base, base + 2.0, base - 2.0, base + 1.0, 10.0, i64::from(i)).unwrap();
last = indicator.update(candle);
}
assert!(last.is_some());Implementations§
Source§impl VwapStdDevBands
impl VwapStdDevBands
Sourcepub fn new(multiplier: f64) -> Result<Self>
pub fn new(multiplier: f64) -> Result<Self>
§Errors
Returns Error::NonPositiveMultiplier if multiplier is not strictly
positive and finite.
Sourcepub const fn multiplier(&self) -> f64
pub const fn multiplier(&self) -> f64
Configured multiplier.
Trait Implementations§
Source§impl Clone for VwapStdDevBands
impl Clone for VwapStdDevBands
Source§fn clone(&self) -> VwapStdDevBands
fn clone(&self) -> VwapStdDevBands
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for VwapStdDevBands
impl Debug for VwapStdDevBands
Source§impl Indicator for VwapStdDevBands
impl Indicator for VwapStdDevBands
Source§type Input = Candle
type Input = Candle
Type of one input data point (typically
f64 for a price, or Candle / Tick).Source§type Output = VwapStdDevBandsOutput
type Output = VwapStdDevBandsOutput
Type of one output value.
Source§fn update(&mut self, candle: Candle) -> Option<VwapStdDevBandsOutput>
fn update(&mut self, candle: Candle) -> Option<VwapStdDevBandsOutput>
Feed one new data point into the indicator and return the freshly computed
output, or
None if the indicator is still warming up.Source§fn reset(&mut self)
fn reset(&mut self)
Reset all internal state, leaving the indicator equivalent to a freshly
constructed instance with the same parameters.
Source§fn warmup_period(&self) -> usize
fn warmup_period(&self) -> usize
Number of inputs required before the first non-
None output can be produced.Auto Trait Implementations§
impl Freeze for VwapStdDevBands
impl RefUnwindSafe for VwapStdDevBands
impl Send for VwapStdDevBands
impl Sync for VwapStdDevBands
impl Unpin for VwapStdDevBands
impl UnsafeUnpin for VwapStdDevBands
impl UnwindSafe for VwapStdDevBands
Blanket Implementations§
Source§impl<T> BatchExt for Twhere
T: Indicator,
impl<T> BatchExt for Twhere
T: Indicator,
Source§fn batch(&mut self, inputs: &[Self::Input]) -> Vec<Option<Self::Output>>
fn batch(&mut self, inputs: &[Self::Input]) -> Vec<Option<Self::Output>>
Run the indicator over a slice of inputs in order, returning one output (or
None during warmup) per input.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more