Struct MarginAccount

Source
pub struct MarginAccount {
    pub base: BaseAccount,
    pub leverages: HashMap<InstrumentId, f64>,
    pub margins: HashMap<InstrumentId, MarginBalance>,
    pub default_leverage: f64,
}

Fields§

§base: BaseAccount§leverages: HashMap<InstrumentId, f64>§margins: HashMap<InstrumentId, MarginBalance>§default_leverage: f64

Implementations§

Source§

impl MarginAccount

Source

pub fn new(event: AccountState, calculate_account_state: bool) -> Self

Creates a new MarginAccount instance.

Source

pub fn set_default_leverage(&mut self, leverage: f64)

Source

pub fn set_leverage(&mut self, instrument_id: InstrumentId, leverage: f64)

Source

pub fn get_leverage(&self, instrument_id: &InstrumentId) -> f64

Source

pub fn is_unleveraged(&self, instrument_id: InstrumentId) -> bool

Source

pub fn is_cash_account(&self) -> bool

Source

pub fn is_margin_account(&self) -> bool

Source

pub fn initial_margins(&self) -> HashMap<InstrumentId, Money>

Source

pub fn maintenance_margins(&self) -> HashMap<InstrumentId, Money>

Source

pub fn update_initial_margin( &mut self, instrument_id: InstrumentId, margin_init: Money, )

Updates the initial margin for the specified instrument.

§Panics

Panics if an existing margin balance is found but cannot be unwrapped.

Source

pub fn initial_margin(&self, instrument_id: InstrumentId) -> Money

Returns the initial margin amount for the specified instrument.

§Panics

Panics if no margin balance exists for the given instrument_id.

Source

pub fn update_maintenance_margin( &mut self, instrument_id: InstrumentId, margin_maintenance: Money, )

Updates the maintenance margin for the specified instrument.

§Panics

Panics if an existing margin balance is found but cannot be unwrapped.

Source

pub fn maintenance_margin(&self, instrument_id: InstrumentId) -> Money

Returns the maintenance margin amount for the specified instrument.

§Panics

Panics if no margin balance exists for the given instrument_id.

Source

pub fn calculate_initial_margin<T: Instrument>( &mut self, instrument: T, quantity: Quantity, price: Price, use_quote_for_inverse: Option<bool>, ) -> Money

Calculates the initial margin amount for the specified instrument and quantity.

§Panics

Panics if conversion from Decimal to f64 fails, or if instrument.base_currency() is None for inverse instruments.

Source

pub fn calculate_maintenance_margin<T: Instrument>( &mut self, instrument: T, quantity: Quantity, price: Price, use_quote_for_inverse: Option<bool>, ) -> Money

Calculates the maintenance margin amount for the specified instrument and quantity.

§Panics

Panics if conversion from Decimal to f64 fails, or if instrument.base_currency() is None for inverse instruments.

Source

pub fn recalculate_balance(&mut self, currency: Currency)

Recalculates the account balance for the specified currency based on current margins.

§Panics

This function panics if:

  • No starting balance exists for the given currency.
  • Total free margin would be negative.
Source§

impl MarginAccount

Source

pub fn py_calculate_initial_margin( &mut self, instrument: PyObject, quantity: Quantity, price: Price, use_quote_for_inverse: Option<bool>, py: Python<'_>, ) -> PyResult<Money>

Calculates the initial margin for a given instrument and quantity at the specified price.

§Errors

Returns a PyErr if the Python instrument object cannot be converted to a supported internal instrument, or if the instrument type is unsupported.

Source

pub fn py_calculate_maintenance_margin( &mut self, instrument: PyObject, quantity: Quantity, price: Price, use_quote_for_inverse: Option<bool>, py: Python<'_>, ) -> PyResult<Money>

Calculates the maintenance margin for a given instrument and quantity at the specified price.

§Errors

Returns a PyErr if the Python instrument object cannot be converted to a supported internal instrument, or if the instrument type is unsupported.

Methods from Deref<Target = BaseAccount>§

Source

pub fn base_balance( &self, currency: Option<Currency>, ) -> Option<&AccountBalance>

Returns a reference to the AccountBalance for the specified currency, or None if absent.

§Panics

Panics if currency is None and self.base_currency is None.

Source

pub fn base_balance_total(&self, currency: Option<Currency>) -> Option<Money>

Returns the total Money balance for the specified currency, or None if absent.

§Panics

Panics if currency is None and self.base_currency is None.

Source

pub fn base_balances_total(&self) -> HashMap<Currency, Money>

Source

pub fn base_balance_free(&self, currency: Option<Currency>) -> Option<Money>

Returns the free Money balance for the specified currency, or None if absent.

§Panics

Panics if currency is None and self.base_currency is None.

Source

pub fn base_balances_free(&self) -> HashMap<Currency, Money>

Source

pub fn base_balance_locked(&self, currency: Option<Currency>) -> Option<Money>

Returns the locked Money balance for the specified currency, or None if absent.

§Panics

Panics if currency is None and self.base_currency is None.

Source

pub fn base_balances_locked(&self) -> HashMap<Currency, Money>

Source

pub fn base_last_event(&self) -> Option<AccountState>

Source

pub fn update_balances(&mut self, balances: Vec<AccountBalance>)

Updates the account balances with the provided list of AccountBalance instances.

§Panics

Panics if any updated AccountBalance has a total less than zero.

Source

pub fn update_commissions(&mut self, commission: Money)

Source

pub fn base_apply(&mut self, event: AccountState)

Source

pub fn base_purge_account_events( &mut self, ts_now: UnixNanos, lookback_secs: u64, )

Purges all account state events which are outside the lookback window.

Guaranteed to retain at least the latest event.

§Panics

Panics if the purging implementation is changed and all events are purged.

Source

pub fn base_calculate_balance_locked( &mut self, instrument: InstrumentAny, side: OrderSide, quantity: Quantity, price: Price, use_quote_for_inverse: Option<bool>, ) -> Result<Money>

Calculates the amount of balance to lock for a new order based on the given side, quantity, and price.

§Errors

This function never returns an error (TBD).

§Panics

Panics if side is not OrderSide::Buy or OrderSide::Sell.

Source

pub fn base_calculate_pnls( &self, instrument: InstrumentAny, fill: OrderFilled, position: Option<Position>, ) -> Result<Vec<Money>>

Calculates profit and loss amounts for a filled order.

§Errors

This function never returns an error (TBD).

§Panics

Panics if fill.order_side is neither OrderSide::Buy nor OrderSide::Sell.

Source

pub fn base_calculate_commission( &self, instrument: InstrumentAny, last_qty: Quantity, last_px: Price, liquidity_side: LiquiditySide, use_quote_for_inverse: Option<bool>, ) -> Result<Money>

Calculates commission fees for a filled order.

§Errors

This function never returns an error (TBD).

§Panics

Panics if liquidity_side is LiquiditySide::NoLiquiditySide or otherwise invalid.

Trait Implementations§

Source§

impl Account for MarginAccount

Source§

fn id(&self) -> AccountId

Source§

fn account_type(&self) -> AccountType

Source§

fn base_currency(&self) -> Option<Currency>

Source§

fn is_cash_account(&self) -> bool

Source§

fn is_margin_account(&self) -> bool

Source§

fn calculated_account_state(&self) -> bool

Source§

fn balance_total(&self, currency: Option<Currency>) -> Option<Money>

Source§

fn balances_total(&self) -> HashMap<Currency, Money>

Source§

fn balance_free(&self, currency: Option<Currency>) -> Option<Money>

Source§

fn balances_free(&self) -> HashMap<Currency, Money>

Source§

fn balance_locked(&self, currency: Option<Currency>) -> Option<Money>

Source§

fn balances_locked(&self) -> HashMap<Currency, Money>

Source§

fn balance(&self, currency: Option<Currency>) -> Option<&AccountBalance>

Source§

fn last_event(&self) -> Option<AccountState>

Source§

fn events(&self) -> Vec<AccountState>

Source§

fn event_count(&self) -> usize

Source§

fn currencies(&self) -> Vec<Currency>

Source§

fn starting_balances(&self) -> HashMap<Currency, Money>

Source§

fn balances(&self) -> HashMap<Currency, AccountBalance>

Source§

fn apply(&mut self, event: AccountState)

Source§

fn purge_account_events(&mut self, ts_now: UnixNanos, lookback_secs: u64)

Source§

fn calculate_balance_locked( &mut self, instrument: InstrumentAny, side: OrderSide, quantity: Quantity, price: Price, use_quote_for_inverse: Option<bool>, ) -> Result<Money>

Calculates locked balance for the order parameters. Read more
Source§

fn calculate_pnls( &self, _instrument: InstrumentAny, fill: OrderFilled, position: Option<Position>, ) -> Result<Vec<Money>>

Calculates PnLs for the fill and position. Read more
Source§

fn calculate_commission( &self, instrument: InstrumentAny, last_qty: Quantity, last_px: Price, liquidity_side: LiquiditySide, use_quote_for_inverse: Option<bool>, ) -> Result<Money>

Calculates commission for the order fill parameters. Read more
Source§

impl Clone for MarginAccount

Source§

fn clone(&self) -> MarginAccount

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 MarginAccount

Source§

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

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

impl Deref for MarginAccount

Source§

type Target = BaseAccount

The resulting type after dereferencing.
Source§

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

Dereferences the value.
Source§

impl DerefMut for MarginAccount

Source§

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

Mutably dereferences the value.
Source§

impl<'de> Deserialize<'de> for MarginAccount

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 MarginAccount

Source§

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

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

impl From<MarginAccount> for AccountAny

Source§

fn from(v: MarginAccount) -> AccountAny

Converts to this type from the input type.
Source§

impl Hash for MarginAccount

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 IntoPy<Py<PyAny>> for MarginAccount

Source§

fn into_py(self, py: Python<'_>) -> PyObject

👎Deprecated since 0.23.0: IntoPy is going to be replaced by IntoPyObject. See the migration guide (https://pyo3.rs/v0.23.0/migration) for more information.
Performs the conversion.
Source§

impl<'py> IntoPyObject<'py> for MarginAccount

Source§

type Target = MarginAccount

The Python output type
Source§

type Output = Bound<'py, <MarginAccount 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 MarginAccount

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 MarginAccount

Source§

type Frozen = False

Whether the pyclass is frozen. Read more
Source§

impl PyClassImpl for MarginAccount

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§

type BaseType = PyAny

Base class
Source§

type ThreadChecker = SendablePyClass<MarginAccount>

This handles following two situations: Read more
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 doc(py: Python<'_>) -> PyResult<&'static CStr>

Rendered class doc
Source§

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

§

fn dict_offset() -> Option<isize>

§

fn weaklist_offset() -> Option<isize>

Source§

impl PyClassNewTextSignature<MarginAccount> for PyClassImplCollector<MarginAccount>

Source§

fn new_text_signature(self) -> Option<&'static str>

Source§

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a MarginAccount

Source§

type Holder = Option<PyRef<'py, MarginAccount>>

Source§

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut Self::Holder, ) -> PyResult<Self>

Source§

impl<'a, 'py> PyFunctionArgument<'a, 'py, false> for &'a mut MarginAccount

Source§

type Holder = Option<PyRefMut<'py, MarginAccount>>

Source§

fn extract( obj: &'a Bound<'py, PyAny>, holder: &'a mut Self::Holder, ) -> PyResult<Self>

Source§

impl PyMethods<MarginAccount> for PyClassImplCollector<MarginAccount>

Source§

fn py_methods(self) -> &'static PyClassItems

Source§

impl PyTypeInfo for MarginAccount

Source§

const NAME: &'static str = "MarginAccount"

Class name.
Source§

const MODULE: Option<&'static str>

Module name, if any.
Source§

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

Returns the PyTypeObject instance for this type.
§

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

Returns the safe abstraction over the type object.
§

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

👎Deprecated since 0.23.0: renamed to PyTypeInfo::type_object
Deprecated name for [PyTypeInfo::type_object].
§

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

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

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

👎Deprecated since 0.23.0: renamed to PyTypeInfo::is_type_of
Deprecated name for [PyTypeInfo::is_type_of].
§

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

Checks if object is an instance of this type.
§

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

👎Deprecated since 0.23.0: renamed to PyTypeInfo::is_exact_type_of
Deprecated name for [PyTypeInfo::is_exact_type_of].
Source§

impl Serialize for MarginAccount

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 TryInto<MarginAccount> for AccountAny

Source§

type Error = &'static str

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

fn try_into( self, ) -> Result<MarginAccount, <Self as TryInto<MarginAccount>>::Error>

Performs the conversion.
Source§

impl DerefToPyAny for MarginAccount

Source§

impl Eq for MarginAccount

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
§

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

§

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

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromPyObject<'_> for T
where T: PyClass + Clone,

§

fn extract_bound(obj: &Bound<'_, PyAny>) -> Result<T, PyErr>

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

impl<'py, T> FromPyObjectBound<'_, 'py> for T
where T: FromPyObject<'py>,

§

fn from_py_object_bound(ob: Borrowed<'_, 'py, PyAny>) -> Result<T, PyErr>

Extracts Self from the bound smart pointer obj. 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.

§

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

§

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

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

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

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>

§

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

§

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

Arguments for exception
§

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

§

const NAME: &'static str = <T as PyTypeInfo>::NAME

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

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

Checks if object is an instance of Self, which may include a subtype. 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> Separable for T
where T: Display,

Source§

fn separate_by_policy(&self, policy: SeparatorPolicy<'_>) -> String

Adds separators according to the given SeparatorPolicy. Read more
Source§

fn separate_with_commas(&self) -> String

Inserts a comma every three digits from the right. Read more
Source§

fn separate_with_spaces(&self) -> String

Inserts a space every three digits from the right. Read more
Source§

fn separate_with_dots(&self) -> String

Inserts a period every three digits from the right. Read more
Source§

fn separate_with_underscores(&self) -> String

Inserts an underscore every three digits from the right. Read more
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

Source§

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

§

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