Skip to main content

AccountState

Struct AccountState 

Source
pub struct AccountState { /* private fields */ }
Expand description

Open orders, positions and wallet balances of one account.

Plain data (Send + Sync): it can live in any task. It does no I/O.

Implementations§

Source§

impl AccountState

Source

pub fn new() -> Self

An empty state; fill it with set_orders and friends or use load.

Source

pub async fn load(client: &Client, scope: &AccountScope) -> Result<Self, Error>

Create a state from REST snapshots of everything in scope.

Source

pub async fn reload( &mut self, client: &Client, scope: &AccountScope, ) -> Result<(), Error>

Fetch fresh REST snapshots of everything in scope and merge them (see set_orders and set_positions). Call it after every (re)connect of the private stream and after Event::Lagged.

The snapshot time is the server clock of client before the first request, so stream updates made meanwhile are kept. On error the categories loaded so far stay merged.

Source

pub fn set_wallet(&mut self, balance: WalletBalance)

Replace the balance of balance.account_type with a REST snapshot.

Source

pub fn set_orders( &mut self, category: Category, orders: Vec<Order>, snapshot_time: Timestamp, )

Merge a REST snapshot of the open orders of category.

snapshot_time is the server time of the response (Response::time), milliseconds.

  • an order from the snapshot replaces the stored one unless the stored one is newer, and is skipped if it was already closed by the stream;
  • a stored order missing from the snapshot is removed, unless it was updated after snapshot_time (it was opened after the snapshot).
Source

pub fn set_positions( &mut self, category: Category, positions: Vec<Position>, snapshot_time: Timestamp, )

Merge a REST snapshot of the positions of category.

A snapshot position replaces the stored one unless the stored one is newer. Stored positions missing from the snapshot are kept only if they were updated after snapshot_time.

Source

pub fn apply(&mut self, msg: TopicMessage) -> Vec<Change>

Apply one private stream message. Topics other than order, position and wallet are ignored.

Source

pub fn apply_order(&mut self, msg: OrderMsg) -> Option<Change>

Apply one order stream update. Returns None if it was stale.

Source

pub fn apply_position(&mut self, msg: PositionMsg) -> Option<Change>

Apply one position stream update. Returns None if it was stale.

Source

pub fn apply_wallet(&mut self, msg: WalletMsg) -> Change

Apply one wallet stream update (always a full balance).

Source

pub fn wallet(&self, account_type: AccountType) -> Option<&WalletBalance>

Balance of account_type, if loaded or received.

Source

pub fn wallets(&self) -> impl Iterator<Item = &WalletBalance>

All known wallet balances.

Source

pub fn order(&self, category: Category, order_id: &str) -> Option<&Order>

Open order by id.

Open order by the client-assigned orderLinkId.

Source

pub fn orders(&self) -> impl Iterator<Item = (&OrderKey, &Order)>

All open orders.

Source

pub fn orders_for<'a>( &'a self, category: Category, symbol: &'a str, ) -> impl Iterator<Item = &'a Order>

Open orders of one symbol.

Source

pub fn position( &self, category: Category, symbol: &str, position_idx: PositionIdx, ) -> Option<&Position>

Position by symbol and position index (OneWay, or Buy/Sell in hedge mode).

Source

pub fn positions(&self) -> impl Iterator<Item = (&PositionKey, &Position)>

All known positions, including closed ones (size 0), which still carry the leverage and risk limit settings.

Source

pub fn open_positions(&self) -> impl Iterator<Item = (&PositionKey, &Position)>

Positions with a non-zero size.

Trait Implementations§

Source§

impl Debug for AccountState

Source§

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

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

impl Default for AccountState

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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