pub struct VolumeProfile { /* private fields */ }Expand description
Rolling Volume Profile over the last period candles.
Where crate::ValueArea reduces the same volume distribution to its
summary levels (Point of Control, Value Area High / Low), Volume Profile
exposes the full histogram so callers can inspect, render or post-process
the raw distribution. Each candle’s volume is spread uniformly across the
bins its [low, high] range touches; a single-print bar (low == high)
drops its whole volume into one bin. The histogram domain spans the window’s
lowest low to its highest high.
A window whose bars are all single-print at one price (price_high == price_low)
is degenerate: the entire volume lands in bin 0 and both edges collapse to
that price.
§Example
use wickra_core::{Candle, Indicator, VolumeProfile};
let mut vp = VolumeProfile::new(5, 10).unwrap();
let mut last = None;
for i in 0..10 {
let base = 100.0 + f64::from(i);
let candle =
Candle::new(base, base + 2.0, base - 2.0, base, 10.0, i64::from(i)).unwrap();
last = vp.update(candle);
}
let profile = last.unwrap();
assert_eq!(profile.bins.len(), 10);Implementations§
Source§impl VolumeProfile
impl VolumeProfile
Sourcepub fn new(period: usize, bin_count: usize) -> Result<VolumeProfile, Error>
pub fn new(period: usize, bin_count: usize) -> Result<VolumeProfile, Error>
Construct a Volume Profile indicator.
§Errors
Returns Error::PeriodZero if period or bin_count is zero.
Sourcepub fn classic() -> VolumeProfile
pub fn classic() -> VolumeProfile
Classic Volume Profile: 20-bar rolling window, 50 bins.
Sourcepub fn value(&self) -> Option<&VolumeProfileOutput>
pub fn value(&self) -> Option<&VolumeProfileOutput>
Most recent profile if available.
Trait Implementations§
Source§impl Clone for VolumeProfile
impl Clone for VolumeProfile
Source§fn clone(&self) -> VolumeProfile
fn clone(&self) -> VolumeProfile
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for VolumeProfile
impl Debug for VolumeProfile
Source§impl Indicator for VolumeProfile
impl Indicator for VolumeProfile
Source§type Input = Candle
type Input = Candle
f64 for a price, or Candle / Tick).Source§type Output = VolumeProfileOutput
type Output = VolumeProfileOutput
Source§fn update(&mut self, candle: Candle) -> Option<VolumeProfileOutput>
fn update(&mut self, candle: Candle) -> Option<VolumeProfileOutput>
None if the indicator is still warming up.Source§fn reset(&mut self)
fn reset(&mut self)
Source§fn warmup_period(&self) -> usize
fn warmup_period(&self) -> usize
None output can be produced.Auto Trait Implementations§
impl Freeze for VolumeProfile
impl RefUnwindSafe for VolumeProfile
impl Send for VolumeProfile
impl Sync for VolumeProfile
impl Unpin for VolumeProfile
impl UnsafeUnpin for VolumeProfile
impl UnwindSafe for VolumeProfile
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>>
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
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>
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>
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