Skip to main content

TradingRateLimiter

Struct TradingRateLimiter 

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

Trading rate limiter with order lifetime penalty tracking.

Tracks orders and calculates appropriate rate limit penalties when they are cancelled based on their age.

Implementations§

Source§

impl TradingRateLimiter

Source

pub fn new(max_counter: u32, decay_rate_per_sec: f64) -> Self

Create a new trading rate limiter.

§Arguments
  • max_counter - Maximum counter value
  • decay_rate_per_sec - How much the counter decays per second
Source

pub fn try_place_order( &mut self, order_id: &str, info: OrderTrackingInfo, ) -> Result<(), Duration>

Try to acquire capacity for a new order.

Returns Ok(()) if allowed, Err(wait_time) if rate limited.

Source

pub fn track_order( &mut self, order_id: impl Into<String>, info: OrderTrackingInfo, )

Track an order that was placed (without rate limit check).

Use this when the order was already placed successfully.

Source

pub fn cancel_penalty(age: Duration) -> u32

Calculate the penalty for cancelling an order.

Returns the penalty in points based on the order’s age.

Source

pub fn try_cancel_order(&mut self, order_id: &str) -> Result<u32, Duration>

Try to cancel an order with rate limit penalty.

Returns Ok(penalty) if allowed (with the penalty that was applied), or Err(wait_time) if rate limited.

Source

pub fn order_cancelled(&mut self, order_id: &str)

Notify the limiter that an order was cancelled (without rate limit check).

Use this when the cancellation was already processed.

Source

pub fn order_filled(&mut self, order_id: &str)

Notify the limiter that an order was filled.

Filled orders don’t incur cancellation penalties.

Source

pub fn current_counter(&self) -> f64

Get the current counter value (unscaled).

Source

pub fn available_capacity(&self) -> f64

Get the available capacity (unscaled).

Source

pub fn would_allow_place(&self) -> bool

Check if placing an order would be allowed.

Source

pub fn tracked_orders(&self) -> usize

Get the number of tracked orders.

Source

pub fn cleanup(&mut self)

Clean up expired order tracking entries.

Trait Implementations§

Source§

impl Debug for TradingRateLimiter

Source§

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

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

impl Default for TradingRateLimiter

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<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: 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: 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> 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 = 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<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