nautechsystems/nautilus_trader · warning · anyhow::Error
Symbol '{}' is not trading (status: {})
Error message
Symbol '{}' is not trading (status: {}) What it means
parse_spot_instrument_sbe_with_fees rejects Spot symbols whose SBE-decoded status differs from SBE_STATUS_TRADING, reporting the symbol and numeric status. Spot has more lifecycle states than futures (pre-trading, post-trading, end-of-day, halt, auction-match, break, pending-trading); any of them trips this check.
Source
Thrown at crates/adapters/binance/src/common/parse.rs:704
/// - Price or quantity values cannot be parsed.
/// - The symbol is not actively trading.
pub fn parse_spot_instrument_sbe(
symbol: &BinanceSymbolSbe,
ts_event: UnixNanos,
ts_init: UnixNanos,
) -> anyhow::Result<InstrumentAny> {
parse_spot_instrument_sbe_with_fees(symbol, None, None, ts_event, ts_init)
}
pub(crate) fn parse_spot_instrument_sbe_with_fees(
symbol: &BinanceSymbolSbe,
maker_fee: Option<Decimal>,
taker_fee: Option<Decimal>,
ts_event: UnixNanos,
ts_init: UnixNanos,
) -> anyhow::Result<InstrumentAny> {
if symbol.status != SBE_STATUS_TRADING {
anyhow::bail!(
"Symbol '{}' is not trading (status: {})",
symbol.symbol,
symbol.status
);
}
let base_currency = get_currency(&symbol.base_asset);
let quote_currency = get_currency(&symbol.quote_asset);
let instrument_id = InstrumentId::new(
Symbol::from_str_unchecked(&symbol.symbol),
Venue::new(BINANCE),
);
let raw_symbol = Symbol::new(&symbol.symbol);
let price_filter = symbol
.filters
.price_filterView on GitHub (pinned to a4b06ed870)
Solutions
- Check the symbol's status on the Spot exchangeInfo endpoint.
- Load instruments for an explicit allowlist of TRADING symbols.
- Treat as a skip condition during bulk loads.
- Retry later if the symbol is only temporarily halted (BREAK).
Defensive patterns
Strategy: validation
Validate before calling
// Pre-filter SBE spot symbols to those trading
let tradable: Vec<_> = symbols
.into_iter()
.filter(|s| s.status == SBE_STATUS_TRADING)
.collect(); Type guard
fn is_trading_spot_sbe(status: i64) -> bool {
status == SBE_STATUS_TRADING
} Try / catch
match parse_spot_instrument_sbe(&symbol, ts_event, ts_init) {
Ok(inst) => instruments.push(inst),
Err(e) if e.to_string().contains("is not trading") => {
tracing::debug!(symbol = %symbol.symbol, "halted/break, skipping")
}
Err(e) => return Err(e),
} Prevention
- Filter SBE symbol data to TRADING status before requesting instruments.
- Expect BREAK/HALT statuses around maintenance windows and schedule loads accordingly.
- Use an explicit symbol allowlist for live trading.
When it happens
Trigger: Loading Spot instruments over the SBE market-data channel when a symbol is halted (BREAK), in auction (AUCTION_MATCH), pre/post-trading, or otherwise not in the TRADING state.
Common situations: Symbols under maintenance halt at startup; pairs in auction phases; delisted pairs still present in the exchangeInfo snapshot; regional trading breaks.
Related errors
- invalid negative kline trade count {}
- Symbol '{}' is not trading (status: {:?})
- Invalid tickSize of 0
- Invalid stepSize of 0
- Binance Spot market data mode SBE requires Ed25519 API crede
AI-assisted analysis of nautechsystems/nautilus_trader@a4b06ed870 (2026-08-16).
Data as JSON: /api/errors/9e1af8537df22abf.
Report an issue: GitHub.