NautilusTrader 1.211.0 Beta
Released on 9th February 2025 (UTC).
This release introduces high-precision mode, where value types such as Price, Quantity and Money are now backed by 128-bit integers (instead of 64-bit), thereby increasing maximum precision to 16, and vastly expanding the allowable value ranges.
This will address precision and value range issues experienced by some crypto users, alleviate higher timeframe bar volume limitations, as well as future proofing the platform.
See the RFC for more details. For an explanation on compiling with or without high-precision mode, see the precision-mode section of the installation guide.
For migrating data catalogs due to the breaking changes, see the data migrations guide.
This release will be the final version that uses Poetry for package and dependency management.
Enhancements
- Added
high-precisionmode for 128-bit integer backed value types (#2072), thanks @twitu - Added instrument definitions range requests for
TardisHttpClientwith optionalstartandendfilter parameters - Added
quote_currency,base_currency,instrument_type,contract_type,active,startandendfilters forTardisInstrumentProvider - Added
log_commandsconfig option forActorConfig,StrategyConfig,ExecAlgorithmConfigfor more efficient log filtering - Added additional limit parameters for
BettingInstrumentconstructor - Added
venue_position_idparameter forOrderStatusReport - Added bars update support for
PortfolioPnLs (#2239), thanks @faysou - Added optional
paramsforStrategyorder management methods (symmetry withActordata methods) (#2251), thanks @faysou - Added heartbeats for Betfair clients to keep streams alive (more robust when initial subscription delays)
- Added
timeout_shutdownconfig option forNautilusKernelConfig - Added IOC time in force mapping for Betfair orders
- Added
min_market_start_timeandmax_market_start_timetime range filtering forBetfairInstrumentProviderConfig - Added
default_min_notionalconfig option forBetfairInstrumentProviderConfig - Added
stream_conflate_msconfig option forBetfairDataClientConfig - Added
recv_window_msconfig option forBybitDataClientConfigandBybitExecClientConfig - Added
open_check_open_onlyconfig option forLiveExecEngineConfig - Added
BetSideenum (to supportBetandBetPosition) - Added
BetandBetPositionfor betting market risk and PnL calculations - Added
total_pnlandtotal_pnlsmethods forPortfolio - Added optional
priceparameter forPortfoliounrealized PnL and net exposure methods
Breaking Changes
- Renamed
OptionsContractinstrument toOptionContractfor more technically correct terminology (singular) - Renamed
OptionsSpreadinstrument toOptionSpreadfor more technically correct terminology (singular) - Renamed
options_contractmodules tooption_contract(see above) - Renamed
options_spreadmodules tooption_spread(see above) - Renamed
InstrumentClass.FUTURE_SPREADtoInstrumentClass.FUTURES_SPREADfor more technically correct terminology - Renamed
event_loggingconfig option tolog_events - Renamed
BetfairExecClientConfig.request_account_state_periodtorequest_account_state_secs - Moved SQL schema directory to
schemas/sql(reinstall the Nautilus CLI withmake install-cli) - Changed
OrderBookDeltaArrow schema to useFixedSizeBinaryfields to support the new precision modes - Changed
OrderBookDepth10Arrow schema to useFixedSizeBinaryfields to support the new precision modes - Changed
QuoteTickArrow schema to useFixedSizeBinaryfields to support the new precision modes - Changed
TradeTickArrow schema to useFixedSizeBinaryfields to support the new precision modes - Changed
BarArrow schema to useFixedSizeBinaryfields to support the new precision modes - Changed
BettingInstrumentdefaultmin_notionaltoNone - Changed meaning of
ws_connection_delay_secsfor PolymarketDataClientConfig to be non-initial delay (#2271) - Changed
GATEIOTardis venue toGATE_IOfor consistency withCRYPTO_COMandBLOCKCHAIN_COM - Removed
max_ws_reconnection_triesfor dYdX configs (no longer applicable with infinite retries and exponential backoff) - Removed
max_ws_reconnection_triesfor Bybit configs (no longer applicable with infinite retries and exponential backoff) - Removed remaining
max_ws_reconnection_triesfor Bybit configs (#2290), thanks @sunlei
Internal Improvements
- Added
ThrottledEnqueuerfor more efficient and robust live engines queue management and logging - Added
OrderBookDeltaTestBuilderin Rust to improve testing (#2234), thanks @filipmacek - Added custom certificate loading for
SocketClientTLS - Added
check_nonempty_stringfor string validation in Rust - Improved Polymarket WebSocket subscription handling by configurable delay (#2271), thanks @ryantam626
- Improved
WebSocketClientwith state management, error handling, timeouts and robust reconnects with exponential backoff - Improved
SocketClientwith state management, error handling, timeouts and robust reconnects with exponential backoff - Improved
TradingNodeshutdown when running withasyncio.run()(more orderly handling of event loop) - Improved
NautilusKernelpending tasks cancellation on shutdown - Improved
TardisHttpClientrequests and error handling - Improved log file writer to strip ANSI escape codes and unprintable chars
- Improved
cleanmake target behavior and addeddistcleanmake target (#2286), @demonkoryu - Refined
Currencynameto accept non-ASCII characters (common for foreign currencies) - Refactored CI with composite actions (#2242), thanks @sunlei
- Refactored Option Greeks feature (#2266), thanks @faysou
- Changed validation to allow zero commission for
PerContractFeeModel(#2282), thanks @stefansimik - Changed to use
moldas the linker in CI (#2254), thanks @sunlei - Ported market order processing for
OrderMatchingEnginein Rust (#2202), thanks @filipmacek - Ported limit order processing for
OrderMatchingEnginein Rust (#2212), thanks @filipmacek - Ported stop limit order processing for
OrderMatchingEnginein Rust (#2225), thanks @filipmacek - Ported
CancelOrderprocessing forOrderMatchingEnginein Rust (#2231), thanks @filipmacek - Ported
CancelAllOrdersprocessing forOrderMatchingEnginein Rust (#2253), thanks @filipmacek - Ported
BatchCancelOrdersprocessing forOrderMatchingEnginein Rust (#2256), thanks @filipmacek - Ported expire order processing for
OrderMatchingEnginein Rust (#2259), thanks @filipmacek - Ported modify order processing for
OrderMatchingEnginein Rust (#2261), thanks @filipmacek - Ported generate fresh account state for
SimulatedExchangein Rust (#2272), thanks @filipmacek - Ported adjust account for SimulatedExchange in Rust (#2273), thanks @filipmacek
- Continued porting
RiskEngineto Rust (#2210), thanks @pushkarm029 - Continued porting
ExecutionEngineto Rust (#2214), thanks @pushkarm029 - Continued porting
OrderEmulatorto Rust (#2219, #2226), thanks @pushkarm029 - Moved
modelcrate stubs into defaults (#2235), thanks @fhill2 - Upgraded
pyo3crate to v0.23.4 - Upgraded
pyo3-async-runtimescrate to v0.23.0
Fixes
- Fixed
LiveTimerimmediate fire when start time zero (#2270), thanks for reporting @bartolootrit - Fixed order book action parsing for Tardis (ensures zero sizes in snapshots work with the tighter validation for
actionvssize) - Fixed PnL calculations for betting instruments in
Portfolio - Fixed net exposure for betting instruments in
Portfolio - Fixed backtest start and end time validation assertion (#2203), thanks @davidsblom
- Fixed
CustomDataimport inDataEngine(#2207), thanks @graceyangfan and @faysou - Fixed databento helper function (#2208), thanks @faysou
- Fixed live reconciliation of generated order fills to use the
venue_position_id(when provided), thanks for reporting @sdk451 - Fixed
InstrumentProviderinitialization behavior whenreloadflagTrue, thanks @ryantam626 - Fixed handling of Binance HTTP error messages (not always JSON-parsable, leading to
msgspec.DecodeError) - Fixed
CARGO_TARGET_DIRenvironment variable for build script (#2228), thanks @sunlei - Fixed typo in
delta.rsdoc comment (#2230), thanks @eltociear - Fixed memory leak in network PyO3 layer caused by the
gil-refsfeature (#2229), thanks for reporting @davidsblom - Fixed reconnect handling for Betfair (#2232, #2288, #2289), thanks @limx0
- Fixed
instrument.idnull dereferences in error logs (#2237), thanks for reporting @ryantam626 - Fixed schema for listing markets of dYdX (#2240), thanks @davidsblom
- Fixed realized pnl calculation in
Portfoliowhere flat positions were not included in cumulative sum (#2243), thanks @faysou - Fixed update order in
Cachefor Rust (#2248), thanks @filipmacek - Fixed websocket schema for market updates of dYdX (#2258), thanks @davidsblom
- Fixed handling of empty book messages for Tardis (resulted in
deltascannot be empty panicking) - Fixed
Cache.bar_typesaggregation_sourcefiltering, was incorrectly usingprice_type(#2269), thanks @faysou - Fixed missing
comboinstrument type for Tardis integration - Fixed quote tick processing from bars in
OrderMatchingEngineresulting in sizes below the minimum increment (#2275), thanks for reporting @miller-moore - Fixed initialization of
BinanceErrorCodes requiringint - Fixed resolution of Tardis
BINANCE_DELIVERYvenue for COIN-margined contracts - Fixed hang in rate limiter (#2285), thanks @WyldeCat
- Fixed typo in
InstrumentProviderConfigdocstring (#2284), thanks @ikeepo - Fixed handling of
tick_size_changemessage for Polymarket
Documentation Updates
- Added Databento overview tutorial (#2233, #2252), thanks @stefansimik
- Added docs for Actor (#2233), thanks @stefansimik
- Added docs for Portfolio limitations with bar data (#2233), thanks @stefansimik
- Added docs overview for example locations in repository (#2287), thanks @stefansimik
- Improved docstrings for Actor subscription and request methods
- Refined
streamingparameter description (#2293), thanks @faysou and @stefansimik