pub struct Atr { /* private fields */ }Expand description
Average True Range with Wilder smoothing.
The first emitted value, by convention, appears after period candles: the
first period − 1 true-range values seed the Wilder average alongside the
period-th, then the smoothed update begins.
§Example
use wickra_core::{Candle, Indicator, Atr};
let mut indicator = Atr::new(5).unwrap();
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§
Source§impl Atr
impl Atr
Sourcepub fn batch_atr(
&mut self,
high: &[f64],
low: &[f64],
close: &[f64],
) -> Vec<f64>
pub fn batch_atr( &mut self, high: &[f64], low: &[f64], close: &[f64], ) -> Vec<f64>
Vectorized batch over raw high/low/close columns: one f64 per bar
(NaN during warmup). The caller guarantees the three slices are equal
length and finite with valid OHLC ordering (the binding validates once up
front); ATR only reads high, low and the previous close.
For a fresh indicator long enough to seed (n >= period) it runs the
true-range seed once and then the bare Wilder recurrence in a tight loop —
no per-bar Candle construction/validation, no Option, identical
division at the seed and mul_add afterwards, so the result is
bit-for-bit equal to replaying update over the same candles. Shorter
or non-fresh inputs defer to an exact update replay.
Trait Implementations§
Source§impl Indicator for Atr
impl Indicator for Atr
Source§type Input = Candle
type Input = Candle
f64 for a price, or Candle / Tick).Source§fn update(&mut self, candle: Candle) -> Option<f64>
fn update(&mut self, candle: Candle) -> Option<f64>
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 Atr
impl RefUnwindSafe for Atr
impl Send for Atr
impl Sync for Atr
impl Unpin for Atr
impl UnsafeUnpin for Atr
impl UnwindSafe for Atr
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