v1.206.0
nautechsystems/nautilus_traderv1.206.0Nov 17, 2024by github-actions[bot]
AI Summary
This release introduces Tardis Machine integration for live data and metadata, ports the RiskEngine and ExecutionEngine to Rust, and adds order rejection handling for Binance and Bybit.
Key Highlights
- Added Tardis Machine integration providing live data streams and instrument definitions.
- Ported RiskEngine and ExecutionEngine to Rust for performance improvements.
- Implemented OrderCancelRejected and OrderModifyRejected event generation for Binance and Bybit.
New Features
- TardisDataClient for live data streams
- TardisInstrumentProvider for instrument definitions
- Portfolio.realized_pnl(...) and realized_pnls(...) methods
- WebSocketClient reconnection retries
- OrderCancelRejected and OrderModifyRejected event generation
Full Release Notes
# NautilusTrader 1.206.0 Beta Released on 17th November 2024 (UTC). ### Enhancements - Added `TardisDataClient` providing live data streams from a Tardis Machine WebSocket server - Added `TardisInstrumentProvider` providing instrument definitions from Tardis through the HTTP instrument metadata API - Added `Portfolio.realized_pnl(...)` method for per instrument realized PnL (based on positions) - Added `Portfolio.realized_pnls(...)` method for per venue realized PnL (based on positions) - Added configuration warning for `InstrumentProvider` (to warn when node starts with no instrument loading) - Implemented Tardis optional [symbol normalization](https://nautilustrader.io/docs/nightly/integrations/tardis/#symbology-and-normalization) - Implemented `WebSocketClient` reconnection retries (#2044), thanks @davidsblom - Implemented `OrderCancelRejected` event generation for Binance and Bybit - Implemented `OrderModifyRejected` event generation for Binance and Bybit - Improved `OrderRejected` handling of `reason` string (`None` is now allowed which will become the string `'None'`) - Improved `OrderCancelRejected` handling of `reason` string (`None` is now allowed which will become the string `'None'`) - Improved `OrderModifyRejected` handling of `reason` string (`None` is now allowed which will become the string `'None'`) ### Internal Improvements - Ported `RiskEngine` to Rust (#2035), thanks @Pushkarm029 and @twitu - Ported `ExecutionEngine` to Rust (#2048), thanks @twitu - Added globally shared data channels to send events from engines to Runner in Rust (#2042), thanks @twitu - Added LRU caching for dYdX HTTP client (#2049), thanks @davidsblom - Improved identifier constructors to take `AsRef<str>` for a cleaner more flexible API - Refined identifiers `From` trait impls - Refined `InstrumentProvider` initialization behavior and logging - Refined `LiveTimer` cancel and performance testing - Simplified `LiveTimer` cancellation model (#2046), thanks @twitu - Refined Bybit HMAC authentication signatures (now using Rust implemented function) - Refined Tardis instrument ID parsing - Removed Bybit `msgspec` redundant import alias (#2050), thanks @sunlei - Upgraded `databento` crate to v0.16.0 ### Breaking Changes None ### Fixes - Fixed loading specific instrument IDs for `InstrumentProviderConfig` - Fixed PyO3 instrument conversions for `raw_symbol` (was incorrectly using the normalized symbol) - Fixed reconcile open orders and account websocket message for dYdX (#2039), thanks @davidsblom - Fixed market order `avg_px` for Polymarket trade reports - Fixed Betfair clients keepalive (#2040), thanks @limx0 - Fixed Betfair reconciliation (#2041), thanks @limx0 - Fixed Betfair customer order ref limit to 32 chars - Fixed Bybit handling of `PARTIALLY_FILLED_CANCELED` status orders - Fixed Polymarket size precision for `BinaryOption` instruments (precision 6 to match USDC.e) - Fixed adapter instrument reloading (providers were not reloading instruments at the configured interval due to internal state flags) - Fixed static time logging for `BacktestEngine` when running with `use_pyo3` logging config - Fixed in-flight orders check and improve error handling (#2053), thanks @davidsblom - Fixed dYdX handling for liquidated fills (#2052), thanks @davidsblom - Fixed `BybitResponse.time` field as optional `int` (#2051), thanks @sunlei - Fixed single instrument requests for `DatabentoDataClient` (was incorrectly calling `_handle_instruments` instead of `_handle_instrument`), thanks for reporting @Emsu - Fixed `fsspec` recursive globbing behavior to ensure only file paths are included, and bumped dependency to version 2024.10.0 - Fixed jupyterlab url typo (#2057), thanks @Alsheh