Skip to content

Releases: nautechsystems/nautilus_trader

NautilusTrader 1.221.0 Beta

26 Oct 14:41
dffc3cb

Choose a tag to compare

NautilusTrader 1.221.0 Beta

Released on 26th October 2025 (UTC).

This will be the final release with support for Python 3.11.

Enhancements

  • Added support for OrderBookDepth10 requests (#2955), thanks @faysou
  • Added support for quotes from book depths (#2977), thanks @faysou
  • Added support for quotes from order book deltas updates (#3106), thanks @faysou
  • Added execution engine rate limiting for single-order reconciliation queries
  • Added subscribe_order_fills(...) and unsubscribe_order_fills(...) for Actor allowing to subscribe to all fills for an instrument ID
  • Added on_order_filled(...) for Actor
  • Added Renko bar aggregator (#2941), thanks @faysou
  • Added time_range_generator for on-the-fly data data subscriptions (#2952), thanks @faysou
  • Added __repr__ to NewsEvent (#2958), thanks @MK27MK
  • Added convert_quote_qty_to_base config option to ExecEngineConfig (default True to retain current behavior) allows adapters to keep quote-denominated sizes when needed
  • Added contingent order fields parent_order_id and linked_order_ids for OrderStatusReport and reconciliation
  • Added fs_rust_storage_options to Python catalog (#3008), thanks @faysou and @Johnkhk
  • Added matching engine fallback to default order book for custom fill models (#3039), thanks @Hamish-Leahy
  • Added filesystem parameter to parquet in the consolidate functions (#3097), thanks @huracosunah
  • Added azure support for az protocol (#3102), thanks @huracosunah
  • Added Binance BBO price_match parameter support for order submission
  • Added BitMEX conditional orders support
  • Added BitMEX batch cancel support
  • Added BitMEX contingent orders support (OCO, OTO, brackets)
  • Added BitMEX historical data requests (trades and bars)
  • Added BitMEX configurable recv_window_ms for signed HTTP request expiration
  • Added Bybit SPOT position reports with opt-in use_spot_position_reports config option for BybitExecClientConfig
  • Added Bybit ignore_uncached_instrument_executions config option for BybitExecClientConfig (default False to retain current behavior)
  • Added Databento CME sandbox example
  • Added Interactive Brokers cache config support for historical provider (#2942), thanks @ms32035
  • Added Interactive Brokers support for fetching orders from all clients (#2948), thanks @dinana
  • Added Interactive Brokers order conditions (#2988), thanks @faysou
  • Added Interactive Brokers generate_fill_reports implementation (#2989), thanks @faysou
  • Added OKX conditional trigger orders support
  • Added OKX trade mode per order via params using td_mode key
  • Added OKX margin configuration and spot margin support
  • Added OKX demo account support
  • Added OKX batch cancel support
  • Added Polymarket native market orders support

Breaking Changes

  • Removed nautilus_trader.analysis.statistics subpackage - all statistics are now implemented in Rust and must be imported from nautilus_trader.analysis (e.g., from nautilus_trader.analysis import WinRate)
  • Removed partial bar functionality from bar aggregators and subscription APIs (#3020), thanks @faysou
  • Renamed nautilus-cli crate feature flag from hypersync to defi (gates blockchain/DeFi commands)
  • Polymarket execution client no longer accepts market BUY orders unless quote_quantity=True

Security

  • Fixed non-executable stack for Cython extensions to support hardened Linux systems
  • Fixed divide-by-zero and overflow bugs in model crate that could cause crashes
  • Fixed core arithmetic operations to reject NaN/Infinity values and improve overflow handling

Fixes

  • Fixed reduce-only order panic when quantity exceeds position
  • Fixed position purge logic to prevent purging re-opened position
  • Fixed Position.purge_events_for_order to properly rebuild state from remaining order fills
  • Fixed cache index cleanup bugs in purge_order operations
  • Fixed order average price calculation that was double-counting current fill in weighted average
  • Fixed own order book cleanup for terminal orders and inflight handling
  • Fixed order book depth snapshot processing to avoid padding levels and metadata tracking for L1 top-of-book ticks
  • Fixed crypto instruments PyO3 -> Cython conversion for lot_size where it was not being passed through
  • Fixed serialization crate bugs and improve error handling
  • Fixed PyO3 interpreter lifecycle for async shutdown preventing edge case "interpreter not initialized" panics during shutdown
  • Fixed RiskEngine reduce-only cash exits (#2986), thanks for reporting @dennisnissle
  • Fixed RiskEngine quote quantity validation
  • Fixed BacktestEngine to retain instruments on reset (#3096), thanks for reporting @woung717
  • Fixed overflow in NautilusKernel build time calculation due to negative duration (#2998), thanks for reporting @HaakonFlaaronning
  • Fixed handling of asyncio.CancelledError in execution reconciliation (#3073), thanks @dinana
  • Fixed edge case where rejected orders can remain in own order book
  • Fixed Currency registration to synchronize between Cython and PyO3 runtimes via new register_currency() helper
  • Fixed Databento CMBP-1/CBBO/TBBO symbology resolution
  • Fixed on_load called before strategy added bug (#2953), thanks @lisiyuan656
  • Fixed filesystem usage in catalog for isfile and isdir (#2954), thanks @limx0
  • Fixed SandboxExecutionClient instrument data handling
  • Fixed AccountState Arrow serialization (#3005), thanks for reporting @nikzasel
  • Fixed CryptoOption Arrow schema option_kind field to accept string values
  • Fixed FuturesSpread Arrow schema missing max/min quantity and price fields
  • Fixed OptionSpread Arrow schema missing max/min quantity and price fields
  • Fixed Commodity Arrow schema to match from_dict requirements
  • Fixed safe encoded symbols (#2964), thanks @ms32035
  • Fixed msgspec encoding for type objects with qualified names
  • Fixed nautilus CLI macOS compatibility with regex unicode-perl feature (#2969), thanks @learnerLj
  • Fixed fuzzy candlesticks indicator bugs (#3021), thanks @benhaben
  • Fixed return type annotation for ArrowSerializer.deserialize (#3076), thanks @MK27MK
  • Fixed initializing of sqrt price setting flow when Pool profiling (#3100), thanks @filipmacek
  • Fixed Redis multi-stream consumer skipping messages (#3094), thanks for reporting @kirill-gr1
  • Fixed Binance duplicate OrderSubmitted event generation for order lists (#2994), thanks @sunlei
  • Fixed Binance websocket fill message parsing for Binance US with extra fields (#3006), thanks for reporting @bmlquant
  • Fixed Binance order status parsing for external orders (#3006), thanks for reporting @bmlquant
  • Fixed Binance execution handling for self-trade prevention and liquidations (#3006), thanks for reporting @bmlquant
  • Fixed Binance trailing stop to use server-side activation price (#3056), thanks for reporting @hope2see
  • Fixed Binance Futures reconciliation duplicated position bug (#3067), thanks @lisiyuan656
  • Fixed Binance price_match order price synchronization (#3074)
  • Fixed Binance Futures position risk query to use v3 API returning only symbols with positions or open orders (#3062), thanks for reporting @woung717
  • Fixed Binance Futures liquidation and ADL fill handling
  • Fixed BitMEX testnet support
  • Fixed BitMEX instrument parsing of lot size
  • Fixed BitMEX order rejection handling and response parsing
  • Fixed Blockchain adapter out of gas RPC error in Multicall for problematic contracts (#3086), thanks @filipmacek
  • Fixed Bybit currency parsing from venue resulting in incorrectly low precision (e.g., USDT precision 4 rather than 8)
  • Fixed Bybit handling of OrderModifyRejected events from pending updates
  • Fixed Bybit account endpoint pagination handling
  • Fixed Coinbase Intx API credentials handling to allow passing explicitly
  • Fixed Databento MBO Clear actions and improve docs
  • Fixed Hyperliquid L1 signing with direct MessagePack serialization (#3087), thanks @nicolad
  • Fixed Interactive Brokers tick level historical data downloading (#2956), thanks @DracheShiki
  • Fixed Interactive Brokers instrument provider TypeError when load_ids/contracts are None, thanks for reporting @FGU1
  • Fixed Interactive Brokers modify bracket order (#2979), thanks @faysou
  • Fixed Interactive Brokers historical bars resubscription failure after connection loss (#3002), thanks @Johnkhk
  • Fixed Interactive Brokers flat position reconciliation and instrument loading (#3023), thanks @idobz
  • Fixed Interactive Brokers bars response handling by removing partial bar (#3040), thanks @sunlei
  • Fixed Interactive Brokers account summary handling (#3052), thanks @shinhwasbiz02
  • Fixed Interactive Brokers account balance calculation (#3064), thanks @sunlei
  • Fixed OKX spot margin quote quantity order handling
  • Fixed OKX API credentials handling to allow passing explicitly
  • Fixed OKX fee calculations to account for negative fees
  • Fixed OKX parsing for tick_sz across instrument types
  • Fixed OKX parsing for instruments multiplier field
  • Fixed OKX WebSocket heartbeat and standardize logging
  • Fixed Polymarket handling of one-sided quotes (#2950), thanks for reporting @thefabus
  • Fixed Polymarket websocket message handling (#2963, #2968), thanks @thefabus
  • Fixed Polymarket tick size change handling for quotes (#2980), thanks for reporting @santivazq
  • Fixed Polymarket market order submission to use native CLOB market orders (#2984), thanks for reporting @njkds
  • Fixed Polymarket maker fill order side inversion (#3077), thanks for reporting @DarioHett
  • Fixed Polymarket neg_risk order parameter handling
  • Fixed Tardis instruments lot_size mapping
  • Fixed Tardis adapter error handling and connection robustness
  • Fixed Tardis replay to use catalog-compatible filenames

Internal Improvements

  • Added ARM64 support to Docker builds
  • Added BitMEX adapter integration tests
  • Added OKX adapter integration tests
  • Added turmoil network simulation testing to network crate
  • Adde...
Read more

NautilusTrader 1.220.0 Beta

10 Sep 09:11
602f6c3

Choose a tag to compare

NautilusTrader 1.220.0 Beta

Released on 9th September 2025 (UTC).

Enhancements

  • Added initial BitMEX integration adapter
  • Added FundingRateUpdate data type with caching support through data engine
  • Added subscribe_funding_rates(...) and unsubscribe_funding_rates(...) methods for actors
  • Added on_funding_rate(...) handler for actors
  • Added funding_rate(...) and add_funding_rate(...) for Cache
  • Added due_post_only field for OrderRejected event, only properly populated for Binance and Bybit for now
  • Added log_rejected_due_post_only_as_warning config option for StrategyConfig (default True to retain current behavior)
  • Added log_rejected_due_post_only_as_warning config option for BinanceExecClientConfig (default True to retain current behavior)
  • Added log_components_only config option for Logger (#2931), thanks @faysou
  • Added support for additional Databento schemas: CMBP_1, CBBO_1S, CBBO_1M, TCBBO, and OHLCV_EOD
  • Added configurable schema parameters for Databento quote and trade subscriptions, allowing TBBO/TCBBO for efficient combined data feeds
  • Added support for option combos for Interactive Brokers (#2812), thanks @faysou
  • Added support for execution of option spreads in backtesting (#2853), thanks @faysou
  • Added support for option spread quotes in backtest (#2845), thanks @faysou
  • Added loading of options chain from request_instruments for Interactive Brokers (#2809), thanks @faysou
  • Added OptionExerciseModule (#2907), thanks @faysou
  • Added MarginModel concept, base models, config, and factory for backtesting (#2794), thanks @faysou and @stefansimik
  • Added additional built-in backtest fill models (#2795), thanks @faysou and @stefansimik
  • Added OrderBookDepth10DataWrangler (#2801), thanks @trylovetom
  • 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 OwnBook group_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
  • Implemented initial Hyperliquid adapter (#2912, #2916, #2922, #2935), thanks @nicolad
  • Introduced SharedCell / WeakCell wrappers for ergonomic and safer handling of Rc<RefCell<T>> / Weak<RefCell<T>> pairs
  • Introduced efficient block syncing command in the nautilus-cli (#2861), thanks @filipmacek
  • Introduced pool events syncing command in blockchain data client (#2920), thanks @filipmacek
  • Added stream iterators support BacktestDataIterator
  • Added serialization support for execution reports
  • Added serialization support for execution report commands
  • Added DataTester standardized data testing actor for integration adapters
  • Added start and stop to response data (#2748), thanks @stastnypremysl
  • Added integration test service management targets (#2765), thanks @stastnypremysl
  • Added integration tests for dYdX bar-partitioning and large-history handling (#2773), thanks @nicolad
  • Added make build-debug-pyo3 (#2802), thanks @faysou
  • Added pytest timer (#2834), thanks @faysou
  • Added support for several instrument versions with request_instrument (#2835), thanks @faysou
  • Added _send_position_status_report to base execution client (#2926), thanks @faysou
  • Added passthrough_bar_type to TimeBarAggregator (#2929), thanks @faysou
  • Added matching engine check to return early if last_qty is non-positive (#2930), thanks @GhostLee
  • Added avg_px population in order filled events for Interactive Brokers adapter (#2938), thanks @dinana
  • Optimized identifiers hashing to avoid frequent recomputations using C strings
  • Optimized data engine topic string caching for message bus publishing to avoid frequent f-string constructions
  • Optimized Redis key scans to improve efficiency over a network
  • Completed bar request implementation for OKX (#2789), thanks @nicolad
  • Continued ExecutionEngine and testing in Rust (#2886), thanks @dakshbtc
  • Enabled parallel pytest tests with pytest-xdist (#2808), thanks @stastnypremysl
  • Standardized DeFi chain name validation for InstrumentId (#2826), thanks @filipmacek
  • Standardized NAUTILUS_PATH env var across Tardis integration (#2850), thanks @nicolad
  • Standardized zero PnL as Money instead of None when exchange rate missing (#2880), thanks @nicolad
  • Refactored SpreadQuoteAggregator (#2905), thanks @faysou
  • Refactored bar aggregators to use ts_init instead of ts_event (#2924), thanks @fayosu
  • Improved typing for all the DEX IDs with DexType and add validation (#2827), thanks @filipmacek
  • Improved reconciliation handling of internally generated orders to align positions (now uses the INTERNAL-DIFF strategy ID)
  • Improved data client for blockchain adapter (#2787), thanks @filipmacek
  • Improved DEX pool sync process in the blockchain adapter (#2796), thanks @filipmacek
  • Improved efficiency of message bus external streams buffer flushing
  • Improved databento_test_request_bars example (#2762), thanks @faysou
  • Improved zero-sized trades handling for Tardis CSV loader (will log a warning)
  • Improved ergonomics of TardisInstrumentProvider datetime filter para...
Read more

NautilusTrader 1.219.0 Beta

05 Jul 14:51
af72cab

Choose a tag to compare

NautilusTrader 1.219.0 Beta

Released on 5th July 2025 (UTC).

Enhancements

  • Added graceful_shutdown_on_exception config option for live engines (default False to retain intended hard crash on unexpected system exceptions)
  • Added purge_from_database config option for LiveExecEngineConfig to support cache backing database management
  • Added support for data download during backtest (#2652), thanks @faysou
  • Added delete data range to catalog (#2744), thanks @faysou
  • Added consolidate catalog by period (#2727), thanks @faysou
  • Added fire_immediately flag parameter for timers where a time event will be fired at the start instant and then every interval thereafter (default False to retain current behavior) (#2600), thanks for the idea @stastnypremysl
  • Added time_bars_build_delay config option for DataEngineConfig (#2676), thanks @faysou
  • Added immediate firing capability for time alerts and corresponding test (#2745), thanks @stastnypremysl
  • Added missing serialization mappings for some instruments (#2702), thanks @faysou
  • Added support for DEX swaps for blockchain adapter (#2683), thanks @filipmacek
  • Added support for Pool liquidity updates for blockchain adapter (#2692), thanks @filipmacek
  • Added fill report reconciliation warning when discrepancy with existing fill (#2706), thanks @faysou
  • Added optional metadata function for custom data query (#2724), thanks @faysou
  • Added support for order-list submission in the sandbox execution client (#2714), thanks @petioptrv
  • Added hidden order support for IBKR (#2739), thanks @sunlei
  • Added subscribe_order_book_deltas support for IBKR (#2749), thanks @sunlei
  • Added bid_levels and ask_levels for OrderBook.pprint
  • Added accepted_buffer_ns filter param for Cache.own_bid_orders(...) and Cache.own_ask_orders(...)
  • Added trailing stop orders activation_price support in Rust (#2750), thanks @nicolad

Breaking Changes

  • Renamed catalog instrument_ids filter param to identifiers to more accurately describe strings which can represent either instrument IDs or bar types
  • Changed behavior of timers allow_past=False to permit start times in the past if the next event time is still in the future
  • Changed Databento DBN upgrade policy to default v3
  • Removed problematic negative balance check for margin accounts (cash account negative balance check remains unchanged)
  • Removed support for Databento DBN v1 schemas (migrate to DBN v2 or v3, see DBN Changelog)

Internal Improvements

  • Added logging macros for custom component and color in Rust
  • Added Cython-level parameter validation for timer operations to prevent Rust panics and provide clearer Python error messages
  • Added property-based testing for Price, Quantity, Money value types in Rust
  • Added property-based testing for UnixNanos in Rust
  • Added property-based testing for OrderBook in Rust
  • Added property-based testing for TestTimer in Rust
  • Added property-based testing for network crate in Rust
  • Added chaos testing with turmoil for socket clients in Rust
  • Added check_positive_decimal correctness function and use for instrument validations (#2736), thanks @nicolad
  • Added check_positive_money correctness function and use for instrument validations (#2738), thanks @nicolad
  • Ported data catalog refactor to Rust (#2681, #2720), thanks @faysou
  • Optimized TardisCSVDataLoader performance (~90% memory usage reduction, ~60-70% faster)
  • Consolidated the clocks and timers v2 feature from @twitu
  • Consolidated on pure Rust cryptography crates with no dependencies on native certs or openssl
  • Consolidated on aws-lc-rs cryptography for FIPS compliance
  • Confirmed parity between Cython and Rust indicators (#2700, #2710, #2713), thanks @nicolad
  • Implemented From<Pool> -> CurrencyPair & InstrumentAny (#2693), thanks @nicolad
  • Updated Makefile to use new docker compose syntax (#2746), thanks @stastnypremysl
  • Updated Tardis exchange mappings
  • Improved live engine message processing to ensure exceptions result in a crash rather than continuing without the queue processing messages
  • Improved live reconciliation robustness and testing
  • Improved listen key error handling and recovery for Binance
  • Improved handling of negative balances in backtests (#2730), thanks @ms32035
  • Improved robustness of cash and margin account locked balance calculations to avoid negative free balance
  • Improved robustness of fill price parsing for Betfair
  • Improved implementation, validations and testing for Rust instruments (#2723, #2733), thanks @nicolad
  • Improved Currency equality to use strcmp to avoid C pointer comparison issues with ustr string interning
  • Improved unsubscribe cleanup(s) for Bybit adapter
  • Improved Makefile to be self-documenting (#2741), thanks @sunlei
  • Refactored IB adapter (#2647), thanks @faysou
  • Refactored data catalog (#2652, #2740), thanks @faysou
  • Refined Rust data catalog (#2734), thanks @faysou
  • Refined logging subsystem lifecycle management and introduce global log sender
  • Refined signal serialization and tests (#2705), thanks @faysou
  • Refined CI/CD and build system (#2707), thanks @stastnypremysl
  • Upgraded Rust (MSRV) to 1.88.0
  • Upgraded Cython to v3.1.2
  • Upgraded databento crate to v0.28.0
  • Upgraded datafusion crate to v48.0.0
  • Upgraded pyo3 and pyo3-async-runtimes crates to v0.25.1
  • Upgraded redis crate to v0.32.3
  • Upgraded tokio crate to v1.46.1
  • Upgraded tokio-tungstenite crate to v0.27.0

Fixes

  • Fixed AccountBalance mutation in AccountState events (#2701), thanks for reporting @DeirhX
  • Fixed order book cache consistency in update and remove operations (found through property-based testing)
  • Fixed order status report generation for Polymarket where venue_order_id was unbounded
  • Fixed data request identifier attribute access for LiveDataClient
  • Fixed generate_order_modify_rejected typo in Binance execution client (#2682), thanks for reporting @etiennepar
  • Fixed order book depth handling in subscriptions for Binance
  • Fixed potential IndexError with empty bars requests for Binance
  • Fixed GTD-GTC time in force conversion for Binance
  • Fixed incorrect logging of trigger type for Binance
  • Fixed trade ticks unsubscribe for Binance which was not differentiating aggregated trades
  • Fixed pending update hot cache cleanup for Betfair execution client
  • Fixed invalid session information on account update for Betfair execution client
  • Fixed order book snapshots unsubscribe for Tardis data client
  • Fixed Arrow schema registration for BinanceBar
  • Fixed gRPC server shutdown warning when running dYdX integration tests
  • Fixed registration of encoder and decoder for BinanceBar, thanks for reporting @miller-moore
  • Fixed spot and futures sandbox for Binance (#2687), thanks @petioptrv
  • Fixed clean and distclean make targets entering .venv and corrupting the Python virtual env, thanks @faysou
  • Fixed catalog identifier matching to exact match (#2732), thanks @faysou
  • Fixed last value updating for RSI indicator (#2703), thanks @bartlaw
  • Fixed gateway/TWS reconnect process for IBKR (#2710), thanks @bartlaw
  • Fixed Interactive Brokers options chain issue (#2711), thanks @FGU1
  • Fixed partially filled bracket order and SL triggered for IBKR (#2704, #2717), thanks @bartlaw
  • Fixed instrument message decoding when no exchange value for Databento US equities
  • Fixed fetching single-instrument trading fees for Binance, thanks @petioptrv
  • Fixed IB-TWS connection issue with international languages (#2726), thanks @DracheShiki
  • Fixed bar requests for Bybit where pagination was incorrect which limited bars being returned
  • Fixed Bybit Unknown Error (#2742), thanks @DeevsDeevs
  • Fixed margin balance parsing for Bybit
  • Restored task error logs for IBKR (#2716), thanks @bartlaw

Documentation Updates

  • Updated IB adapter documentation (#2729), thanks @faysou
  • Improved reconciliation docs in live concept guide

Deprecations

  • Deprecated Portfolio.set_specific_venue(...), to be removed in a future release; use Cache.set_specific_venue(...) instead

NautilusTrader 1.218.0 Beta

31 May 05:30
f8f2122

Choose a tag to compare

NautilusTrader 1.218.0 Beta

Released on 31st May 2025 (UTC).

Enhancements

  • Added convenience re-exports for Betfair adapter (constants, configs, factories, types)
  • Added convenience re-exports for Binance adapter (constants, configs, factories, loaders, types)
  • Added convenience re-exports for Bybit adapter (constants, configs, factories, loaders, types)
  • Added convenience re-exports for Coinbase International adapter (constants, configs, factories)
  • Added convenience re-exports for Databento adapter (constants, configs, factories, loaders, types)
  • Added convenience re-exports for dYdX adapter (constants, configs, factories)
  • Added convenience re-exports for Polymarket adapter (constants, configs, factories)
  • Added convenience re-exports for Tardis adapter (constants, configs, factories, loaders)
  • Added support for FillModel, LatencyModel and FeeModel in BacktestNode (#2601), thanks @faysou
  • Added bars caching from request_aggregated_bars (#2649), thanks @faysou
  • Added BacktestDataIterator to backtest engine to provide on-the-fly data loading (#2545), thanks @faysou
  • 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 BacktestDataIterator correctness (#2591), thanks @faysou
  • 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 ...
Read more

NautilusTrader 1.217.0 Beta

30 Apr 14:27
e479ab4

Choose a tag to compare

NautilusTrader 1.217.0 Beta

Released on 30th April 2025 (UTC).

Enhancements

  • Added processing of OrderBookDepth10 for BacktestEngine and OrderMatchingEngine (#2542), thanks @limx0
  • Added Actor.subscribe_order_book_depth(...) subscription method (#2555), thanks @limx0
  • Added Actor.unsubscribe_order_book_depth(...) subscription method
  • Added Actor.on_order_book_depth(...) handler method (#2555), thanks @limx0
  • Added UnixNanos::max() convenience method for the maximum valid value
  • Added available_offset filter parameter for TardisInstrumentProvider
  • Added NAUTILUS_WORKER_THREADS environment variable for common tokio runtime builder
  • Added Quantity::non_zero(...) method
  • Added Quantity::non_zero_checked(...) method
  • Added round_down param for Instrument.make_qty(...) that is False by default to maintain current behavior
  • Added WebSocket batch order operations for Bybit (#2521), thanks @sunlei
  • Added mark price subscription for Binance Futures (#2548), thanks @bartolootrit
  • Added Chain struct to represent blockchain network (#2526), thanks @filipmacek
  • Added Block primitive for blockchain domain model (#2535), thanks @filipmacek
  • Added Transaction primitive for blockchain domain model (#2551), thanks @filipmacek
  • Added initial blockchain adapter with live block subscription (#2557), thanks @filipmacek

Breaking Changes

  • Removed fees from locked balance calculations for CASH accounts
  • Removed fees from margin calculations for MARGIN accounts
  • Renamed id constructor parameter to instrument_id across all PyO3 instruments, aligning with equivalent Cython instrument constructors

Internal Improvements

  • Implemented exponential backoff and jitter for the RetryManager (#2518), thanks @davidsblom
  • Simplified default locked balance and margin calculations to not include fees
  • Improved handling of time range and effective date filters for TardisInstrumentProvider
  • Improved reconnection robustness for Bybit private/trading channels (#2520), thanks @sunlei
  • Improved logger buffers flushing post backtest
  • Improved validations for Tardis trades data
  • Improved correctness of client registration and deregistration for ExecutionEngine
  • Improved build time by only compiling libraries (#2539), thanks @twitu
  • Improved logging flush (#2568), thanks @faysou
  • Improved clear_log_file to happen for each kernel initialization (#2569), thanks @faysou
  • Refined Price and Quantity validations and correctness
  • Filter fill events if order is already filled for dYdX (#2547), thanks @davidsblom
  • Fixed some clippy lints (#2517), thanks @twitu
  • Upgraded databento crate to v0.24.0
  • Upgraded datafusion crate to v47.0.0
  • Upgraded redis crate to v0.30.0
  • Upgraded sqlx crate to v0.8.5
  • Upgraded pyo3 crate to v0.24.2

Fixes

  • Fixed consistent ordering of execution events (#2513, #2554), thanks for reporting @stastnypremysl
  • Fixed type error when generating an elapsed time for backtests with no elapsed time
  • Fixed memory leak in RetryManager by simplifying the acquire-release pattern, avoiding the asynchronous context manager protocol that led to state sharing, thanks for reporting @DeevsDeevs
  • Fixed locked balance and initial margin calculations for reduce-only orders (#2505), thanks for reporting @stastnypremysl
  • Fixed purging order events from position (these needed to be purged prior to removing cache index entry), thanks @DeevsDeevs
  • Fixed TypeError when formatting backtest post run timestamps which were None (#2514), thanks for reporting @stastnypremysl
  • Fixed handling of BetfairSequenceCompleted as custom data
  • Fixed the instrument class of IndexInstrument, changing to SPOT to correctly represent a spot index of underlying constituents
  • Fixed data range request end handling for DataEngine
  • Fixed unsubscribe instrument close for DataEngine
  • Fixed network clients authentication for OKX (#2553), thanks for reporting @S3toGreen
  • Fixed account balance calculation for dYdX (#2563), thanks @davidsblom
  • Fixed ts_init for databento historical data (#2566), thanks @faysou
  • Fixed RequestInstrument in query_catalog (#2567), thanks @faysou
  • Reverted removal of rotate log file on UTC date change (#2552), thanks @twitu

Documentation Updates

  • Improved environment setup guide with recommended rust analyzer settings (#2538), thanks @twitu
  • Fixed alignment with code for some ExecutionEngine docstrings

Deprecations

None

NautilusTrader 1.216.0 Beta

13 Apr 13:41
bdc275e

Choose a tag to compare

NautilusTrader 1.216.0 Beta

Released on 13th April 2025 (UTC).

This release adds support for Python 3.13 (not yet compatible with free-threading),
and introduces support for Linux on ARM64 architecture.

Enhancements

  • Added allow_past boolean flag for Clock.set_timer(...) to control behavior with start times in the past (default True to allow start times in the past)
  • Added allow_past boolean flag for Clock.set_time_alert(...) to control behavior with alert times in the past (default True to fire immediate alert)
  • Added risk engine check for GTD order expire time, which will deny if expire time is already in the past
  • Added instrument updating for exchange and matching engine
  • Added additional price and quantity precision validations for matching engine
  • Added log file rotation with additional config options max_file_size and max_backup_count (#2468), thanks @xingyanan and @twitu
  • Added bars_timestamp_on_close config option for BybitDataClientConfig (default True to match Nautilus conventions)
  • Added BetfairSequenceCompleted custom data type for Betfair to mark the completion of a sequence of messages
  • Added Arrow schema for MarkPriceUpdate in Rust
  • Added Arrow schema for IndexPriceUpdate in Rust
  • Added Arrow schema for InstrumentClose in Rust
  • Added BookLevel.side property
  • Added Position.closing_order_side() instance method
  • Improved robustness of in-flight order check for LiveExecutionEngine, once exceeded query retries will resolve submitted orders as rejected and pending orders as canceled
  • Improved logging for BacktestNode crashes with full stack trace and prettier config logging

Breaking Changes

  • Changed external bar requests ts_event timestamping from on open to on close for Bybit

Internal Improvements

  • Added handling and warning for Betfair zero sized fills
  • Improved WebSocket error handling for dYdX (#2499), thanks @davidsblom
  • Ported GreeksCalculator to Rust (#2493, #2496), thanks @faysou
  • Upgraded Cython to v3.1.0b1
  • Upgraded redis crate to v0.29.5
  • Upgraded tokio crate to v1.44.2

Fixes

  • Fixed setting component clocks to backtest start time
  • Fixed overflow error in trailing stop calculations
  • Fixed missing SymbolFilterType enum member for Binance (#2495), thanks @sunlei
  • Fixed ts_event for Bybit bars (#2502), thanks @davidsblom
  • Fixed position ID handling for Binance Futures in hedging mode with execution algorithm order (#2504), thanks for reporting @Oxygen923

Documentation Updates

Deprecations

None

NautilusTrader 1.215.0 Beta

05 Apr 01:33

Choose a tag to compare

NautilusTrader 1.215.0 Beta

Released on 5th April 2025 (UTC).

Enhancements

  • Added Cache.purge_closed_order(...)
  • Added Cache.purge_closed_orders(...)
  • Added Cache.purge_closed_position(...)
  • Added Cache.purge_closed_positions(...)
  • Added Cache.purge_account_events(...)
  • Added Account.purge_account_events(...)
  • Added purge_closed_orders_interval_mins config option for LiveExecEngineConfig
  • Added purge_closed_orders_buffer_mins config option for LiveExecEngineConfig
  • Added purge_closed_positions_interval_mins config option for LiveExecEngineConfig
  • Added purge_closed_positions_buffer_mins config option for LiveExecEngineConfig
  • Added purge_account_events_interval_mins config option for LiveExecEngineConfig
  • Added purge_account_events_lookback_mins config option for LiveExecEngineConfig
  • Added Order.ts_closed property
  • Added instrument_ids and bar_types for BacktestDataConfig to improve catalog query efficiency (#2478), thanks @faysou
  • Added venue_dataset_map config option for DatabentoDataConfig to override the default dataset used for a venue (#2483, #2485), thanks @faysou

Breaking Changes

None

Internal Improvements

  • Added Position.purge_events_for_order(...) for purging OrderFilled events and TradeIds associated with a client order ID
  • Added Consumer for WebSocketClient (#2488), thanks @twitu
  • Improved instrument parsing for Tardis with consistent effective timestamp filtering, settlement currency, increments and fees changes
  • Improved error logging for Betfair update_account_state task by logging the full stack trace on error
  • Improved logging for Redis cache database operations
  • Standardized unexpected exception logging to include full stack trace
  • Refined type handling for backtest configs
  • Refined databento venue dataset mapping and configuration (#2483), thanks @faysou
  • Refined usage of databento use_exchange_as_venue (#2487), thanks @faysou
  • Refined time initialization of components in backtest (#2490), thanks @faysou
  • Upgraded Rust MSRV to 1.86.0
  • Upgraded pyo3 crate to v0.24.1

Fixes

  • Fixed MBO feed handling for Databento where an initial snapshot was decoding a trade tick with zero size (#2476), thanks for reporting @JackWCollins
  • Fixed position state snapshots for closed positions where these snapshots were being incorrectly filtered
  • Fixed handling of PolymarketTickSizeChanged message
  • Fixed parsing spot instruments for Tardis where size_increment was zero, now inferred from base currency
  • Fixed default log colors for Rust (#2489), thanks @filipmacek
  • Fixed sccache key for uv in CI (#2482), thanks @davidsblom

Documentation Updates

Deprecations

  • Deprecated strategies written in Cython and removed ema_cross_cython strategy example

NautilusTrader 1.214.0 Beta

28 Mar 13:10

Choose a tag to compare

NautilusTrader 1.214.0 Beta

Released on 28th March 2025 (UTC).

Enhancements

  • Added Coinbase International Exchange initial integration adapter
  • Added time_in_force parameter for Strategy.close_position(...)
  • Added time_in_force parameter for Strategy.close_all_positions(...)
  • Added MarkPriceUpdate data type
  • Added IndexPriceUpdate data type
  • Added Actor.subscribe_mark_prices(...)
  • Added Actor.subscribe_index_prices(...)
  • Added Actor.unsubscribe_mark_prices(...)
  • Added Actor.unsubscribe_index_prices(...)
  • Added Actor.on_mark_price(...)
  • Added Actor.on_index_price(...)
  • Added Cache.mark_price(...)
  • Added Cache.index_price(...)
  • Added Cache.mark_prices(...)
  • Added Cache.index_prices(...)
  • Added Cache.mark_price_count(...)
  • Added Cache.index_price_count(...)
  • Added Cache.has_mark_prices(...)
  • Added Cache.has_index_prices(...)
  • Added UnixNanos.to_rfc3339() for ISO 8601 (RFC 3339) strings
  • Added recv_window_ms config for Bybit WebSocket order client (#2466), thanks @sunlei
  • Enhanced UnixNanos string parsing to support YYYY-MM-DD date format (interpreted as midnight UTC)

Breaking Changes

  • Changed Cache.add_mark_price(self, InstrumentId instrument_id, Price price) to add_mark_price(self, MarkPriceUpdate mark_price)

Internal Improvements

  • Improved WebSocketClient and SocketClient design with dedicated writer task and message channel
  • Completed global message bus design in Rust (#2460), thanks @filipmacek
  • Refactored enum dispatch (#2461), thanks @filipmacek
  • Refactored data interfaces to messages in Rust
  • Refined catalog file operations in Rust (#2454), thanks @faysou
  • Refined quote ticks and klines for Bybit (#2465), thanks @davidsblom
  • Standardized use of anyhow::bail (#2459), thanks @faysou
  • Ported add_venue for BacktestEngine in Rust (#2457), thanks @filipmacek
  • Ported add_instrument for BacktestEngine in Rust (#2469), thanks @filipmacek
  • Upgraded redis crate to v0.29.2

Fixes

  • Fixed race condition on multiple reconnect attempts for WebSocketClient and SocketClient
  • Fixed position state snapshot ts_snapshot value, which was always ts_last instead of timestamp when the snapshot was taken
  • Fixed instrument parsing for Tardis, now correctly applies changes and filters by effective
  • Fixed OrderStatusReport for conditional orders of dYdX (#2467), thanks @davidsblom
  • Fixed submitting stop market orders for dYdX (#2471), thanks @davidsblom
  • Fixed retrying HTTP calls on DecodeError for dYdX (#2472), thanks @davidsblom
  • Fixed LIMIT_IF_TOUCHED order type enum parsing for Bybit
  • Fixed MARKET order type enum parsing for Bybit
  • Fixed quote ticks for Polymarket to only emit new quote ticks when the top-of-book changes
  • Fixed error on cancel order for IB (#2475), thanks @FGU1

Documentation Updates

  • Improved custom data documentation (#2470), thanks @faysou

Deprecations

None

NautilusTrader 1.213.0 Beta

16 Mar 09:56

Choose a tag to compare

NautilusTrader 1.213.0 Beta

Released on 16th March 2025 (UTC).

Enhancements

  • Added CryptoOption instrument, supporting inverse and fractional sizes
  • Added Cache.prices(...) to return a map of latest price per instrument for a price type
  • Added use_uuid_client_order_ids config option for StrategyConfig
  • Added catalog consolidation functions of several parquet files into one (#2421), thanks @faysou
  • Added FDUSD (First Digital USD) crypto Currency constant
  • Added initial leverage, margin_mode and position_mode config options for Bybit (#2441), thanks @sunlei
  • Updated parquet catalog in Rust with recent features (#2442), thanks @faysou

Breaking Changes

None

Internal Improvements

  • Added timeout_secs parameter to HttpClient for default timeouts
  • Added additional precision validations for OrderMatchingEngine
  • Added symmetric comparison impls between u64 and UnixNanos
  • Improved InstrumentProvider error handling when loading (#2444), thanks @davidsblom
  • Improved order denied reason message for balance impact
  • Handle BybitErrors when updating instruments for ByBit (#2437), thanks @davidsblom
  • Handle unexpected errors when fetching order books for dYdX (#2445), thanks @davidsblom
  • Retry if HttpError is raised for dYdX (#2438), thanks @davidsblom
  • Refactored some Rust logs to use named parameters in format strings (#2443), thanks @faysou
  • Some minor performance optimizations for Bybit and dYdX adapters (#2448), thanks @sunlei
  • Ported backtest engine and kernel to Rust (#2449), thanks @filipmacek
  • Upgraded pyo3 and pyo3-async-runtimes crates to v0.24.0
  • Upgraded tokio crate to v1.44.1

Fixes

  • Fixed source distribution (sdist) packaging
  • Fixed Clock.timer_names() memory issue resulting in an empty list
  • Fixed underflow panic when setting a time alert in the past (#2446), thanks for reporting @uxbux
  • Fixed logger name for Strategy custom strategy_ids
  • Fixed unbound variable for Bybit (#2433), thanks @sunlei

Documentation Updates

Deprecations

None

NautilusTrader 1.212.0 Beta

11 Mar 04:50

Choose a tag to compare

NautilusTrader 1.212.0 Beta

Released on 11th March 2025 (UTC).

This release introduces uv as the Python project and dependency management tool.

Enhancements

  • Added OwnOrderBook and OwnBookOrder to track own orders and prevent self-trades in market making
  • Added manage_own_order_books config option for ExecEngineConfig to enable own order tracking
  • Added Cache.own_order_book(...), Cache.own_bid_orders(...) and Cache.own_ask_orders(...) for own order tracking
  • Added optional beta weighting and percent option greeks (#2317), thanks @faysou
  • Added pnl information to greeks data (#2378), thanks @faysou
  • Added precision inference for TardisCSVDataLoader, where price_precision and size_precision are now optional
  • Added Order.ts_accepted property
  • Added Order.ts_submitted property
  • Added UnixNanos::to_datetime_utc() in Rust
  • Added Mark variant for PriceType enum
  • Added mark price handling for Cache
  • Added mark exchange rate handling for Cache
  • Added PortfolioConfig for configuration settings specific to the Portfolio
  • Added use_mark_prices, use_mark_xrates and convert_to_account_base_currency options for PortfolioConfig
  • Added mark price calculations and xrate handling for Portfolio
  • Added Rust debugging support and refined cargo nextest usage (#2335, #2339), thanks @faysou
  • Added catalog write mode options (#2365), thanks @faysou
  • Added BarSpecification to msgspec encoding and decoding hooks (#2373), thanks @pierianeagle
  • Added ignore_external_orders config option for BetfairExecClientConfig, default False to retain current behavior
  • Added requests for order book snapshots with HTTP for dYdX (#2393), thanks @davidsblom

Breaking Changes

  • Removed talib subpackage (see deprecations for v1.211.0)
  • Removed internal ExchangeRateCalculator, replaced with get_exchange_rate(...) function implemented in Rust
  • Replaced ForexSession enum with equivalent from PyO3
  • Replaced ForexSessionFilter with equivalent functions from PyO3
  • Renamed InterestRateData to YieldCurveData
  • Renamed Cache.add_interest_rate_curve to add_yield_curve
  • Renamed Cache.interest_rate_curve to yield_curve
  • Renamed OrderBook.count to update_count for clarity
  • Moved ExecEngineConfig.portfolio_bar_updates config option to PortfolioConfig.bar_updates

Internal Improvements

  • Added initial Cache benchmarking for orders (#2341), thanks @filipmacek
  • Added support for CARGO_BUILD_TARGET environment variable in build.py (#2385), thanks @sunlei
  • Added test for time-bar aggregation (#2391), thanks @stefansimik and @faysou
  • Implemented actor framework and message bus v3 (#2402), thanks @twitu
  • Implemented latency modeling for SimulatedExchange in Rust (#2423), thanks @filipmacek
  • Implemented exchange rate calculations in Rust
  • Improved handling of oms_type for StrategyConfig which now correctly handles the OmsType enum
  • Improved Binance websocket connections management to allow more than 200 streams (#2369), thanks @lidarbtc
  • Improved log event timestamping to avoid clock or time misalignments when events cross to the logging thread
  • Improved error logging for live engines to now include stacktrace for easier debugging
  • Improved logging initialization error handling to avoid panicking in Rust
  • Improved Redis cache database queries, serialization, error handling and connection management (#2295, #2308, #2318), thanks @pushkarm029
  • Improved validation for OrderList to check all orders are for the same instrument ID
  • Improved Controller functionality with ability to create actors and strategies from configs (#2322), thanks @faysou
  • Improved Controller creation for more streamlined trader registration, and separate clock for timer namespacing (#2357), thanks @faysou
  • Improved build by adding placeholders to avoid unnecessary rebuilds (#2336), thanks @bartolootrit
  • Improved consistency of OrderMatchingEngine between Cython and Rust and fix issues (#2350), thanks @filipmacek
  • Removed obsolete reconnect guard for dYdX (#2334), thanks @davidsblom
  • Refactored data request interfaces into messages (#2260), thanks @faysou
  • Refactored data subscribe interfaces into messages (#2280), thanks @faysou
  • Refactored reconciliation interface into messages (#2375), thanks @faysou
  • Refactored _handle_query_group to work with update_catalog (#2412), thanks @faysou
  • Refactored execution message handling in Rust (#2291), thanks @filipmacek
  • Refactored repetitive code in backtest examples (#2387, #2395), thanks @stefansimik
  • Refined yield curve data (#2300), thanks @faysou
  • Refined bar aggregators in Rust (#2311), thanks @faysou
  • Refined greeks computation (#2312), thanks @faysou
  • Refined underlying filtering in portfolio_greeks (#2382), thanks @faysou
  • Refined request_instruments granularity for Databento (#2347), thanks @faysou
  • Refined Rust date functions (#2356), thanks @faysou
  • Refined parsing of IB symbols (#2388), thanks @faysou
  • Refined base_template behaviour in parquet write_data (#2389), thanks @faysou
  • Refined mixed catalog client requests (#2405), thanks @faysou
  • Refined update catalog docstring (#2411), thanks @faysou
  • Refined to use next_back instead of last for identifier tag functions (#2414), thanks @twitu
  • Refined and optimized OrderBook in Rust
  • Cleaned up PyO3 migration artifacts (#2326), thanks @twitu
  • Ported StreamingFeatherWriter to Rust (#2292), thanks @twitu
  • Ported update_limit_order for OrderMatchingEngine in Rust (#2301), thanks @filipmacek
  • Ported update_stop_market_order for OrderMatchingEngine in Rust (#2310), thanks @filipmacek
  • Ported update_stop_limit_order for OrderMatchingEngine in Rust (#2314), thanks @filipmacek
  • Ported market-if-touched order handling for OrderMatchingEngine in Rust (#2329), thanks @filipmacek
  • Ported limit-if-touched order handling for OrderMatchingEngine in Rust (#2333), thanks @filipmacek
  • Ported market-to-limit order handling for OrderMatchingEngine in Rust (#2354), thanks @filipmacek
  • Ported trailing stop order handling for OrderMatchingEngine in Rust (#2366, #2376), thanks @filipmacek
  • Ported contingent orders handling for OrderMatchingEngine in Rust (#2404), thanks @filipmacek
  • Updated Databento publishers.json mappings file(s)
  • Upgraded nautilus-ibapi to 10.30.1 with necessary changes for Interactive Brokers (#2420), thanks @FGU1
  • Upgraded Rust to 1.85.0 and 2024 edition
  • Upgraded arrow and parquet crates to v54.2.1
  • Upgraded databento crate to v0.20.0 (upgrades the dbn crate to v0.28.0)
  • Upgraded datafusion crate to v46.0.0
  • Upgraded pyo3 crate to v0.23.5
  • Upgraded tokio crate to v1.44.0

Fixes

  • Fixed large difference between Data enum variants (#2315), thanks @twitu
  • Fixed start and end range filtering for TardisHttpClient to use API query params
  • Fixed built-in data type Arrow schemas for StreamingFeatherWriter, thanks for reporting @netomenoci
  • Fixed memory allocation performance issue for TardisCSVDataLoader
  • Fixed effective timestamp filtering for TardisHttpClient to now only retain latest version at or before effective
  • Fixed contract activation for Binance Futures, now based on the onboardDate field
  • Fixed hard-coded signature type for PolymarketExecutionClient
  • Fixed unsubscribing from quotes for dYdX (#2331), thanks @davidsblom
  • Fixed docstrings for dYdX factories (#2415), thanks @davidsblom
  • Fixed incorrect type annotations in _request_instrument signature (#2332), thanks @faysou
  • Fixed composite bars subscription (#2337), thanks @faysou
  • Fixed sub command issue in some adapters (#2343), thanks @faysou
  • Fixed bypass_logging fixture to keep log guard alive for entire test session
  • Fixed time parsing for IB adapter (#2360), thanks @faysou
  • Fixed bad ts_init value in IB weekly and monthly bar (#2355), thanks @Endura2024
  • Fixed bar timestamps for IB (#2380), thanks @Endura2024
  • Fixed backtest example load bars from custom CSV (#2383), thanks @hanksuper
  • Fixed subscribe composite bars (#2390), thanks @faysou
  • Fixed invalid link in IB docs (#2401), thanks @stefansimik
  • Fixed cache index loading to ensure persisted data remains available after startup, thanks for reporting @Saransh-28
  • Fixed bars pagination, ordering and limit for Bybit
  • Fixed update_bar aggregation function to guarantee high and low price invariants (#2430), thanks @hjander and @faysou

Documentation Updates

Read more