nautechsystems/nautilus_trader · error
Order quantity not set
Error message
Order quantity not set
What it means
A builder-invariant panic via Option::expect: OrderBuilder::build was invoked without quantity() having been called, so the required Quantity field is None. It indicates programmer error — an incomplete order definition — not a recoverable runtime condition; callers must set quantity before build.
Source
Thrown at crates/model/src/orders/builder.rs:186
// ----------- OrderSide ----------
pub fn side(&mut self, side: OrderSide) -> &mut Self {
self.side = Some(side);
self
}
fn get_side(&self) -> OrderSide {
self.side.unwrap_or(OrderSide::Buy)
}
// ----------- Quantity ----------
pub fn quantity(&mut self, quantity: Quantity) -> &mut Self {
self.quantity = Some(quantity);
self
}
fn get_quantity(&self) -> Quantity {
self.quantity.expect("Order quantity not set")
}
// ----------- Price ----------
pub fn price(&mut self, price: Price) -> &mut Self {
self.price = Some(price);
self
}
fn get_price(&self) -> Price {
self.price.expect("Price not set")
}
// ----------- TriggerPrice ----------
pub fn trigger_price(&mut self, trigger_price: Price) -> &mut Self {
self.trigger_price = Some(trigger_price);
self
}
View on GitHub (pinned to 18893faf8b)
Solutions
- Add .quantity(Quantity::from(...)) to the builder chain before build().
- Use a shared test helper that always sets a default quantity.
- Verify the quantity is a valid Quantity for the instrument's size precision.
Example fix
// before
let order = OrderTestBuilder::new(OrderType::Market).instrument_id(id).build();
// after
let order = OrderTestBuilder::new(OrderType::Market)
.instrument_id(id)
.quantity(Quantity::from(1))
.build(); Defensive patterns
Strategy: validation
Validate before calling
assert!(quantity.is_some(), "quantity must be set before build()"); builder.quantity(quantity.unwrap()).build();
Try / catch
// validate before build; build panics on missing required fields assert!(quantity.is_some());
Prevention
- Always chain .quantity(...) before build(); it is required for every order type.
- Use a fixture helper with default quantity for tests.
- Add a checklist comment of required builder fields in test scaffolding.
When it happens
Trigger: Calling OrderTestBuilder::build() without chaining .quantity(Quantity) beforehand.
Common situations: Skipping the quantity for order types where it seems optional (e.g. market orders in some venues), or copy-pasted builder setups missing the line.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/aa2f020eb7233a20.
Report an issue: GitHub.