pub struct TradeHistory { /* private fields */ }Expand description
Trade history ring buffer for inter-bar feature computation
Implementations§
Source§impl TradeHistory
impl TradeHistory
Sourcepub fn new(config: InterBarConfig) -> TradeHistory
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.
Sourcepub fn new_with_cache(
config: InterBarConfig,
external_cache: Option<Arc<RwLock<RawRwLock, EntropyCache>>>,
) -> TradeHistory
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 fromget_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.
Sourcepub fn push(&mut self, trade: &AggTrade)
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
Sourcepub fn on_bar_open(&mut self, bar_open_time: i64)
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.
Sourcepub fn on_bar_close(&mut self)
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.
Sourcepub fn has_lookback_trades(&self, bar_open_time: i64) -> bool
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
}pub fn get_lookback_trades( &self, bar_open_time: i64, ) -> SmallVec<[&TradeSnapshot; 256]>
Sourcepub fn buffer_stats(&self) -> (usize, usize, usize, usize)
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
Sourcepub fn compute_features(&self, bar_open_time: i64) -> InterBarFeatures
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.
Sourcepub fn reset_bar_boundaries(&mut self)
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.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for TradeHistory
impl !RefUnwindSafe for TradeHistory
impl Send for TradeHistory
impl Sync for TradeHistory
impl Unpin for TradeHistory
impl UnsafeUnpin for TradeHistory
impl !UnwindSafe for TradeHistory
Blanket Implementations§
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> 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