nautechsystems/nautilus_trader · error
missing trigger price for Derive trigger order {}
Error message
missing trigger price for Derive trigger order {} What it means
Derive trigger (conditional) orders require a trigger price, but the OrderRequestTrigger order passed to the payload builder has none. validate_trigger_order_support and type conversion run first; the trigger price is then extracted via order.trigger_price() and this error is thrown when it is None.
Source
Thrown at crates/adapters/derive/src/http/query.rs:536
wallet: Address,
signer: &PrivateKeySigner,
nonce: u64,
signature_expiry_sec: i64,
module_address: Address,
domain_separator: B256,
action_typehash: B256,
max_fee: Decimal,
explicit_price: Option<Decimal>,
conn_id: impl Into<String>,
order_id: impl Into<String>,
) -> anyhow::Result<DeriveTriggerOrderParams> {
validate_trigger_order_support(order)?;
let limit_price = resolve_limit_price(order, explicit_price)?;
let amount = order.quantity().as_decimal();
let order_type = trigger_order_type_to_derive(order.order_type())?;
let time_in_force = time_in_force_to_derive(order.time_in_force(), order.is_post_only())?;
let trigger_price = order.trigger_price().ok_or_else(|| {
anyhow::anyhow!(
"missing trigger price for Derive trigger order {}",
order.client_order_id()
)
})?;
let trigger_fields = DeriveTriggerFields {
trigger_price: trigger_price.as_decimal(),
trigger_price_type: trigger_price_type_to_derive(order.trigger_type())?,
trigger_type: trigger_type_to_derive(order.order_type())?,
};
let order = build_signed_order_params(
order,
instrument,
subaccount_id,
wallet,
signer,
nonce,
signature_expiry_sec,
module_address,View on GitHub (pinned to 18893faf8b)
Solutions
- Set trigger_price on the order before submitting it to Derive
- Ensure the order is built as a TriggerOrder type and not a plain Limit/Market order mislabeled
- Check the order-submission path so stop-distance values are converted into an absolute trigger price
Example fix
// before
let order = OrderRequestTrigger::builder().order_type(OrderType::StopMarket).quantity(qty).build();
// after
let order = OrderRequestTrigger::builder()
.order_type(OrderType::StopMarket)
.quantity(qty)
.trigger_price(Price::from("2500.00"))
.build(); Defensive patterns
Strategy: validation
Validate before calling
if let Some(order) = order.as_trigger() { assert!(order.trigger_price().is_some(), "trigger order {} missing trigger_price", order.client_order_id()); } Type guard
fn has_trigger_price(order: &OrderRequestTrigger) -> bool { order.trigger_price().is_some() } Try / catch
match submit(order) { Err(e) if e.to_string().contains("missing trigger price") => requeue_with_trigger_price(order), Err(e) => return Err(e) } Prevention
- Always set trigger_price when constructing trigger/stop orders
- Validate trigger price presence in your own order-builder API
- Never convert plain Limit/Market orders into Derive trigger orders without an absolute trigger price
When it happens
Trigger: Submitting a trigger/stop order to Derive where the request's trigger_price field was never set — e.g. building a TriggerOrder without trigger_price, or an order that lost its trigger through an amendment or conversion.
Common situations: Order builders that only set trigger_price conditionally; translating orders from another venue that models stops differently (e.g. stop-distance instead of stop-price); stale order state after partial rejection.
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
- AX requires whole contract quantities, was {}
- Order quantity must be at least 1 contract
- Unsupported order type: {:?}, the Architect AX adapter accep
- {FAILED}: {e}
- {FAILED}: {e}
AI-assisted analysis of nautechsystems/nautilus_trader@18893faf8b (2026-09-08).
Data as JSON: /api/errors/75ccfd2ee9e56287.
Report an issue: GitHub.