pub struct HurstChannel { /* private fields */ }Expand description
Hurst Channel: an SMA centerline wrapped by a rolling high-low range.
middle = SMA(close, period)
range = max(high, period) − min(low, period)
upper = middle + multiplier · range
lower = middle − multiplier · rangeThe Hurst Channel sizes its envelope by the realised high-low range of
the window — a simpler, range-based volatility proxy than Bollinger’s
rolling stddev or Keltner’s ATR. With a multiplier of 0.5 the channel
reduces to a centerline that hugs the midpoint of the Donchian envelope;
chart vendors that follow Hurst’s cycle work commonly use period = 10 and
multiplier = 0.5 for the “inner” channel.
§Example
use wickra_core::{Candle, HurstChannel, Indicator};
let mut indicator = HurstChannel::new(10, 0.5).unwrap();
let mut last = None;
for i in 0..30 {
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 HurstChannel
impl HurstChannel
Sourcepub fn new(period: usize, multiplier: f64) -> Result<Self>
pub fn new(period: usize, multiplier: f64) -> Result<Self>
§Errors
Returns Error::PeriodZero / Error::NonPositiveMultiplier on
invalid inputs.
Sourcepub const fn multiplier(&self) -> f64
pub const fn multiplier(&self) -> f64
Configured range multiplier.
Trait Implementations§
Source§impl Clone for HurstChannel
impl Clone for HurstChannel
Source§fn clone(&self) -> HurstChannel
fn clone(&self) -> HurstChannel
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 HurstChannel
impl Debug for HurstChannel
Source§impl Indicator for HurstChannel
impl Indicator for HurstChannel
Source§type Input = Candle
type Input = Candle
Type of one input data point (typically
f64 for a price, or Candle / Tick).Source§type Output = HurstChannelOutput
type Output = HurstChannelOutput
Type of one output value.
Source§fn update(&mut self, candle: Candle) -> Option<HurstChannelOutput>
fn update(&mut self, candle: Candle) -> Option<HurstChannelOutput>
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 HurstChannel
impl RefUnwindSafe for HurstChannel
impl Send for HurstChannel
impl Sync for HurstChannel
impl Unpin for HurstChannel
impl UnsafeUnpin for HurstChannel
impl UnwindSafe for HurstChannel
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