pub struct EhlersStochastic { /* private fields */ }Expand description
Ehlers’ Adaptive Stochastic.
Implements the construction described in Cycle Analytics for Traders
(Ehlers 2013, ch. 7): the raw price is first passed through a
RoofingFilter (high-pass + SuperSmoother bandpass) to isolate the
tradable cycle band, then the classic Stochastic %K formula is applied
to the filtered output over period bars and finally re-smoothed by a
2-bar SuperSmoother. The result is a ±1-normalised oscillator that
reacts to cycles without trending bias from low-frequency drift.
The output uses Ehlers’ 2 * (X - MinX) / (MaxX - MinX) - 1 convention,
so the range is [-1, +1] rather than the conventional [0, 100].
§Example
use wickra_core::{Indicator, EhlersStochastic};
let mut es = EhlersStochastic::new(20).unwrap();
let mut last = None;
for i in 0..120 {
last = es.update(100.0 + (f64::from(i) * 0.3).sin() * 5.0);
}
assert!(last.is_some());Implementations§
Source§impl EhlersStochastic
impl EhlersStochastic
Trait Implementations§
Source§impl Clone for EhlersStochastic
impl Clone for EhlersStochastic
Source§fn clone(&self) -> EhlersStochastic
fn clone(&self) -> EhlersStochastic
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 EhlersStochastic
impl Debug for EhlersStochastic
Source§impl Indicator for EhlersStochastic
impl Indicator for EhlersStochastic
Source§fn update(&mut self, input: f64) -> Option<f64>
fn update(&mut self, input: f64) -> 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 EhlersStochastic
impl RefUnwindSafe for EhlersStochastic
impl Send for EhlersStochastic
impl Sync for EhlersStochastic
impl Unpin for EhlersStochastic
impl UnsafeUnpin for EhlersStochastic
impl UnwindSafe for EhlersStochastic
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