pub struct AdOscillator { /* private fields */ }Expand description
Larry Williams’ Accumulation/Distribution — a cumulative volume-less price flow that classifies each bar as accumulation or distribution based on its close relative to the previous close, then sums the directional component.
Williams’ definition (1972) uses a true high/low that includes the prior close as an anchor — the same idea that motivates true range:
TR_h_t = max(close_{t−1}, high_t)
TR_l_t = min(close_{t−1}, low_t)
AD_t = AD_{t−1} + (close_t − TR_l_t) if close_t > close_{t−1} (accumulation)
AD_t = AD_{t−1} + (close_t − TR_h_t) if close_t < close_{t−1} (distribution)
AD_t = AD_{t−1} if close_t == close_{t−1} (no change)Unlike Chaikin’s Accumulation/Distribution Line, the Williams A/D ignores volume entirely — Williams argued that the relative position of the close already encodes the day’s “true” buying or selling pressure. The series is unbounded and used primarily for divergence analysis. The first candle only seeds the previous close; the first emission lands at bar 2.
§Example
use wickra_core::{Candle, Indicator, AdOscillator};
let mut indicator = AdOscillator::new();
let mut last = None;
for i in 0..80 {
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§
Trait Implementations§
Source§impl Clone for AdOscillator
impl Clone for AdOscillator
Source§fn clone(&self) -> AdOscillator
fn clone(&self) -> AdOscillator
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 AdOscillator
impl Debug for AdOscillator
Source§impl Default for AdOscillator
impl Default for AdOscillator
Source§fn default() -> AdOscillator
fn default() -> AdOscillator
Returns the “default value” for a type. Read more
Source§impl Indicator for AdOscillator
impl Indicator for AdOscillator
Source§type Input = Candle
type Input = Candle
Type of one input data point (typically
f64 for a price, or Candle / Tick).Source§fn update(&mut self, candle: Candle) -> Option<f64>
fn update(&mut self, candle: Candle) -> Option<f64>
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 AdOscillator
impl RefUnwindSafe for AdOscillator
impl Send for AdOscillator
impl Sync for AdOscillator
impl Unpin for AdOscillator
impl UnsafeUnpin for AdOscillator
impl UnwindSafe for AdOscillator
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