#[non_exhaustive]pub struct OrderRules {
pub price: ValueRule,
pub quantity: ValueRule,
pub market_quantity: ValueRule,
pub notional: ValueRule,
pub market_notional: ValueRule,
pub trailing_offset_above: ValueRule,
pub trailing_offset_below: ValueRule,
}Expand description
Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.price: ValueRuleThe grid and range of a limit, stop and trigger price, and of a trailing order’s activation price.
quantity: ValueRuleThe grid and range of every order’s quantity.
market_quantity: ValueRuleThe grid and range of a market order’s quantity, on top of quantity.
notional: ValueRuleThe range of the notional, a price times a quantity. Its step is not used.
market_notional: ValueRuleThe part of notional the venue also applies to a market order: off
where the venue exempts market orders. Its step is not used.
check never applies it: a market order has no price of its own, and the
venue measures its notional at a price of its own choosing, such as a reference price or
an average of recent trades, that the check cannot know. A caller that holds a price it
trusts can compare that price times the quantity with this rule’s min and max.
trailing_offset_above: ValueRuleThe range of a trailing order’s offset, in basis points, when its trigger trails above the
market and fires on a rise: a buy trailing stop. Its step is not used.
trailing_offset_below: ValueRuleThe range of a trailing order’s offset, in basis points, when its trigger trails below the
market and fires on a fall: a sell trailing stop. Its step is not used.
Implementations§
Source§impl OrderRules
impl OrderRules
Sourcepub fn new(
price: ValueRule,
quantity: ValueRule,
market_quantity: ValueRule,
notional: ValueRule,
) -> Self
pub fn new( price: ValueRule, quantity: ValueRule, market_quantity: ValueRule, notional: ValueRule, ) -> Self
Rules with price, quantity, market_quantity and notional as given, and the rest
off: add them with with_market_notional and
with_trailing_offsets.
Sourcepub fn with_market_notional(self, market_notional: ValueRule) -> Self
pub fn with_market_notional(self, market_notional: ValueRule) -> Self
These rules with market_notional as given.
Sourcepub fn with_trailing_offsets(self, above: ValueRule, below: ValueRule) -> Self
pub fn with_trailing_offsets(self, above: ValueRule, below: ValueRule) -> Self
These rules with trailing_offset_above and
trailing_offset_below as given.
Sourcepub fn round_quantity_down(
&self,
kind: OrderKind,
quantity: Decimal,
) -> Option<Decimal>
pub fn round_quantity_down( &self, kind: OrderKind, quantity: Decimal, ) -> Option<Decimal>
The largest quantity at or below quantity that an order of kind may have on the grid:
a multiple of quantity’s step and, for a market order, of
market_quantity’s too, so a multiple of the smallest step both
grids share. As ValueRule::round_down otherwise: it does not clamp to either rule’s
range, so check the result before sending it.
Returns None when a Decimal cannot hold the result, as for
ValueRule::round_down, or cannot hold the step of the grid the two steps share.
Sourcepub fn round_quantity_up(
&self,
kind: OrderKind,
quantity: Decimal,
) -> Option<Decimal>
pub fn round_quantity_up( &self, kind: OrderKind, quantity: Decimal, ) -> Option<Decimal>
The smallest quantity at or above quantity that an order of kind may have on the grid.
As round_quantity_down otherwise.
Sourcepub fn check<AssetKey, InstrumentKey>(
&self,
side: Side,
kind: OrderKind,
price: Option<Decimal>,
quantity: Decimal,
) -> Result<(), OrderError<AssetKey, InstrumentKey>>
pub fn check<AssetKey, InstrumentKey>( &self, side: Side, kind: OrderKind, price: Option<Decimal>, quantity: Decimal, ) -> Result<(), OrderError<AssetKey, InstrumentKey>>
Check an order on side of kind, with its limit price and quantity, against the
rules.
Returns the first rule the order breaks, or Ok if it breaks none, checking in this order:
- Prices, the grid and then the range, each on its own value: the limit
priceof a limit, stop-limit, take-profit-limit or fixed-limit trailing order; the trigger price of a stop, stop-limit, take-profit or take-profit-limit order; and a trailing order’s activation price when it has one. A market order has no price to check. - Trailing offset, of a trailing stop of any kind: a buy’s against
trailing_offset_above, a sell’s againsttrailing_offset_below. An offset inPercentageis compared in percent, the limits divided by 100, so a refusal names both in the order’s own unit. AnAbsoluteoffset is not checked: its size in basis points depends on a price the check does not have. - Quantity, against
quantityand, for a market order, thenmarket_quantity. - Notional,
price × quantity, only where the price is the order’s own limit: a limit, stop-limit, take-profit-limit or fixed-limit trailing order. Never a market, plain stop or trailing-stop order: the venue prices them at a reference price this check cannot know, which is also whymarket_notionalis never checked. An order with nopriceskips it.
A closing order is checked like any other: a venue that enforces a minimum notional enforces it on a close too, so an exemption would move the refusal to the venue.
§Errors
OrderError::InvalidPrecision with PrecisionLimit::NotOnGrid for a value off its
grid, OrderError::OutOfBounds for one outside its range.
Trait Implementations§
Source§impl Clone for OrderRules
impl Clone for OrderRules
impl Copy for OrderRules
Source§impl Debug for OrderRules
impl Debug for OrderRules
Source§impl Default for OrderRules
impl Default for OrderRules
Source§impl<'de> Deserialize<'de> for OrderRules
impl<'de> Deserialize<'de> for OrderRules
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for OrderRules
Source§impl Hash for OrderRules
impl Hash for OrderRules
Source§impl PartialEq for OrderRules
impl PartialEq for OrderRules
Source§impl Serialize for OrderRules
impl Serialize for OrderRules
impl StructuralPartialEq for OrderRules
Auto Trait Implementations§
impl Freeze for OrderRules
impl RefUnwindSafe for OrderRules
impl Send for OrderRules
impl Sync for OrderRules
impl Unpin for OrderRules
impl UnsafeUnpin for OrderRules
impl UnwindSafe for OrderRules
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreimpl<T> JsonSchemaMaybe for T
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.