nautechsystems/nautilus_trader · error

No order, orderTrigger, or orderPriorExecution data in event

Error message

No order, orderTrigger, or orderPriorExecution data in event

What it means

submit_order on Kraken Futures handles multiple event payloads (order, orderTrigger, orderPriorExecution). When the send_event contains none of these payload variants there is no data from which to build an order request, so the client bails. This is a guard against malformed or incomplete order submission events reaching the adapter.

Source

Thrown at crates/adapters/kraken/src/http/futures/client.rs:2195

                    }
                } else if let Some(prior_exec) = &send_event.order_prior_execution {
                    // EXECUTION event - use orderPriorExecution data
                    FuturesOrderEvent {
                        order_id: prior_exec.order_id.clone(),
                        cli_ord_id: prior_exec.cli_ord_id.clone(),
                        order_type: prior_exec.order_type,
                        symbol: prior_exec.symbol.clone(),
                        side: prior_exec.side,
                        quantity: prior_exec.quantity,
                        filled: send_event.amount.unwrap_or(prior_exec.quantity), // Use execution amount
                        limit_price: prior_exec.limit_price,
                        stop_price: prior_exec.stop_price,
                        timestamp: prior_exec.timestamp.clone(),
                        last_update_timestamp: prior_exec.last_update_timestamp.clone(),
                        reduce_only: prior_exec.reduce_only,
                    }
                } else {
                    anyhow::bail!("No order, orderTrigger, or orderPriorExecution data in event");
                };
                return parse_futures_order_event_status_report(
                    &event,
                    Some(send_event.event_type),
                    &instrument,
                    account_id,
                    ts_init,
                );
            }

            // Fall back to querying order events
            let events_response = self.inner.get_order_events(None, None, None).await?;
            let event_wrapper = events_response
                .order_events
                .iter()
                .find(|e| e.order.order_id == venue_order_id)
                .ok_or_else(|| {
                    anyhow::anyhow!("Order not found in open orders or events: {venue_order_id}")

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Inspect the OrderRequest/submit event and ensure it contains a populated order (or orderTrigger/orderPriorExecution) payload before calling submit_order.
  2. Log the full event at the call site to confirm which payload variant is present; fix construction of the event accordingly.
  3. Verify adapter/event type routing: only events carrying order data should reach this code path.
  4. Check for version mismatches between nautilus_core event definitions and the kraken adapter's expected payload shape.

Example fix

// before: event constructed without payload
let event = OrderRequest::new(instrument_id, account_id, None);
client.submit_order(event).await?;

// after: attach the order payload
let event = OrderRequest::new(instrument_id, account_id, Some(order_payload));
client.submit_order(event).await?;
Defensive patterns

Strategy: validation

Validate before calling

if order.order_payload().is_none() && order.trigger_payload().is_none() && order.prior_exec_payload().is_none() {
    return Err("cannot submit: no order/orderTrigger/orderPriorExecution payload");
}
client.submit_order(order).await?;

Type guard

fn has_submittable_payload(event: &OrderEvent) -> bool {
    event.order.is_some() || event.order_trigger.is_some() || event.order_prior_execution.is_some()
}

Try / catch

match client.submit_order(event).await {
    Err(e) if e.to_string().contains("No order, orderTrigger") => log::error!("event lacks order payload: {event:?}"),
    Err(e) => return Err(e),
    Ok(r) => r,
}

Prevention

When it happens

Trigger: Calling submit_order with an event whose send_event payload is empty or carries none of the order/orderTrigger/orderPriorExecution variants, e.g. an internally constructed order event missing its request payload, or an event type routed to this branch that never carried order data.

Common situations: Custom strategies submitting manually constructed OrderRequest events without the expected payload fields; version drift where the event schema changed and the payload no longer matches; bugs in upstream code that drops the order data before it reaches the adapter.

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/67901050f484729f. Report an issue: GitHub.