QuoteOneSide

Struct QuoteOneSide 

Source
pub struct QuoteOneSide;
Expand description

An advanced algorithm that quotes one side of a market by joining the passive side within a specified number of ticks, with the option to improve the market by one tick to gain queue priority.

The primary intended use is in the context of spread trading, where it can be used to work the passive side of a spread while maintaining price competitiveness.

§Key Functionality

  • max_ticks_outside determines the range of ticks from the best same-side price to quote. This is the maximum number of ticks outside (less aggressive than) the BBO that the algo will quote.

  • This algo will always put out a limit order with a price that is equal to or less aggressive than the set limit price. It will attempt to only post liquidity, so it will not cross the market unless the market moves toward the order in the midst of sending the order.

  • The algorithm can improve the market by one tick when:

    • improve_or_join is set to Improve
    • The opposite side is at least one tick away
    • Improving would not violate the limit price
  • This algorithm will always have at most one order at a time out.

§Quote Positioning Strategy

The algorithm uses a sophisticated positioning strategy:

  • Join Mode: Places orders at the current best bid/ask on the same side

    • IMPORTANT: The algo joins at the BBO which INCLUDES its own order once placed
    • Once at the BBO, the order maintains that price level even if other orders cancel
    • This means the algo won’t automatically back off to less aggressive prices
    • This behavior is a side effect of only using L1 data to determine the BBO
    • However, it may result in the algo being alone at a price level if others cancel
    • The order will only move to MORE aggressive prices (never less aggressive in Join mode)
  • Improve Mode: Places orders one tick better than the current best bid/ask if there’s room

    • Attempts to gain queue priority by improving the market by exactly one tick
    • Will not cross the spread (checks opposite side before improving)
  • This algorithm will behave differently in PAPER_TRADING than on the real exchange, because PAPER_TRADING does not affect the order book

The algorithm continuously monitors the market and repositions the quote as needed to maintain competitiveness while respecting the specified constraints.

§Use Cases

  • Market Making: Providing liquidity on one side of the market
  • Spread Trading: Working the passive leg of a spread trade
  • Passive Execution: Getting filled at favorable prices without crossing the spread

Trait Implementations§

Source§

impl Algo for QuoteOneSide

Source§

impl Clone for QuoteOneSide

Source§

fn clone(&self) -> QuoteOneSide

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 QuoteOneSide

Source§

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

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

impl<'de> Deserialize<'de> for QuoteOneSide

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 JsonSchema for QuoteOneSide

Source§

fn schema_name() -> String

The name of the generated JSON Schema. Read more
Source§

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type. Read more
Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
Source§

fn is_referenceable() -> bool

Whether JSON Schemas generated for this type should be re-used where possible using the $ref keyword. Read more
Source§

impl Serialize for QuoteOneSide

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

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

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

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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, 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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,