NautilusTrader 1.210.0 Beta
Released on 10th January 2025 (UTC).
Enhancements
- Added
PerContractFeeModel
, thanks @stefansimik - Added
DYDXInternalError
andDYDXOraclaPrice
data types for dYdX (#2155), thanks @davidsblom - Added proper
OrderBookDeltas
flags parsing for Betfair - Added Binance TradeLite message support (#2156), thanks @DeevsDeevs
- Added
DataEngineConfig.time_bars_skip_first_non_full_bar
config option (#2160), thanks @faysou - Added
execution.fast
support for Bybit (#2165), thanks @sunlei - Added catalog helper functions to export data (#2135), thanks @twitu
- Added additional timestamp properties for
NautilusKernel
- Added
event_logging
config option forStrategyConfig
(#2183), thanks @sunlei - Added
bar_adaptive_high_low_ordering
toBacktestVenueConfig
(#2188), thanks @faysou and @stefansimik
Breaking Changes
- Removed optional
value
param fromUUID4
(useUUID4.from_str(...)
instead), aligns with Nautilus PyO3 API - Changed
unix_nanos_to_iso8601
to output an ISO 8601 (RFC 3339) format string with nanosecond precision - Changed
format_iso8601
to output ISO 8601 (RFC 3339) format string with nanosecond precision - Changed
format_iso8601
dt
parameter to enforcepd.Timestamp
(which has nanosecond precision) - Changed
TradingNode.is_built
from a property to a method.is_built()
- Changed
TradingNode.is_running
from a property to a method.is_running()
- Changed
OrderInitialized
Arrow schema (linked_order_ids
andtags
data types changed fromstring
tobinary
) - Changed order dictionary representation field types for
avg_px
andslippage
fromstr
tofloat
(as out of alignment with position events) - Changed
aggregation_source
filter parameter forCache.bar_types(...)
to optional with default ofNone
Internal Improvements
- Improved market order handling when no size available in book (now explicitly rejects)
- Improved validation for
TradeTick
by ensuringsize
is always positive - Improved validation for
OrderBookDelta
by ensuringorder.size
is positive whenaction
is eitherADD
orUPDATE
- Improved validation for
BarSpecification
by ensuringstep
is always positive - Standardized ISO 8601 timestamps to RFC 3339 spec with nanosecond precision
- Standardized flags for
OrderBookDeltas
parsing across adapters - Refined parsing candles for dYdX (#2148), thanks @davidsblom
- Refined imports for type hints in Bybit (#2149), thanks @sunlei
- Refined private WebSocket message processing for Bybit (#2170), thanks @sunlei
- Refined WebSocket client re-subscribe log for Bybit (#2179), thanks @sunlei
- Refined margin balance report for dYdX (#2154), thanks @davidsblom
- Enhanced
lotSizeFilter
field for Bybit (#2166), thanks @sunlei - Renamed WebSocket private client for Bybit (#2180), thanks @sunlei
- Added unit tests for custom dYdX types (#2163), thanks @davidsblom
- Allow bar aggregators to persist after
request_aggregated_bars
(#2144), thanks @faysou - Handle directory and live streams to catalog (#2153), thanks @limx0
- Use timeout when initializing account for dYdX (#2169), thanks @davidsblom
- Use retry manager when sending websocket messages for dYdX (#2196), thanks @davidsblom
- Refined error logs when sending pong for dYdX (#2184), thanks @davidsblom
- Optimized message bus topic
is_matching
(#2151), thanks @ryantam626 - Added tests for
bar_adaptive_high_low_ordering
(#2197), thanks @faysou - Ported
OrderManager
to Rust (#2161), thanks @Pushkarm029 - Ported trailing stop logic to Rust (#2174), thanks @DeevsDeevs
- Ported
FeeModel
to Rust (#2191), thanks @filipmacek - Implemented IDs generator for
OrderMatchingEngine
in Rust (#2193), thanks @filipmacek - Upgraded Cython to v3.1.0a1
- Upgraded
tokio
crate to v1.43.0 - Upgraded
datafusion
crate to v44.0.0
Fixes
- Fixed type check for
DataClient
on requests to support clients other thanMarketDataClient
- Fixed processing trade ticks from bars in
OrderMatchingEngine
- that could result in zero-size trades, thanks for reporting @stefansimik - Fixed
instrument is None
check flows forDataEngine
andPolymarketExecutionClient
- Fixed instrument updates in
BetfairDataClient
(#2152), thanks @limx0 - Fixed processing of time events on backtest completion when they occur after the final data timestamp
- Fixed missing enum member
CANCELED_MARKET_RESOLVED
forPolymarketOrderStatus
- Fixed missing
init_id
field from some order.to_dict()
representations - Fixed writing
DYDXOraclePrice
to catalog (#2158), thanks @davidsblom - Fixed account balance for dYdX (#2167), thanks @davidsblom
- Fixed markets schema for dYdX (#2190), thanks @davidsblom
- Fixed missing
OrderEmulated
andOrderReleased
Arrow schemas - Fixed websocket public channel reconnect for Bybit (#2176), thanks @sunlei
- Fixed execution report parsing for Binance Spot (client order ID empty string now becomes a UUID4 string)
- Fixed docs typo for
fill_order
function inOrderMatchingEngine
(#2189), thanks @filipmacek
Documentation Updates
- Added docs for
Cache
, slippage and spread handling in backtesting (#2162), thanks @stefansimik - Added docs for
FillModel
and bar based execution (#2187), thanks @stefansimik - Added docs for choosing data (cost vs. accuracy) and bars OHLC processing (#2195), thanks @stefansimik
- Added docs for bar processing in backtests (#2198), thanks @stefansimik
- Added docs for timestamp and UUID specs