pub struct SineWave { /* private fields */ }Expand description
Ehlers’ Sine Wave indicator (sine + leadsine).
Implementation from Rocket Science for Traders (Ehlers 2001, ch. 9). Uses
the same Hilbert-transform machinery as HilbertDominantCycle to derive
the instantaneous phase, then returns sin(phase) and the 45° lead
sin(phase + 45°). The two lines cross deep in trends but oscillate
rapidly during cycles, providing a visual lead/lag signal.
Only the primary sine line is exposed as the scalar output to match the
crate’s standard scalar-indicator surface; the lead is accessible via the
SineWave::lead accessor after each update.
§Example
use wickra_core::{Indicator, SineWave};
let mut sw = SineWave::new();
let mut last = None;
for i in 0..200 {
last = sw.update(100.0 + (f64::from(i) * 0.4).sin() * 5.0);
}
assert!(last.is_some());Implementations§
Trait Implementations§
Source§impl Indicator for SineWave
impl Indicator for SineWave
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 SineWave
impl RefUnwindSafe for SineWave
impl Send for SineWave
impl Sync for SineWave
impl Unpin for SineWave
impl UnsafeUnpin for SineWave
impl UnwindSafe for SineWave
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