Added group_size parameter for PyO3 OrderBook.pprint(...) and OwnOrderBook.pprint(...)
Added custom error logging function support for RetryManager
Added Bybit options support (#2821), thanks @Baerenstein
Added Bybit is_leverage order parameter support
Added persist_account_events config option for CacheConfig (default True to retain current behavior)
Added query_account method for Strategy
Added QueryAccount execution message
Added streaming methods for TardisCSVDataLoader
Added stream iterators support for BacktestEngine low-level streaming API
Added YEAR aggregation and improved bar specification validation (#2771), thanks @stastnypremysl
Added support for requesting any number of historical bars for dYdX (#2766, #2777), thanks @DeirhX
Added use_hyphens_in_client_order_ids config option for StrategyConfig
Added greeks_filter function to portfolio_greeks (#2756), thanks @faysou
Added time weighted and percent vega for GreeksCalculator (#2817), thanks @faysou
Added VERBOSE option to common make targets (#2759), thanks @faysou
Added bulk key loading capability for Redis cache database adapter
Added multiplier field for CurrencyPair instrument (required for some crypto pairs)
Added tick_scheme_name field for instrument dictionary conversions
Added default FixedTickScheme(s) for all valid precisions
Added PancakeSwapV3 pool parsing (#2829), thanks @filipmacek
Added PortfolioConfig.min_account_state_logging_interval_ms config option for throttling account state logging
Added allow_cash_borrowing config option for BacktestVenueConfig to enable negative balances in cash accounts
Added borrowing support for Bybit SPOT accounts, enabling margin trading with negative balances
Added initial DEX Pool filtering configuration (#2842, #2887), thanks @filipmacek
Added Arbitrum FluidDEX pool parsing (#2897), thanks @filipmacek
Added a complete .env.example template to guide environment configuration (#2877), thanks @nicolad
Added Interactive Brokers OCA setting to order groups (#2899), thanks @faysou
Added Interactive Brokers subscriptions for position updates (#2887), thanks @faysou
Added support for running separate live and paper IB Gateway containers without port conflicts. Simplified container naming and made VNC optional.
Added avg_px_open field to PositionStatusReport for IB adapter (#2925), thanks @dinana
Added support for running separate live and paper IB Gateway containers simultaneously (#2937), thanks @Bshara23
Added support for data deduplication on catalog consolidation (#2934), thanks @ms32035
Breaking Changes
Added multiplier field for CurrencyPair Arrow schema
Changed start parameter to required for Actor data request methods
Reverted implementation of delete_account_event from cache database that was too inefficient and is now a no-op pending redesign
Renamed ParquetDataCatalog.reset_catalog_file_names to reset_all_file_names
Renamed BinanceAccountType.USDT_FUTURE to USDT_FUTURES for more conventional terminology
Renamed BinanceAccountType.COIN_FUTURE to COIN_FUTURES for more conventional terminology
Renamed InstrumentMiniInfo to TardisInstrumentMiniInfo to standardize adapter naming conventions
Removed the generic cvec_drop FFI function, as it was unused and prone to misuse, potentially causing memory leaks
Removed redundant managed parameter for Actor.subscribe_book_at_interval (the book must be managed by the DataEngine to provide snapshots at intervals)
Consolidated OwnBookgroup_bids and group_asks methods into bid_quantity and ask_quantity with optional depth and group_size parameters
Consolidated ~40 individual indicator modules into 6 files to reduce binary size
Consolidated backtest.exchange into backtest.engine to reduce binary size
Consolidated backtest.matching_engine into backtest.engine to reduce binary size
Changed indicator imports from nested modules to flat structure (e.g., from nautilus_trader.indicators.atr import AverageTrueRange becomes from nautilus_trader.indicators import AverageTrueRange)
Changed NAUTILUS_CATALOG_PATH to NAUTILUS_PATH for Tardis adapter (#2850), thanks @nicolad
Simplified Binance environment variables for API credentials: removed separate variables for RSA/Ed25519 keys and consolidated mainnet spot/futures credentials
Moved Indicator base class from nautilus_trader.indicators.base.indicator to nautilus_trader.indicators.base
Internal Improvements
Refactored OKX adapter to Rust API clients
Refactored BacktestDataIterator (#2791) to consolidate data generator usage, thanks @faysou
Implemented LogGuard reference counting for proper thread lifecycle management, ensuring all logs flushed before termination
Implemented live subscriptions for blockchain data client (#2832), thanks @filipmacek
Refined subscribe_historical_bars in IB adapter (#2870), thanks @faysou
Relaxed conditions on start and end of instrument requests in adapters (#2867), thanks @faysou
Updated request_aggregated_bars example (#2815), thanks @faysou
Updated PostgreSQL connection parameters to use 'nautilus' user (#2805), thanks @stastnypremysl
Upgraded Rust (MSRV) to 1.89.0
Upgraded Cython to v3.1.3
Upgraded web3 for Polymarket allowances script (#2814), thanks @DeirhX
Upgraded databento crate to v0.33.1
Upgraded datafusion crate to v49.0.1
Upgraded redis crate to v0.32.5
Upgraded tokio crate to v1.47.1
Fixes
Fixed Rust-Python reference cycles by replacing Arc<PyObject> with plain PyObject in callback-holding structs, eliminating memory leaks
Fixed TimeEventHandler memory leaks with Python callback references in FFI layer
Fixed PyCapsule memory leaks by adding destructors to enable proper Rust value cleanup
Fixed multiple circular-dependency memory leaks for network and bar Python callbacks using new SharedCell/WeakCell helpers
Fixed precision preservation for value types (Price, Quantity, Money)
Fixed incorrect raw price type for matching engine in high-precision mode that could overflow during trades processing (#2810), thanks for reporting @Frzgunr1 and @happysammy
Fixed incorrect currency used for cash account SELL orders pre-trade risk check
Fixed accounting for locked balance with multiple currencies (#2918), thanks @GhostLee
Fixed portfolio realized PnL for NETTING OMS position snapshot cycles (#2856), thanks for reporting @idobz and analysis @paulbir
Fixed decoding zero-sized trades for Databento MBO data
Fixed purging of contingent orders where open linked orders would still be purged
Fixed backtest bracket order quantity independence, preventing child orders from incorrectly syncing to net position size
Fixed Tardis Machine replay processing and Parquet file writing
Fixed Tardis exchange-venue mapping for Kraken Futures (should map to cryptofacilities)
Fixed Tardis CSV loader for book snapshots with interleaved bid/ask columns
Fixed Polymarket reconciliation for signature type 2 trades where wallet address differs from funder address
Fixed catalog query of multiple instruments of same type (#2772), thanks @faysou
Fixed modification of contingent orders in backtest (#2761), thanks faysou
Fixed balance calculations on order fill to allow operating at near account balance capacity (#2752), thanks @petioptrv
Fixed cash account locked balance calculations for sell orders (#2906), thanks for reporting @GhostLee
Fixed time range end in some databento request functions (#2755), thanks @faysou
Fixed skip_first_non_full_bar tolerance for near-boundary starts (#2605), thanks for reporting @stastnypremysl
Fixed EOD bar for Interactive Brokers (#2764), thanks @faysou
Fixed dYdX Take Profit order type mapping error (#2758), thanks @nicolad
Fixed dYdX logging typo (#2790), thanks @DeirhX
Fixed dYdX order and fill message schemas (#2824), thanks @davidsblom