v1.224.0

ekwek1/sopranov1.224.0Mar 3, 2026by github-actions[bot]

AI Summary

A comprehensive beta release adding support for multiple exchanges (BitMEX, OKX, Hyperliquid, etc.), enhancing matching engine capabilities, and improving security through auditing and credential zeroization.

Key Highlights

  • Added BitMEX grid market maker and dead man's switch support
  • Added OKX trailing stop and algo order amend support
  • Added Hyperliquid order modify support
  • Enhanced security with pip-audit, Docker image signing (cosign), and SBOM generation
  • Removed deprecated Coinbase International and Binance Ed25519 adapters

Breaking Changes

  • Removed Coinbase International (COINBASE_INTX) adapter
  • Removed Binance BINANCE_ED25519_* env vars for Spot/Margin
  • Removed Hyperliquid builder_fee_refresh_mins config option
  • Removed Polymarket orderbook and price history methods

New Features

  • Synthetic book support for binary markets
  • get_target_px_for_quantity method on OrderBook
  • Betfair batch submit and cancel order support
  • Databento skip_on_error flag for load_instruments
  • Hyperliquid order modify support

Full Release Notes

# NautilusTrader 1.224.0 Beta

Released on 3rd March 2026 (UTC).

### Enhancements
- Added matching engine L1 quote-based queue position tracking for backtests
- Added `fill_limit_inside_spread` to `FillModel` and `MatchingCore` for at-or-inside-spread limit fill control
- Added synthetic book support for binary markets (#3495), thanks @Javdu10
- Added `get_target_px_for_quantity` method on `OrderBook` (#3627), thanks @Javdu10
- Added Betfair batch submit and cancel order support
- Added BitMEX dead man's switch (cancelAllAfter) support (Rust and Python)
- Added BitMEX grid market maker example (Rust)
- Added BitMEX instrument status subscription support (Rust and Python)
- Added Bybit book snapshot and funding rate request support (Rust)
- Added Databento `skip_on_error` flag for `load_instruments` to skip unparsable definitions (#3657), thanks for reporting @davidsblom
- Added Deribit instrument status subscription support (Rust and Python)
- Added dYdX instrument status subscription support (Rust and Python)
- Added Hyperliquid order modify support (Rust and Python)
- Added OKX trailing stop market order support (Rust and Python)
- Added OKX algo order amend support (Rust and Python)
- Added OKX instrument status updates from WebSocket instruments channel (Rust)
- Added OKX index price subscriptions with base-pair remapping to derivatives (Rust)
- Added OKX book snapshot and funding rate request support (Rust)
- Removed Hyperliquid builder fee charges (builder-fee approval no longer required)

### Breaking Changes
- Removed Coinbase International (`COINBASE_INTX`) adapter, see RFC (#3555)
- Removed Binance `BINANCE_ED25519_*` env vars for Spot/Margin (use `BINANCE_API_KEY`/`BINANCE_API_SECRET`; Futures deprecated with warning)
- Removed Hyperliquid `builder_fee_refresh_mins` config option (builder fees no longer charged)
- Removed Polymarket `fetch_orderbook_history`, `load_orderbook_snapshots`, `fetch_price_history` and related methods (endpoints decommissioned, #3635)

### Security
- Added `pip-audit` to security audit pipeline
- Added Docker image cosign signing and SBOM generation
- Standardized credential zeroization across all adapters (`Ustr` replaced with `Box<str>` for API keys)
- Standardized secret redaction in `Debug` impls across all adapter credentials
- Updated `SECURITY.md` with expanded scope, reporting guidelines, and responsible disclosure policy
- Bumped all eligible GitHub Actions pinned SHAs to latest versions (2-week release policy)

### Fixes
- Fixed matching engine applying order book deltas for L1 books (#3615), thanks @maksym-mikheienko
- Fixed streaming backtest producing dummy bars past batch data exhaustion (#3628), thanks for reporting @cauta
- Fixed `OrderEmulator` trailing stop activation ignoring `LAST_PRICE` trigger type (#3629), thanks for reporting @HaakonFlaaronning
- Fixed `LiveExecEngine` position reconciliation infinite loop when venue reports flat (#3622), thanks for reporting @mrbaron3
- Fixed `CryptoOption` instrument pyo3 transform for (#3626), thanks @davidsblom
- Fixed `StreamingFeatherWriter` duplicate events from multiple message bus topics (#3625), thanks for reporting @fomotoshi
- Fixed `VolumeImbalanceBarAggregator` and `VolumeRunsBarAggregator` integer overflow for step >= 923 in high-precision mode (#3658), thanks for reporting @honvl
- Fixed `InstrumentProvider` `load_ids_async` loading all instruments instead of filtering to requested IDs (affected dYdX, Kraken, AX, Hyperliquid)
- Fixed Python WS callbacks running off asyncio event-loop thread in Rust adapters (#3653), thanks for reporting @camilorodegheri
- Fixed Binance Futures algo order serde field renames for WS and HTTP parsing (#3624), thanks for reporting @qu1zzyboy
- Fixed Binance silent HMAC fallback when using encrypted Ed25519 PEM keys (now warns)
- Fixed BinanceSymbol COIN-M perpetual symbol conversion (#3641), thanks @YeeTsai
- Fixed Binance algo order cancellation parsing (#3646), thanks @qu1zzyboy
- Fixed Binance Spot testnet WebSocket API URL (#3661), thanks @penguinwokrs
- Fixed Hyperliquid stop/trigger order price derivation (#3611), thanks for reporting @h-tsun3
- Fixed Hyperliquid price normalization and inner error detection (#3612), thanks for reporting @h-tsun3
- Fixed Interactive Brokers BarType/str comparison in get_historical_bars (#3616), thanks @powerseed
- Fixed Interactive Brokers historical bar processing crash (#3619), thanks @shzhng
- Fixed Interactive Brokers contract details parsing (#3638), thanks @davidsblom
- Fixed Kraken Spot and Futures execution clients not loading instruments during connect (#3644), thanks for reporting @husariancom
- Fixed Kraken Spot execution client HTTP client created without credentials (#3650), thanks for reporting @husariancom
- Fixed Kraken sequential `ClientOrderId` exceeding `cl_ord_id` 18-char free-text limit (#3651), thanks for reporting @husariancom
- Fixed Kraken missing account state registration during connect (#3652), thanks for reporting @husariancom
- Fixed Polymarket Gamma API `load_ids` path skipping sibling tokens (#3654), thanks for reporting @likenji
- Fixed Polymarket loader to use Data API trades instead of decommissioned orderbook/price history endpoints (#3635), thanks for reporting @JSai23
- Fixed Binance Spot testnet WebSocket API URL (legacy URL removed by Binance in May 2025) (#3660)
- Fixed pre-commit hooks portability for Windows (#3617), thanks for reporting @powerseed
- Fixed `LiveNode` startup `RefCell` panic when execution reports arrive during `connect()`
- Fixed dYdX new instrument discovery flooding logs with inactive/delisted markets
- Fixed dYdX fills and orders API requests missing required `marketType` parameter

### Internal Improvements
- Added catalog deduplication functionality (#3613), thanks @ms32035
- Extracted common SBE decoder to `nautilus-serialization` crate
- Implemented `BacktestNode` with catalog streaming in Rust
- Improved `OrderBookImbalance` example strategy
- Improved `BestPriceFillModel` to fill inside bid ask spread (#3428), thanks @faysou
- Standardized use of atomic clock across adapters
- Standardized adapter credentials handling and testing
- Refined build script for Windows (#3636), thanks @faysou
- Optimized matching engine `_seed_trade_consumption` to use range-bounded FFI queries for deep books
- Optimized backtest engine settle loop to avoid Python list allocation on idle ticks
- Optimized `MatchingCore.iterate` to avoid list concatenation on every call
- Upgraded `databento` crate to v0.42.0
- Upgraded `datafusion` crate to v52.2.0

### Documentation Updates
- Added AX Exchange gold perps book imbalance tutorial
- Added AX Exchange spot FX bars mean reversion tutorial
- Added BitMEX grid market maker tutorial
- Added adapter data and execution testing specifications
- Added order book concepts documentation
- Improved backtesting mermaid diagram and tutorial formatting