{"record":{"id":"4ae8c8ec65c1979d","repo":"nautechsystems/nautilus_trader","slug":"binance-futures-instrument-instrument-id-is-not","errorCode":null,"errorMessage":"Binance Futures instrument {instrument_id} is not loaded for reconciliation","messagePattern":"Binance Futures instrument (.+?) is not loaded for reconciliation","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"crates/adapters/binance/src/futures/execution.rs","lineNumber":980,"sourceCode":"\n        self.http_client\n            .close_listen_key(key.expose_secret())\n            .await\n            .with_context(|| context.to_string())?;\n        let mut owned = slot.write();\n        if owned.as_ref().map(SecretString::expose_secret) == Some(key.expose_secret()) {\n            *owned = None;\n        }\n        Ok(())\n    }\n\n    /// Returns the (price_precision, size_precision) for an instrument.\n    fn get_instrument_precision(&self, instrument_id: InstrumentId) -> anyhow::Result<(u8, u8)> {\n        self.http_client\n            .instrument_reconciliation(&instrument_id)\n            .map(|instrument| (instrument.price_precision(), instrument.size_precision()))\n            .ok_or_else(|| {\n                anyhow::anyhow!(\n                    \"Binance Futures instrument {instrument_id} is not loaded for reconciliation\"\n                )\n            })\n    }\n\n    fn is_instrument_out_of_scope(&self, instrument_id: InstrumentId) -> bool {\n        let provider = &self.config.instrument_provider;\n        !provider.load_all\n            && provider.load_ids.as_ref().is_some_and(|load_ids| {\n                load_ids\n                    .iter()\n                    .all(|raw_id| InstrumentId::from(raw_id.as_str()) != instrument_id)\n            })\n    }\n\n    /// Creates a position status report from Binance position risk data.\n    fn create_position_report(\n        &self,","sourceCodeStart":962,"sourceCodeEnd":998,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/adapters/binance/src/futures/execution.rs#L962-L998","documentation":"For order reconciliation, query_order needs each instrument's price/size precision; get_instrument_precision looks the instrument up in the HTTP client's instrument_reconciliation cache and errors with this message when the instrument is absent. It means the Binance Futures instrument was never loaded into the client before an order query/reconciliation.","triggerScenarios":"Calling query_order (or triggering reconciliation) for an instrument_id that was not added to the client — e.g. order events referencing an instrument added after connect, or a symbol not included in the configured instrument provider load scope.","commonSituations":"Loading only a subset of instruments (load_all=false with limited filters) but trading/reconciling symbols outside that set; or submitting/restoring orders on a freshly added symbol before instruments finish loading.","solutions":["Add the instrument to the instrument provider load scope (e.g. load_ids containing the instrument) before connecting","Ensure instruments are loaded/initialized (await initialization) before submitting or reconciling orders","Verify the instrument_id symbol and venue exactly match a Binance Futures symbol (e.g. BTCUSDT-PERP.BINANCE)","Cache the instrument in the client's reconciliation instruments prior to query_order"],"exampleFix":"// before\nconfig = BinanceFuturesExecClientConfig(instrument_provider=InstrumentProviderConfig(load_all=False))\n// after\nconfig = BinanceFuturesExecClientConfig(\n    instrument_provider=InstrumentProviderConfig(load_ids=[InstrumentId.from_str(\"BTCUSDT-PERP.BINANCE\")])\n)  # ensure the traded instrument is loaded before reconciliation","handlingStrategy":"validation","validationCode":"if client.instrument_reconciliation(&instrument_id).is_none() {\n    return Err(anyhow::anyhow!(\"{instrument_id} not loaded; add it to the provider load scope\"));\n}","typeGuard":null,"tryCatchPattern":"match client.query_order(&instrument_id, &client_order_id) {\n    Err(e) if e.to_string().contains(\"is not loaded for reconciliation\") => {\n        eprintln!(\"load {instrument_id} before querying orders: {e}\");\n    }\n    other => other?,\n}","preventionTips":["List every traded instrument in the instrument provider load_ids (or use load_all)","Wait for instrument initialization before submitting/restoring orders","Match instrument_id venue/symbol formatting exactly (e.g. BTCUSDT-PERP.BINANCE)"],"tags":["binance","instrument-not-loaded","reconciliation","config"],"backgroundTag":"entity-not-found","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}