Skip to main content

Position

Struct Position 

Source
#[repr(C)]
pub struct Position {
Show 36 fields pub events: Vec<OrderFilled>, pub adjustments: Vec<PositionAdjusted>, pub trader_id: TraderId, pub strategy_id: StrategyId, pub instrument_id: InstrumentId, pub id: PositionId, pub account_id: AccountId, pub opening_order_id: ClientOrderId, pub closing_order_id: Option<ClientOrderId>, pub entry: OrderSide, pub side: PositionSide, pub signed_qty: f64, pub quantity: Quantity, pub peak_qty: Quantity, pub price_precision: u8, pub size_precision: u8, pub multiplier: Quantity, pub is_inverse: bool, pub is_currency_pair: bool, pub instrument_class: InstrumentClass, pub base_currency: Option<Currency>, pub quote_currency: Currency, pub settlement_currency: Currency, pub ts_init: UnixNanos, pub ts_opened: UnixNanos, pub ts_last: UnixNanos, pub ts_closed: Option<UnixNanos>, pub duration_ns: u64, pub avg_px_open: f64, pub avg_px_close: Option<f64>, pub realized_return: f64, pub realized_pnl: Option<Money>, pub trade_ids: AHashSet<TradeId>, pub buy_qty: Quantity, pub sell_qty: Quantity, pub commissions: IndexMap<Currency, Money>,
}
Expand description

Represents a position in a market.

The position ID may be assigned at the trading venue, or can be system generated depending on a strategies OMS (Order Management System) settings.

Fields§

§events: Vec<OrderFilled>§adjustments: Vec<PositionAdjusted>§trader_id: TraderId§strategy_id: StrategyId§instrument_id: InstrumentId§id: PositionId§account_id: AccountId§opening_order_id: ClientOrderId§closing_order_id: Option<ClientOrderId>§entry: OrderSide§side: PositionSide§signed_qty: f64§quantity: Quantity§peak_qty: Quantity§price_precision: u8§size_precision: u8§multiplier: Quantity§is_inverse: bool§is_currency_pair: bool§instrument_class: InstrumentClass§base_currency: Option<Currency>§quote_currency: Currency§settlement_currency: Currency§ts_init: UnixNanos§ts_opened: UnixNanos§ts_last: UnixNanos§ts_closed: Option<UnixNanos>§duration_ns: u64§avg_px_open: f64§avg_px_close: Option<f64>§realized_return: f64§realized_pnl: Option<Money>§trade_ids: AHashSet<TradeId>§buy_qty: Quantity§sell_qty: Quantity§commissions: IndexMap<Currency, Money>

Implementations§

Source§

impl Position

Source

pub fn new(instrument: &InstrumentAny, fill: OrderFilled) -> Self

Creates a new Position instance.

§Panics

This function panics if:

  • The instrument.id() does not match the fill.instrument_id.
  • The fill.order_side is NoOrderSide.
  • The fill.position_id is None.
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.

Source§

impl Position

Source

pub fn py_from_dict(py: Python<'_>, values: Py<PyDict>) -> PyResult<Self>

Constructs a Position from a Python dict.

§Errors

Returns a PyErr if deserialization from the Python dict fails.

Trait Implementations§

Source§

impl Clone for Position

Source§

fn clone(&self) -> Position

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Position

Source§

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

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

impl<'de> Deserialize<'de> for Position

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Position

Source§

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

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

impl<'a, 'py> FromPyObject<'a, 'py> for Position
where Self: Clone,

Source§

type Error = PyClassGuardError<'a, 'py>

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

fn extract( obj: Borrowed<'a, 'py, PyAny>, ) -> Result<Self, <Self as FromPyObject<'a, 'py>>::Error>

Extracts Self from the bound smart pointer obj. Read more
Source§

impl Hash for Position

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl<'py> IntoPyObject<'py> for Position

Source§

type Target = Position

The Python output type
Source§

type Output = Bound<'py, <Position as IntoPyObject<'py>>::Target>

The smart pointer type to use. Read more
Source§

type Error = PyErr

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

fn into_pyobject( self, py: Python<'py>, ) -> Result<<Self as IntoPyObject<'_>>::Output, <Self as IntoPyObject<'_>>::Error>

Performs the conversion.
Source§

impl PartialEq for Position

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · 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 PyClass for Position

Source§

const NAME: &str = "Position"

Name of the class. Read more
Source§

type Frozen = False

Whether the pyclass is frozen. Read more
Source§

impl PyClassImpl for Position

Source§

const MODULE: Option<&str>

Module which the class will be associated with. Read more
Source§

const IS_BASETYPE: bool = false

#[pyclass(subclass)]
Source§

const IS_SUBCLASS: bool = false

#[pyclass(extends=…)]
Source§

const IS_MAPPING: bool = false

#[pyclass(mapping)]
Source§

const IS_SEQUENCE: bool = false

#[pyclass(sequence)]
Source§

const IS_IMMUTABLE_TYPE: bool = false

#[pyclass(immutable_type)]
Source§

const RAW_DOC: &'static CStr = /// Represents a position in a market. /// /// The position ID may be assigned at the trading venue, or can be system /// generated depending on a strategies OMS (Order Management System) settings.

Docstring for the class provided on the struct or enum. Read more
Source§

const DOC: &'static CStr

Fully rendered class doc, including the text_signature if a constructor is defined. Read more
Source§

type Layout = <<Position as PyClassImpl>::BaseNativeType as PyClassBaseType>::Layout<Position>

Description of how this class is laid out in memory
Source§

type BaseType = PyAny

Base class
Source§

type ThreadChecker = NoopThreadChecker

This handles following two situations: Read more
Source§

type Inventory = Pyo3MethodsInventoryForPosition

Source§

type PyClassMutability = <<PyAny as PyClassBaseType>::PyClassMutability as PyClassMutability>::MutableChild

Immutable or mutable
Source§

type Dict = PyClassDummySlot

Specify this class has #[pyclass(dict)] or not.
Source§

type WeakRef = PyClassDummySlot

Specify this class has #[pyclass(weakref)] or not.
Source§

type BaseNativeType = PyAny

The closest native ancestor. This is PyAny by default, and when you declare #[pyclass(extends=PyDict)], it’s PyDict.
Source§

fn items_iter() -> PyClassItemsIter

Source§

fn lazy_type_object() -> &'static LazyTypeObject<Self>

Source§

fn dict_offset() -> Option<PyObjectOffset>

Used to provide the dictoffset slot (equivalent to tp_dictoffset)
Source§

fn weaklist_offset() -> Option<PyObjectOffset>

Used to provide the weaklistoffset slot (equivalent to tp_weaklistoffset
Source§

impl PyClassNewTextSignature for Position

Source§

const TEXT_SIGNATURE: &'static str = "(instrument, fill)"

Source§

impl PyStubType for Position

Source§

fn type_output() -> TypeInfo

The type to be used in the output signature, i.e. return type of the Python function or methods.
Source§

fn type_input() -> TypeInfo

The type to be used in the input signature, i.e. the arguments of the Python function or methods. Read more
Source§

impl PyTypeInfo for Position

Source§

const NAME: &str = <Self as ::pyo3::PyClass>::NAME

👎Deprecated since 0.28.0:

prefer using ::type_object(py).name() to get the correct runtime value

Class name.
Source§

const MODULE: Option<&str> = <Self as ::pyo3::impl_::pyclass::PyClassImpl>::MODULE

👎Deprecated since 0.28.0:

prefer using ::type_object(py).module() to get the correct runtime value

Module name, if any.
Source§

fn type_object_raw(py: Python<'_>) -> *mut PyTypeObject

Returns the PyTypeObject instance for this type.
Source§

fn type_object(py: Python<'_>) -> Bound<'_, PyType>

Returns the safe abstraction over the type object.
Source§

fn is_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type or a subclass of this type.
Source§

fn is_exact_type_of(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of this type.
Source§

impl Serialize for Position

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl DerefToPyAny for Position

Source§

impl Eq for Position

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. 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<'py, T> IntoPyObjectExt<'py> for T
where T: IntoPyObject<'py>,

Source§

fn into_bound_py_any(self, py: Python<'py>) -> Result<Bound<'py, PyAny>, PyErr>

Converts self into an owned Python object, dropping type information.
Source§

fn into_py_any(self, py: Python<'py>) -> Result<Py<PyAny>, PyErr>

Converts self into an owned Python object, dropping type information and unbinding it from the 'py lifetime.
Source§

fn into_pyobject_or_pyerr(self, py: Python<'py>) -> Result<Self::Output, PyErr>

Converts self into a Python object. Read more
Source§

impl<'py, T> IntoPyObjectNautilusExt<'py> for T
where T: IntoPyObjectExt<'py>,

Source§

fn into_py_any_unwrap(self, py: Python<'py>) -> Py<PyAny>

Convert self into a Py<PyAny> while panicking if the conversion fails. Read more
Source§

impl<T> PyErrArguments for T
where T: for<'py> IntoPyObject<'py> + Send + Sync,

Source§

fn arguments(self, py: Python<'_>) -> Py<PyAny>

Arguments for exception
Source§

impl<T> PyTypeCheck for T
where T: PyTypeInfo,

Source§

const NAME: &'static str = T::NAME

👎Deprecated since 0.27.0:

Use ::classinfo_object() instead and format the type name at runtime. Note that using built-in cast features is often better than manual PyTypeCheck usage.

Name of self. This is used in error messages, for example.
Source§

fn type_check(object: &Bound<'_, PyAny>) -> bool

Checks if object is an instance of Self, which may include a subtype. Read more
Source§

fn classinfo_object(py: Python<'_>) -> Bound<'_, PyAny>

Returns the expected type as a possible argument for the isinstance and issubclass function. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<'py, T> FromPyObjectOwned<'py> for T
where T: for<'a> FromPyObject<'a, 'py>,

Source§

impl<T> Ungil for T
where T: Send,