{"record":{"id":"682e66d58f80249e","repo":"nautechsystems/nautilus_trader","slug":"symbol-is-not-trading-status","errorCode":null,"errorMessage":"Symbol '{}' is not trading (status: {:?})","messagePattern":"Symbol '(.+?)' is not trading \\(status: (.+?)\\)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"warning","filePath":"crates/adapters/binance/src/common/parse.rs","lineNumber":296,"sourceCode":"        Delivery,\n    }\n\n    let contract_kind = match symbol.contract_type.as_str() {\n        CONTRACT_TYPE_PERPETUAL => ContractKind::CryptoPerpetual,\n        CONTRACT_TYPE_TRADIFI_PERPETUAL => ContractKind::TradFi(parse_tradifi_asset_class(symbol)?),\n        CONTRACT_TYPE_CURRENT_MONTH\n        | CONTRACT_TYPE_NEXT_MONTH\n        | CONTRACT_TYPE_CURRENT_QUARTER\n        | CONTRACT_TYPE_NEXT_QUARTER => ContractKind::Delivery,\n        _ => anyhow::bail!(\n            \"Unsupported USD-M contract type '{}' for symbol '{}'\",\n            symbol.contract_type,\n            symbol.symbol,\n        ),\n    };\n\n    if symbol.status != BinanceTradingStatus::Trading {\n        anyhow::bail!(\n            \"Symbol '{}' is not trading (status: {:?})\",\n            symbol.symbol,\n            symbol.status\n        );\n    }\n\n    let quote_currency = get_currency(symbol.quote_asset.as_str());\n    let settlement_currency = get_currency(symbol.margin_asset.as_str());\n\n    let instrument_id = format_instrument_id(&symbol.symbol, BinanceProductType::UsdM);\n    let raw_symbol = Symbol::new(symbol.symbol.as_str());\n\n    let price_filter = get_filter(&symbol.filters, \"PRICE_FILTER\")\n        .context(\"Missing PRICE_FILTER in symbol filters\")?;\n\n    let tick_size = parse_filter_price(price_filter, \"tickSize\")?;\n    if tick_size.is_zero() {\n        anyhow::bail!(","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/a4b06ed870971b5671d12754ea138a3ab99b1dec/crates/adapters/binance/src/common/parse.rs#L278-L314","documentation":"parse_usdm_instrument_with_fees refuses to build an instrument for any USD-M symbol whose status is not BinanceTradingStatus::Trading, reporting the symbol and its current status. Non-trading states cover the listing/delisting lifecycle: pending-trading, settling, pre-settle, delivering, delivered.","triggerScenarios":"Loading USD-M instruments while one or more exchangeInfo symbols are in a non-TRADING lifecycle state — symbols pending listing, quarterly contracts in settlement/delivery, or already-delivered expired contracts.","commonSituations":"Startup coincides with a quarterly contract rotation; a bulk 'load all instruments' call during a delisting wave; replaying a recorded exchangeInfo snapshot that still contains expired contracts; explicitly requesting a specific expired symbol.","solutions":["Confirm the symbol's live status via the Binance USD-M exchangeInfo endpoint.","Load instruments only for an explicit allowlist of symbols you trade, all in TRADING status.","Treat this error as a skip condition during bulk loads rather than a fatal failure.","For expired contracts you only need historical data from, request historical bars directly instead of loading a live instrument."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Pre-filter USD-M symbols to those actively trading\nlet tradable: Vec<_> = exchange_info\n    .symbols\n    .into_iter()\n    .filter(|s| s.status == BinanceTradingStatus::Trading)\n    .collect();","typeGuard":"fn is_trading_usdm(status: BinanceTradingStatus) -> bool {\n    status == BinanceTradingStatus::Trading\n}","tryCatchPattern":"match parse_usdm_instrument(&symbol, ts_event, ts_init) {\n    Ok(inst) => instruments.push(inst),\n    Err(e) if e.to_string().contains(\"is not trading\") => {\n        tracing::debug!(symbol = %symbol.symbol, \"skipping non-trading symbol\")\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Load instruments from an explicit allowlist of symbols you trade rather than the whole exchange.","Run loads outside quarterly delivery/settlement windows when rotating contracts matter to you.","Treat 'is not trading' as an expected skip, not an alert-worthy failure."],"tags":["binance","usdm-futures","instrument-status","delisting","rust"],"backgroundTag":"instrument-not-trading","analyzedSha":"a4b06ed870971b5671d12754ea138a3ab99b1dec","analyzedAt":"2026-08-16T22:54:50.089Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}