NautilusTrader 1.212.0 Beta
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
andOwnBookOrder
to track own orders and prevent self-trades in market making - Added
manage_own_order_books
config option forExecEngineConfig
to enable own order tracking - Added
Cache.own_order_book(...)
,Cache.own_bid_orders(...)
andCache.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
, whereprice_precision
andsize_precision
are now optional - Added
Order.ts_accepted
property - Added
Order.ts_submitted
property - Added
UnixNanos::to_datetime_utc()
in Rust - Added
Mark
variant forPriceType
enum - Added mark price handling for
Cache
- Added mark exchange rate handling for
Cache
- Added
PortfolioConfig
for configuration settings specific to thePortfolio
- Added
use_mark_prices
,use_mark_xrates
andconvert_to_account_base_currency
options forPortfolioConfig
- 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 forBetfairExecClientConfig
, defaultFalse
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 withget_exchange_rate(...)
function implemented in Rust - Replaced
ForexSession
enum with equivalent from PyO3 - Replaced
ForexSessionFilter
with equivalent functions from PyO3 - Renamed
InterestRateData
toYieldCurveData
- Renamed
Cache.add_interest_rate_curve
toadd_yield_curve
- Renamed
Cache.interest_rate_curve
toyield_curve
- Renamed
OrderBook.count
toupdate_count
for clarity - Moved
ExecEngineConfig.portfolio_bar_updates
config option toPortfolioConfig.bar_updates
Internal Improvements
- Added initial
Cache
benchmarking for orders (#2341), thanks @filipmacek - Added support for
CARGO_BUILD_TARGET
environment variable inbuild.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
forStrategyConfig
which now correctly handles theOmsType
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 withupdate_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 oflast
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
forOrderMatchingEngine
in Rust (#2301), thanks @filipmacek - Ported
update_stop_market_order
forOrderMatchingEngine
in Rust (#2310), thanks @filipmacek - Ported
update_stop_limit_order
forOrderMatchingEngine
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
andparquet
crates to v54.2.1 - Upgraded
databento
crate to v0.20.0 (upgrades thedbn
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
andend
range filtering forTardisHttpClient
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 forTardisHttpClient
to now only retain latest version at or beforeeffective
- Fixed contract
activation
for Binance Futures, now based on theonboardDate
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
- Added documentation for messaging styles (#2410), thanks @stefansimik
- Added backtest clock and timers example (#2327), thanks @stefansimik
- Added backtest bar aggregation example (#2340), thanks @stefansimik
- Added backtest portfolio example (#2362), thanks @stefansimik
- Added backtest cache example (#2370), thanks @stefansimik
- Added backtest cascaded indicators example (#2398), thanks @stefansimik
- Added backtest custom event with msgbus example (#2400), thanks @stefansimik
- Added backtest messaging with msgbus example (#2406), thanks @stefansimik
- Added backtest messaging with actor & data example (#2407), thanks @stefansimik
- Added backtest messaging with actor & signal example (#2408), thanks @stefansimik
- Added indicators example (#2396), thanks @stefansimik
- Added documentation for debugging with Rust (#2325), thanks @faysou
- Added MRE strategy example (#2352), thanks @stefansimik
- Added data catalog example (#2353), thanks @stefansimik
- Improved and expandd bar aggregation docs (#2384), thanks @stefansimik
- Improved
emulation_trigger
parameter description in docstrings (#2313), thanks @stefansimik - Improved docs for emulated orders (#2316), thanks @stefansimik
- Improved getting started doc for backtesting API levels (#2324), thanks @faysou
- Improved FSM example explanations for beginners (#2351), thanks @stefansimik
- Refined option greeks docstrings (#2320), thanks @faysou
- Refined adapters concept documentation (#2358), thanks @faysou
- Fixed typo in docs/concepts/actors.md (#2422), thanks @lsamaciel
- Fixed singular noun in docs/concepts/instruments.md (#2424), thanks @lsamaciel
- Fixed typo in docs/concepts/data.md (#2426), thanks @lsamaciel
- Fixed Limit-If-Touched example in docs/concepts/orders.md (#2429), thanks @lsamaciel
Deprecations
None