nautechsystems/nautilus_trader · error · anyhow::Error

UNSUPPORTED_QUOTE_QUANTITY

UNSUPPORTED_QUOTE_QUANTITY

Error message

UNSUPPORTED_QUOTE_QUANTITY

What it means

handle_submit_order_async denies the order because quote_quantity=true was set on a non-inverse instrument; the Interactive Brokers adapter only sizes orders in base currency for non-inverse instruments, so a quote-denominated quantity cannot be submitted and an OrderDenied event with reason UNSUPPORTED_QUOTE_QUANTITY is emitted instead of an error return.

Source

Thrown at crates/adapters/interactive_brokers/src/execution/core_orders.rs:70

            .map(|instrument| instrument.is_inverse())
            .unwrap_or(false);

        if cmd.order_init.quote_quantity && !is_inverse {
            let ts_event = clock.get_time_ns();
            let event = OrderDenied::new(
                cmd.order_init.trader_id,
                cmd.strategy_id,
                cmd.instrument_id,
                cmd.order_init.client_order_id,
                Ustr::from("UNSUPPORTED_QUOTE_QUANTITY"),
                UUID4::new(),
                ts_event,
                ts_event,
            );
            exec_sender
                .send(ExecutionEvent::Order(OrderEventAny::Denied(event)))
                .map_err(|e| anyhow::anyhow!("Failed to send order denied event: {e}"))?;
            anyhow::bail!("UNSUPPORTED_QUOTE_QUANTITY");
        }

        if matches!(
            cmd.order_init.order_type,
            OrderType::TrailingStopMarket | OrderType::TrailingStopLimit
        ) && let Some(trailing_offset_type) = cmd.order_init.trailing_offset_type
            && trailing_offset_type != TrailingOffsetType::Price
        {
            let ts_event = clock.get_time_ns();
            let reason = format!(
                "`TrailingOffsetType` {:?} is not supported (only PRICE is supported)",
                trailing_offset_type
            );
            let event = OrderDenied::new(
                cmd.order_init.trader_id,
                cmd.strategy_id,
                cmd.instrument_id,
                cmd.order_init.client_order_id,

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Set quote_quantity=false and specify the order size in base currency for non-inverse instruments.
  2. Convert the desired notional to a base quantity using the current price before submitting.
  3. Use an inverse instrument if quote-denominated sizing is genuinely required.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/adapters/interactive_brokers/src/execution/core_orders.rs:70 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08). Data as JSON: /api/errors/2e71ffdd409311f1. Report an issue: GitHub.