Added support for MarkPriceUpdate streaming from catalog (#2582), thanks @bartolootrit
Added support for Binance Futures margin type (#2660), thanks @bartolootrit
Added support for mark price stream across all markets for Binance (#2670), thanks @sunlei
Added bars_timestamp_on_close config option for Databento which defaults to True to consistently align with Nautilus conventions
Added activation_price support for trailing stop orders (#2610), thanks @hope2see
Added trailing stops for OrderFactory bracket orders (#2654), thanks @hope2see
Added raise_exception config option for BacktestRunConfig (default False to retain current behavior) which will raise exceptions to interrupt a nodes run process
Added UnixNanos::is_zero() convenience method to check for a zero/epoch value
Added SQL schema, model, and query for OrderCancelRejected
Added SQL schema, model, and query for OrderModifyRejected
Added HyperSync client to blockchain adapter (#2606), thanks @filipmacek
Added support for DEXs, pools, and tokens to blockchain adapter (#2638), thanks @filipmacek
Breaking Changes
Changed trailing stops to use activation_price rather than trigger_price for Binance to more closely match the Binance API conventions
Internal Improvements
Added activation_price str and repr tests for trailing stop orders (#2620), thanks @hope2see
Added condition check for order contingency_type and linked_order_ids where a contingency should have associated linked order IDs
Improved robustness of socket client reconnects and disconnects to avoid state race conditions
Improved error handling for socket clients, will now raise Python exceptions on send errors rather than logging with tracing only
Improved error handling for Databento adapter by changing many unwraps to instead log or raise Python exceptions (where applicable)
Improved error handling for Tardis adapter by changing many unwraps to instead log or raise Python exceptions (where applicable)
Improved fill behavior for limit orders in L1_MBP books, will now fill entire size when marketable as TAKER or market moves through limit as MAKER
Improved account state event generation for margin accounts, avoiding the generation of redundant intermediate account states for the same execution event
Improved ergonomics of messaging topics, patterns, and endpoints in Rust (#2658), thanks @twitu
Improved development debug builds with cranelift backend for Rust (#2640), thanks @twitu
Improved validations for LimitOrder in Rust (#2613), thanks @nicolad
Improved validations for LimitIfTouchedOrder in Rust (#2533), thanks @nicolad
Improved validations for MarketIfTouchedOrder in Rust (#2577), thanks @nicolad
Improved validations for MarketToLimitOrder in Rust (#2584), thanks @nicolad
Improved validations for StopLimitOrder in Rust (#2593), thanks @nicolad
Improved validations for StopMarketOrder in Rust (#2596), thanks @nicolad
Improved validations for TrailingStopMarketOrder in Rust (#2607), thanks @nicolad
Improved orders initialize and display tests in Rust (#2617), thanks @nicolad
Improved testing for Rust orders module (#2578), thanks @dakshbtc
Improved Cython-Rust indicator parity for AdaptiveMovingAverage (AMA) (#2626), thanks @nicolad
Improved Cython-Rust indicator parity for DoubleExponentialMovingAverage (DEMA) (#2633), thanks @nicolad
Improved Cython-Rust indicator parity for ExponentialMovingAverage (EMA) (#2642), thanks @nicolad
Improved Cython-Rust indicator parity for HullMovingAverage (HMA) (#2648), thanks @nicolad
Improved Cython-Rust indicator parity for LinearRegression (#2651), thanks @nicolad
Improved Cython-Rust indicator parity for WilderMovingAverage (RMA) (#2653), thanks @nicolad
Improved Cython-Rust indicator parity for VariableIndexDynamicAverage (VIDYA) (#2659), thanks @nicolad
Improved Cython-Rust indicator parity for SimpleMovingAverage (SMA) (#2655), thanks @nicolad
Improved Cython-Rust indicator parity for VolumeWeightedAveragePrice (VWAP) (#2661), thanks @nicolad
Improved Cython-Rust indicator parity for WeightedMovingAverage (WMA) (#2662), thanks @nicolad
Improved Cython-Rust indicator parity for ArcherMovingAveragesTrends (AMAT) (#2669), thanks @nicolad
Improved zero size trade logging for Binance Futures (#2588), thanks @bartolootrit
Improved error handling on API key authentication errors for Polymarket
Improved execution client debug logging for Polymarket
Improved exception on deserializing order from cache database
Improved None condition checks for value types, which now raise a TypeError instead of an obscure AttributeError
Changed VecDeque for fixed-capacity ArrayDeque in SMA indicator (#2666), thanks @nicolad
Changed VecDeque for fixed-capacity ArrayDeque in LinearRegression (#2667), thanks @nicolad
Implemented remaining Display for orders in Rust (#2614), thanks @nicolad
Implemented _subscribe_instrument for dYdX and Bybit (#2636), thanks @davidsblom
Untangled ratelimiter quota from python flag (#2595), thanks @twitu
Refined formatting of IB adapter files (#2639), thanks @faysou
Optimized message bus topic-matching logic in Rust by 100× (#2634), thanks @twitu
Changed to faster message bus pattern matching logic from Rust (#2643), thanks @twitu
Upgraded Rust (MSRV) to 1.87.0
Upgraded Cython to v3.1.0 (now stable)
Upgraded databento crate to v0.26.0
Upgraded redis crate to v0.31.0
Upgraded sqlx crate to v0.8.6
Upgraded tokio crate to v1.45.1
Fixes
Fixed portfolio account updates leading to incorrect balances (#2632, #2637), thanks for reporting @bartolootrit and @DeirhX
Fixed portfolio handling of OrderExpired events not updating state (margin requirements may change)
Fixed event handling for ExecutionEngine so it fully updates the Portfolio before to publishing execution events (#2513), thanks for reporting @stastnypremysl
Fixed PnL calculation for margin account on position flip (#2657), thanks for reporting @Egisess
Fixed notional value pre-trade risk check when order using quote quantity (#2628), thanks for reporting @DeevsDeevs
Fixed position snapshot cache access for ExecutionEngine
Fixed position snapshot SystemError calling copy.deepcopy() by simply using a pickle round trip to copy the position instance
Fixed event purging edge cases for account and position where at least one event must be guaranteed
Fixed authentication for Redis when password provided with no username
Fixed various numpy and pandas FutureWarning(s)
Fixed sockets exponential backoff immediate reconnect value on reset (this prevented immediate reconnects on the next reconnect sequence)
Fixed message bus subscription matching logic in Rust (#2646), thanks @twitu
Fixed trailing stop market fill behavior when top-level exhausted to align with market orders (#2540), thanks for reporting @stastnypremysl
Fixed stop limit fill behavior on initial trigger where the limit order was continuing to fill as a taker beyond available liquidity, thanks for reporting @hope2see
Fixed matching engine trade processing when aggressor side is NO_AGGRESSOR (we can still update the matching core)
Fixed modifying and updating trailing stop orders (#2619), thanks @hope2see
Fixed processing activated trailing stop update when no trigger price, thanks for reporting @hope2see
Fixed terminating backtest on AccountError when streaming, the exception needed to be reraised to interrupt the streaming of chunks (#2546), thanks for reporting @stastnypremysl
Fixed HTTP batch order operations for Bybit (#2627), thanks @sunlei
Fixed reduce_only attribute access in batch place order for Bybit
Fixed quote tick parsing for one-sided books on Polymarket
Fixed order fill handling for limit orders with MAKER liquidity side on Polymarket
Fixed currency parsing for BinaryOption on Polymarket to consistently use USDC.e (PoS USDC on Polygon)
Fixed identity error handling during keep-alive for Betfair, will now reconnect
Updated BinanceFuturesEventType enum with additional variants, thanks for reporting @miller-moore
Documentation Updates
Added capability matrices for integration guides
Added content to Architecture concept guide
Added content to Live Trading concept guide
Added content to Developer Guide
Added errors and panics docs for most crates
Added errors and panics docs for most crates
Improved the clarity of various concept guides
Fixed several errors in concept guides
Deprecations
Deprecated support for Databento instrument definitions v1 data, v2 & v3 continue to be supported and v1 data can be migrated (see Databento documentation)