Skip to main content

Quantity

Enum Quantity 

pub enum Quantity {
    Absolute(String),
    PercentageOfPositionAtTrigger(String),
    PercentageOfPositionAtSubmission(String),
    OrderLink,
    FilledOrderLink,
}
Expand description

Defines how the quantity for a conditional order should be determined.

This enum provides flexible quantity specification for conditional orders, supporting both absolute quantities and dynamic quantities based on position size or linked orders.

§Variants

  • Absolute: Fixed quantity specified as a string
  • PercentageOfPositionAtTrigger: fraction (0,1] of position size when triggered
  • PercentageOfPositionAtSubmission: fraction (0,1] of position size when submitted
  • OrderLink: reserved — rejected with OrderLinkQuantityNotSupported (133)
  • FilledOrderLink: reserved — rejected with OrderLinkQuantityNotSupported (133)

§Field Aliases

All variants support compact aliases:

  • Absolute: "quantity" or "q"
  • PercentageOfPositionAtTrigger: "quantity_percentage_of_position_at_trigger" or "qppat"
  • PercentageOfPositionAtSubmission: "quantity_percentage_of_position_at_submission" or "qppas"
  • OrderLink: "quantity_order_link" or "qol"
  • FilledOrderLink: "quantity_filled_order_link" or "qfol"

§Use Cases

§Fixed Size Trading

use types::api::submit_order::Quantity;

// Trade exactly 1.5 BTC
let fixed_qty = Quantity::Absolute("1.5".to_string());

§Position-Based Trading

use types::api::submit_order::Quantity;

// Close 50% of position when triggered
let half_position = Quantity::PercentageOfPositionAtTrigger("0.5".to_string());

§Order Linking

use types::api::submit_order::Quantity;

// Match the quantity of a linked parent order
let linked_qty = Quantity::OrderLink;

§JSON Examples

// Fixed quantity
{"quantity": "1.5"}
{"q": "1.5"}

// Percentage-based
{"quantity_percentage_of_position_at_trigger": "0.25"}
{"qppat": "0.25"}

// Order linking
{"quantity_order_link": null}
{"qol": null}

Variants§

§

Absolute(String)

A fixed absolute quantity specified as a string.

This represents the exact size of the order, specified in the base asset. The quantity must be a valid decimal number and will be validated against market-specific constraints (minimum size, tick size, etc.).

§Examples

  • Absolute("1.5") for 1.5 BTC
  • Absolute("100.0") for 100 shares
  • Absolute("0.001") for 0.001 ETH

§Validation

  • Must be a positive decimal number
  • Must meet market minimum and maximum size requirements
  • Must conform to market quantity precision rules
§

PercentageOfPositionAtTrigger(String)

A percentage of the current position size calculated when the trigger activates.

The actual quantity is determined by taking the specified percentage of the position size at the moment the conditional trigger is activated. This allows for dynamic position sizing that adapts to position changes over time.

§Behavior

  • Position size is evaluated when the trigger condition is met
  • Percentage is applied to the absolute value of the position
  • If position is zero when triggered, the order will be canceled or rejected

§Format

Percentage should be expressed as a decimal (e.g., “0.25” for 25%, “1.0” for 100%)

§Examples

  • PercentageOfPositionAtTrigger("0.5") closes 50% of position when triggered
  • PercentageOfPositionAtTrigger("0.25") closes 25% of position when triggered

§Use Cases

  • Partial profit taking on winning positions
  • Gradual position reduction strategies
  • Risk management with position-proportional stops
§

PercentageOfPositionAtSubmission(String)

A percentage of the position size calculated when the order is first submitted.

The actual quantity is determined by taking the specified percentage of the position size at the moment the conditional order is created and submitted. This provides a fixed quantity based on the initial position state.

§Behavior

  • Position size is evaluated when the order is first submitted
  • Percentage is applied to the absolute value of the position at submission time
  • Quantity remains fixed even if position size changes before trigger

§Format

Percentage should be expressed as a decimal (e.g., “0.25” for 25%, “1.0” for 100%)

§Examples

  • PercentageOfPositionAtSubmission("0.5") uses 50% of position at order creation
  • PercentageOfPositionAtSubmission("1.0") uses 100% of position at order creation

§Use Cases

  • Fixed stop-loss size determined at order creation
  • Strategies where quantity should not change with position variations
  • Backtesting scenarios requiring consistent quantity calculation

Uses the original quantity of a linked parent order.

This variant creates a dependency on another order, using its original order quantity (not the filled quantity) for this conditional order. The linked order must be specified through the order linking fields in the Conditional struct.

§Requirements

  • Must specify either order_linked_activation_client_order_id or order_linked_activation_order_id
  • Must specify order_linked_activation_fill_quantity as a threshold
  • The linked order must exist and be valid

§Behavior

  • Uses the total original quantity of the linked order
  • Activates when the linked order reaches the specified fill threshold
  • Quantity is determined by the linked order’s original size

§Use Cases

  • Bracket orders where stop-loss matches entry order size
  • Parent-child order strategies
  • Automatic hedging with matching quantities

Uses the filled quantity of a linked parent order.

This variant uses the actual filled (executed) quantity of a linked parent order rather than its original order quantity. This is useful when you want the conditional order quantity to match only what was actually executed.

§Requirements

  • Must specify either order_linked_activation_client_order_id or order_linked_activation_order_id
  • Must specify order_linked_activation_fill_quantity as a threshold
  • The linked order must have some filled quantity

§Behavior

  • Uses the actual filled quantity of the linked order at trigger time
  • Activates when the linked order reaches the specified fill threshold
  • Quantity adapts to partial fills of the parent order

§Use Cases

  • Stop-loss orders that match actual executed quantity (not original order size)
  • Partial fill scenarios where conditional orders should scale accordingly
  • Risk management where exposure equals actual executed size

Trait Implementations§

§

impl Clone for Quantity

§

fn clone(&self) -> Quantity

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
§

impl Debug for Quantity

§

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

Formats the value using the given formatter. Read more
§

impl<'de> Deserialize<'de> for Quantity

§

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

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

impl Serialize for Quantity

§

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

Serialize this value into the given Serde serializer. 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
§

impl<U> As for U

§

fn as_<T>(self) -> T
where T: CastFrom<U>, U: Sized,

Casts self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more
§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

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
§

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

§

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

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

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

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

Source§

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

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

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

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

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
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

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

§

impl<T> Pipe for T
where T: ?Sized,

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

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

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. 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

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

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