pub struct TurnOfMonth { /* private fields */ }Expand description
Turn-of-Month effect: the running mean of daily close-to-close returns for the sessions that fall in the turn-of-month window.
Each completed session (the wall-clock day of
Candle::timestamp shifted by utc_offset_minutes)
contributes its return close / previous_close - 1. Only sessions whose
day-of-month is within the first n_first or last n_last days of their month
are averaged; the rest are ignored. The classic effect uses n_first = 3,
n_last = 1.
§Example
use wickra_core::{Candle, Indicator, TurnOfMonth};
let day = 24 * 3_600_000;
// 2021-01-29 .. 02-02 — all turn-of-month days with n_first=3, n_last=1.
let mut tom = TurnOfMonth::new(3, 1, 0).unwrap();
let start = 1_611_878_400_000; // 2021-01-29 00:00 UTC
let mut last = None;
for (i, close) in [100.0, 101.0, 102.0, 103.0].iter().enumerate() {
let ts = start + i as i64 * day;
last = tom.update(Candle::new(*close, *close, *close, *close, 1.0, ts).unwrap());
}
assert!(last.is_some());Implementations§
Source§impl TurnOfMonth
impl TurnOfMonth
Sourcepub fn new(n_first: u32, n_last: u32, utc_offset_minutes: i32) -> Result<Self>
pub fn new(n_first: u32, n_last: u32, utc_offset_minutes: i32) -> Result<Self>
The offset is a constant and does not follow daylight saving: for a
venue that observes it, one value is correct for part of the year and an
hour out for the rest, which shifts every session boundary by an hour.
Either pass the offset in force for the span being analysed and keep
spans that cross a transition apart, or convert the timestamps to the
venue’s wall clock upstream and pass 0.
Construct a Turn-of-Month indicator.
§Errors
Returns Error::PeriodZero if both n_first and n_last are zero (the
window would never include a day).
Trait Implementations§
Source§impl Clone for TurnOfMonth
impl Clone for TurnOfMonth
Source§fn clone(&self) -> TurnOfMonth
fn clone(&self) -> TurnOfMonth
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for TurnOfMonth
impl Debug for TurnOfMonth
Source§impl Indicator for TurnOfMonth
impl Indicator for TurnOfMonth
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 there is no value for this input. Read moreSource§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 TurnOfMonth
impl RefUnwindSafe for TurnOfMonth
impl Send for TurnOfMonth
impl Sync for TurnOfMonth
impl Unpin for TurnOfMonth
impl UnsafeUnpin for TurnOfMonth
impl UnwindSafe for TurnOfMonth
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