pub struct SpinningTop { /* private fields */ }Expand description
Spinning Top — a single-bar indecision candle with a small body and two long shadows.
body = |close − open|
upper_shadow = high − max(open, close)
lower_shadow = min(open, close) − low
range = high − low
spinning = body <= body_threshold * range
&& upper_shadow >= 2 * body
&& lower_shadow >= 2 * body
&& body > 0While direction is ambiguous by intent, the output is direction-signed so
downstream filters can distinguish a green spinning top (+1.0) from a red
one (−1.0). A clean Doji (body == 0) is not a Spinning Top.
body_threshold defaults to 0.3 and must lie in (0, 1].
§Signed ±1 encoding
This detector already emits the uniform candlestick sign convention shared
across the pattern family — +1.0 bullish, −1.0 bearish, 0.0 no
pattern — so it drops straight into a machine-learning feature matrix where
the bullish and bearish variants of the pattern occupy a single dimension.
§Example
use wickra_core::{Candle, Indicator, SpinningTop};
let mut indicator = SpinningTop::new();
// Body 0.5, both shadows 3.0 -> spinning.
let candle = Candle::new(10.0, 13.5, 7.0, 10.5, 1.0, 0).unwrap();
assert_eq!(indicator.update(candle), Some(1.0));Implementations§
Source§impl SpinningTop
impl SpinningTop
Sourcepub fn with_threshold(body_threshold: f64) -> Result<Self>
pub fn with_threshold(body_threshold: f64) -> Result<Self>
Construct a Spinning Top detector with a custom body / range threshold.
Sourcepub fn body_threshold(&self) -> f64
pub fn body_threshold(&self) -> f64
Configured body / range threshold.
Trait Implementations§
Source§impl Clone for SpinningTop
impl Clone for SpinningTop
Source§fn clone(&self) -> SpinningTop
fn clone(&self) -> SpinningTop
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 SpinningTop
impl Debug for SpinningTop
Source§impl Default for SpinningTop
impl Default for SpinningTop
Source§impl Indicator for SpinningTop
impl Indicator for SpinningTop
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 SpinningTop
impl RefUnwindSafe for SpinningTop
impl Send for SpinningTop
impl Sync for SpinningTop
impl Unpin for SpinningTop
impl UnsafeUnpin for SpinningTop
impl UnwindSafe for SpinningTop
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