Skip to main content

PositionRefMut

Struct PositionRefMut 

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

Source§

impl<'a> PositionRefMut<'a>

Source

pub fn new(inner: RefMut<'a, Position>) -> Self

Wraps the given RefMut borrow.

Source

pub fn cloned(&self) -> Position

Returns an owned snapshot of the borrowed position.

Methods from Deref<Target = Position>§

Source

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.

Source

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.

Source

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.

Source

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.

Source

pub fn total_pnl(&self, last: Price) -> Money

Returns total P&L (realized + unrealized) based on the last price.

Source

pub fn unrealized_pnl(&self, last: Price) -> Money

Returns unrealized P&L based on the last price.

Source

pub fn closing_order_side(&self) -> OrderSide

Returns the order side required to close this position.

Source

pub fn is_opposite_side(&self, side: OrderSide) -> bool

Returns whether the given order side is opposite to the position entry side.

Source

pub fn symbol(&self) -> Symbol

Returns the instrument symbol.

Source

pub fn venue(&self) -> Venue

Returns the trading venue.

Source

pub fn event_count(&self) -> usize

Returns the count of order fill events applied to this position.

Source

pub fn client_order_ids(&self) -> Vec<ClientOrderId>

Returns unique client order IDs from all fill events, sorted.

Source

pub fn venue_order_ids(&self) -> Vec<VenueOrderId>

Returns unique venue order IDs from all fill events, sorted.

Source

pub fn trade_ids(&self) -> Vec<TradeId>

Returns unique trade IDs from all fill events, sorted.

Source

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.

Source

pub fn last_event(&self) -> Option<OrderFilled>

Returns the last OrderFilled event for the position (if any after purging).

Source

pub fn last_trade_id(&self) -> Option<TradeId>

Returns the last TradeId for the position (if any after purging).

Source

pub fn is_long(&self) -> bool

Returns whether the position is long (positive quantity).

Source

pub fn is_short(&self) -> bool

Returns whether the position is short (negative quantity).

Source

pub fn is_open(&self) -> bool

Returns whether the position is currently open (has quantity and no close timestamp).

Source

pub fn is_closed(&self) -> bool

Returns whether the position is closed (flat with a close timestamp).

Source

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.

Source

pub fn commissions(&self) -> Vec<Money>

Returns the cumulative commissions for the position as a vector.

Trait Implementations§

Source§

impl AsMut<Position> for PositionRefMut<'_>

Source§

fn as_mut(&mut self) -> &mut Position

Converts this type into a mutable reference of the (usually inferred) input type.
Source§

impl AsRef<Position> for PositionRefMut<'_>

Source§

fn as_ref(&self) -> &Position

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Debug for PositionRefMut<'_>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Deref for PositionRefMut<'_>

Source§

type Target = Position

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl DerefMut for PositionRefMut<'_>

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl Display for PositionRefMut<'_>

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<'a> From<RefMut<'a, Position>> for PositionRefMut<'a>

Source§

fn from(inner: RefMut<'a, Position>) -> Self

Converts to this type from the input type.
Source§

impl PartialEq<&Position> for PositionRefMut<'_>

Source§

fn eq(&self, other: &&Position) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialEq<Position> for PositionRefMut<'_>

Source§

fn eq(&self, other: &Position) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

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> 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> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more