pub struct OrderBookL1 {
pub last_update_time: DateTime<Utc>,
pub best_bid: Option<Level>,
pub best_ask: Option<Level>,
}Expand description
Normalised Barter OrderBookL1 snapshot containing the latest best bid and ask.
Fields§
§last_update_time: DateTime<Utc>The instant this book state describes — the venue’s own, where the venue publishes one.
§Producer obligation
A producer must set this to the same instant it puts in the wrapping
MarketEvent::time_exchange, and it should
come from the venue rather than from a local or aggregator clock.
Downstream state orders L1 updates on this field, not on the event’s, so the two must not disagree. A producer that lets them diverge gets no error and no log: a staleness guard keyed on this field can reject legitimately newer updates and freeze the held book.
§Not every in-tree producer has a venue instant to use
The “should” above is not a “must”, because some venues publish no book timestamp:
- Binance Spot
bookTickercarries{u, s, b, B, a, A}and no time field, soBinanceOrderBookL1falls back to the host clock at deserialisation. (Binance USD-M futures does sendT, and that path uses it.) - IBKR quotes are assembled from separate bid/ask/size ticks, which carry no per-tick
venue instant, so
exchange::ibkr(behind theibkrfeature, hence no link) stamps the assembly time.
Both fill the field from a local clock, and both keep it consistent with time_exchange as
required above. Consumers must therefore not rank this field against a tick timestamp
from another source — a trade’s time_exchange, say — since the gap between them is
milliseconds and the comparison would be decided by skew rather than by the market. Ranking
it against a coarser instant, such as a candle’s close_time, is sound while the gap stays
well above the skew. DefaultInstrumentMarketData::price in the rustrade crate does
exactly that, and documents where the margin runs out.
best_bid: Option<Level>§best_ask: Option<Level>Implementations§
Source§impl OrderBookL1
impl OrderBookL1
Source§impl OrderBookL1
impl OrderBookL1
Sourcepub fn mid_price(&self) -> Option<Decimal>
pub fn mid_price(&self) -> Option<Decimal>
Calculate the mid-price by taking the average of the best bid and ask prices.
See Docs: https://www.quantstart.com/articles/high-frequency-trading-ii-limit-order-book
Sourcepub fn volume_weighed_mid_price(&self) -> Option<Decimal>
pub fn volume_weighed_mid_price(&self) -> Option<Decimal>
Calculate the volume weighted mid-price (micro-price), weighing the best bid and ask prices with their associated amount.
None when either side is absent, and when both sides carry a zero amount — a feed that
publishes prices without sizes produces exactly that book, and the weighting is undefined for
it. Fall back to mid_price when a price is needed regardless of size.
See Docs: https://www.quantstart.com/articles/high-frequency-trading-ii-limit-order-book
Trait Implementations§
Source§impl Clone for OrderBookL1
impl Clone for OrderBookL1
Source§impl Debug for OrderBookL1
impl Debug for OrderBookL1
Source§impl Default for OrderBookL1
impl Default for OrderBookL1
Source§impl<'de> Deserialize<'de> for OrderBookL1
impl<'de> Deserialize<'de> for OrderBookL1
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for OrderBookL1
Source§impl From<OrderBookL1> for DataKind
impl From<OrderBookL1> for DataKind
Source§fn from(value: OrderBookL1) -> Self
fn from(value: OrderBookL1) -> Self
Source§impl Hash for OrderBookL1
impl Hash for OrderBookL1
Source§impl Ord for OrderBookL1
impl Ord for OrderBookL1
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
1.21.0 (const: unstable) · Source§fn min(self, other: Self) -> Selfwhere
Self: Sized,
fn min(self, other: Self) -> Selfwhere
Self: Sized,
Source§impl PartialEq for OrderBookL1
impl PartialEq for OrderBookL1
Source§impl PartialOrd for OrderBookL1
impl PartialOrd for OrderBookL1
Source§impl Serialize for OrderBookL1
impl Serialize for OrderBookL1
impl StructuralPartialEq for OrderBookL1
Auto Trait Implementations§
impl Freeze for OrderBookL1
impl RefUnwindSafe for OrderBookL1
impl Send for OrderBookL1
impl Sync for OrderBookL1
impl Unpin for OrderBookL1
impl UnsafeUnpin for OrderBookL1
impl UnwindSafe for OrderBookL1
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<Instrument> DynamicAlpacaInstrument for Instrument
impl<Instrument> DynamicHyperliquidInstrument for Instrument
impl<Instrument> DynamicLseInstrument for Instrument
impl<Instrument> DynamicMassiveInstrument for Instrument
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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