Skip to main content

TradeHistory

Struct TradeHistory 

Source
pub struct TradeHistory { /* private fields */ }
Expand description

Trade history ring buffer for inter-bar feature computation

Implementations§

Source§

impl TradeHistory

Source

pub fn new(config: InterBarConfig) -> TradeHistory

Create new trade history with given configuration

Uses a local entropy cache (default behavior, backward compatible). For multi-symbol workloads, use new_with_cache() to provide a shared global cache.

Source

pub fn new_with_cache( config: InterBarConfig, external_cache: Option<Arc<RwLock<RawRwLock, EntropyCache>>>, ) -> TradeHistory

Create new trade history with optional external entropy cache

Issue #145 Phase 2: Multi-Symbol Entropy Cache Sharing

§Parameters
  • config: Lookback configuration (FixedCount, FixedWindow, or BarRelative)
  • external_cache: Optional shared entropy cache from get_global_entropy_cache()
    • If provided: Uses the shared global cache (recommended for multi-symbol)
    • If None: Creates a local 128-entry cache (default, backward compatible)
§Usage
// Single-symbol: use local cache (default)
let history = TradeHistory::new(config);

// Multi-symbol: share global cache
let global_cache = get_global_entropy_cache();
let history = TradeHistory::new_with_cache(config, Some(global_cache));
§Thread Safety

Both local and external caches are thread-safe via Arc<RwLock<>>. Multiple processors can safely share the same external cache concurrently.

Source

pub fn push(&mut self, trade: &AggTrade)

Push a new trade to the history buffer

Automatically prunes old entries based on lookback mode, but preserves trades needed for lookback computation (timestamp < protected_until). Issue #104: Uses batched pruning check to reduce frequency

Source

pub fn on_bar_open(&mut self, bar_open_time: i64)

Notify that a new bar has opened at the given timestamp

This sets the protection threshold to ensure trades from before the bar opened are preserved for lookback computation. The protection extends until the next bar opens and calls this method again.

Source

pub fn on_bar_close(&mut self)

Notify that the current bar has closed

For BarRelative mode, records the current trade count as a bar boundary. For other modes, this is a no-op. Protection is always kept until the next bar opens.

Source

pub fn has_lookback_trades(&self, bar_open_time: i64) -> bool

Fast-path check for empty lookback window (Issue #96 Task #178)

Returns true if there are any lookback trades before the given bar_open_time. This check is done WITHOUT allocating the SmallVec, enabling fast-path for zero-trade lookback windows. Typical improvement: 0.3-0.8% for windows with no lookback data (common in consolidation periods at session start).

§Performance
  • Cache hit: ~2-3 ns (checks cached_idx from previous query)
  • Cache miss: ~5-10 ns (single timestamp comparison, no SmallVec allocation)
  • vs SmallVec allocation: ~10-20 ns (stack buffer initialization)
§Example
if history.has_lookback_trades(bar_open_time) {
    let lookback = history.get_lookback_trades(bar_open_time);
    // Process lookback
} else {
    // Skip feature computation for zero-trade window
}
Source

pub fn get_lookback_trades( &self, bar_open_time: i64, ) -> SmallVec<[&TradeSnapshot; 256]>

Source

pub fn buffer_stats(&self) -> (usize, usize, usize, usize)

Get buffer statistics for benchmarking and profiling

Issue #96 Task #155: Exposes pruning state for performance analysis

Source

pub fn compute_features(&self, bar_open_time: i64) -> InterBarFeatures

Compute inter-bar features from lookback window

Issue #96 Task #99: Memoized float conversions for 2-5% speedup Extracts prices/volumes once and reuses across all 16 features.

§Arguments
  • bar_open_time - The open timestamp of the current bar (microseconds)
§Returns

InterBarFeatures with computed values, or None for features that cannot be computed due to insufficient data.

Source

pub fn reset_bar_boundaries(&mut self)

Reset bar boundary tracking (Issue #81)

Called at ouroboros boundaries. Clears bar close indices but preserves trade history — trades are still valid lookback data for the first bar of the new segment.

Source

pub fn clear(&mut self)

Clear the trade history (e.g., at ouroboros boundary)

Source

pub fn len(&self) -> usize

Get current number of trades in buffer

Source

pub fn is_empty(&self) -> bool

Check if buffer is empty

Trait Implementations§

Source§

impl Debug for TradeHistory

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.