pub struct PositionRefMut<'a>(/* private fields */);Expand description
Lifetime-scoped exclusive write borrow of a cached position.
Returned by crate::cache::Cache::position_mut. While the borrow is alive, no other read or
write on the same cell is permitted (enforced at runtime by the underlying RefMut).
Drop the borrow before dispatching events or taking any other cache borrow that may re-enter
the same position.
Implementations§
Methods from Deref<Target = Position>§
Sourcepub fn purge_events_for_order(&mut self, client_order_id: ClientOrderId)
pub fn purge_events_for_order(&mut self, client_order_id: ClientOrderId)
Purges all order fill events for the given client order ID and recalculates derived state.
§Warning
This operation recalculates the entire position from scratch after removing the specified order’s fills. This is an expensive operation and should be used sparingly.
§Panics
Panics if after purging, no fills remain and the position cannot be reconstructed.
Sourcepub fn apply(&mut self, fill: &OrderFilled)
pub fn apply(&mut self, fill: &OrderFilled)
Applies an OrderFilled event to this position.
§Panics
Panics if the fill.trade_id is already present in the position’s trade_ids.
Sourcepub fn apply_adjustment(&mut self, adjustment: PositionAdjusted)
pub fn apply_adjustment(&mut self, adjustment: PositionAdjusted)
Applies a position adjustment event.
This method handles adjustments to position quantity or realized PnL that occur outside of normal order fills, such as:
- Commission adjustments in base currency (crypto spot markets).
- Funding payments (perpetual futures).
The adjustment event is stored in the position’s adjustment history for full audit trail.
§Panics
Panics if the adjustment’s quantity_change cannot be converted to f64.
Sourcepub fn calculate_pnl(
&self,
avg_px_open: f64,
avg_px_close: f64,
quantity: Quantity,
) -> Money
pub fn calculate_pnl( &self, avg_px_open: f64, avg_px_close: f64, quantity: Quantity, ) -> Money
Calculates profit and loss from the given prices and quantity.
Sourcepub fn total_pnl(&self, last: Price) -> Money
pub fn total_pnl(&self, last: Price) -> Money
Returns total P&L (realized + unrealized) based on the last price.
Sourcepub fn unrealized_pnl(&self, last: Price) -> Money
pub fn unrealized_pnl(&self, last: Price) -> Money
Returns unrealized P&L based on the last price.
Sourcepub fn closing_order_side(&self) -> OrderSide
pub fn closing_order_side(&self) -> OrderSide
Returns the order side required to close this position.
Sourcepub fn is_opposite_side(&self, side: OrderSide) -> bool
pub fn is_opposite_side(&self, side: OrderSide) -> bool
Returns whether the given order side is opposite to the position entry side.
Sourcepub fn event_count(&self) -> usize
pub fn event_count(&self) -> usize
Returns the count of order fill events applied to this position.
Sourcepub fn client_order_ids(&self) -> Vec<ClientOrderId>
pub fn client_order_ids(&self) -> Vec<ClientOrderId>
Returns unique client order IDs from all fill events, sorted.
Sourcepub fn venue_order_ids(&self) -> Vec<VenueOrderId>
pub fn venue_order_ids(&self) -> Vec<VenueOrderId>
Returns unique venue order IDs from all fill events, sorted.
Sourcepub fn notional_value(&self, last: Price) -> Money
pub fn notional_value(&self, last: Price) -> Money
Calculates the notional value based on the last price.
§Panics
Panics if self.base_currency is None, or if last is not a positive price for
inverse instruments.
Sourcepub fn last_event(&self) -> Option<OrderFilled>
pub fn last_event(&self) -> Option<OrderFilled>
Returns the last OrderFilled event for the position (if any after purging).
Sourcepub fn last_trade_id(&self) -> Option<TradeId>
pub fn last_trade_id(&self) -> Option<TradeId>
Returns the last TradeId for the position (if any after purging).
Sourcepub fn is_open(&self) -> bool
pub fn is_open(&self) -> bool
Returns whether the position is currently open (has quantity and no close timestamp).
Sourcepub fn is_closed(&self) -> bool
pub fn is_closed(&self) -> bool
Returns whether the position is closed (flat with a close timestamp).
Sourcepub fn signed_decimal_qty(&self) -> Decimal
pub fn signed_decimal_qty(&self) -> Decimal
Returns the signed quantity as a Decimal.
Uses the raw signed_qty field to preserve full precision, as the quantity
field may have reduced precision based on the instrument’s size_precision.
Sourcepub fn commissions(&self) -> Vec<Money>
pub fn commissions(&self) -> Vec<Money>
Returns the cumulative commissions for the position as a vector.
Trait Implementations§
Source§impl AsMut<Position> for PositionRefMut<'_>
impl AsMut<Position> for PositionRefMut<'_>
Source§impl AsRef<Position> for PositionRefMut<'_>
impl AsRef<Position> for PositionRefMut<'_>
Source§impl Debug for PositionRefMut<'_>
impl Debug for PositionRefMut<'_>
Source§impl Deref for PositionRefMut<'_>
impl Deref for PositionRefMut<'_>
Source§impl DerefMut for PositionRefMut<'_>
impl DerefMut for PositionRefMut<'_>
Source§impl Display for PositionRefMut<'_>
impl Display for PositionRefMut<'_>
Source§impl PartialEq<&Position> for PositionRefMut<'_>
impl PartialEq<&Position> for PositionRefMut<'_>
Source§impl PartialEq<Position> for PositionRefMut<'_>
impl PartialEq<Position> for PositionRefMut<'_>
Auto Trait Implementations§
impl<'a> Freeze for PositionRefMut<'a>
impl<'a> !RefUnwindSafe for PositionRefMut<'a>
impl<'a> !Send for PositionRefMut<'a>
impl<'a> !Sync for PositionRefMut<'a>
impl<'a> Unpin for PositionRefMut<'a>
impl<'a> UnsafeUnpin for PositionRefMut<'a>
impl<'a> !UnwindSafe for PositionRefMut<'a>
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> 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