nautechsystems/nautilus_trader · error · anyhow::Error

Binance Futures open algo order has unresolved instrument {i

Error message

Binance Futures open algo order has unresolved instrument {instrument_id}

What it means

Fires in generate_open_order_status_reports when an open algo order's instrument cannot be resolved via HTTP reconciliation (typically because it is out of scope for the client), so no reliable status report can be produced for that order.

Source

Thrown at crates/adapters/binance/src/futures/execution.rs:1179

                reports.push(OpenOrderStatusReport {
                    report: with_venue_position_id(report, venue_position_id),
                    quantity_free_close_position_side: None,
                });
            }
        }

        for algo_order in algo_orders {
            let instrument_id = instrument_id
                .unwrap_or_else(|| format_instrument_id(&algo_order.symbol, self.product_type));
            let Some(instrument) = self.http_client.instrument_reconciliation(&instrument_id)
            else {
                if self.is_instrument_out_of_scope(instrument_id) {
                    log::debug!(
                        "Dropping out-of-scope Binance Futures open algo order for instrument {instrument_id}"
                    );
                    continue;
                }
                anyhow::bail!(
                    "Binance Futures open algo order has unresolved instrument {instrument_id}"
                );
            };

            if let Ok(report) = algo_order.to_order_status_report(
                self.core.account_id,
                instrument.id(),
                instrument.price_precision(),
                instrument.size_precision(),
                ts_init,
            ) {
                let venue_position_id = make_venue_position_id(
                    self.config.use_position_ids,
                    instrument.id(),
                    algo_order.position_side,
                )?;
                reports.push(OpenOrderStatusReport {
                    report: with_venue_position_id(report, venue_position_id),

View on GitHub (pinned to 18893faf8b)

Solutions

  1. Load the missing instrument into the cache before generating reports.
  2. Update scope configuration so the algo order's symbol is included (or intentionally dropped as out-of-scope).
  3. Cancel orphaned algo orders on the exchange that the client doesn't track.
Defensive patterns

Strategy: validation

Validate before calling

if cache.instrument(&instrument_id).is_none() {
    log::warn!("skipping open algo order for untracked instrument {instrument_id}");
    continue;
}

Prevention

When it happens

Trigger: generate_open_order_status_reports iterates open algo orders; an algo order's symbol lacks a cached instrument and is_instrument_out_of_scope is false.

Common situations: Conditional orders created outside this client (e.g. via exchange UI) for symbols not in the cache; product-type scope excluding symbols with existing algo orders.

Understand the failure class

Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.

Related errors


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