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

  1. Add .quantity(Quantity::from(...)) to the builder chain before build().
  2. Use a shared test helper that always sets a default quantity.
  3. 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

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.