Skip to content

Releases: nautechsystems/nautilus_trader

NautilusTrader 1.186.0 Beta

02 Feb 23:36
8aae236
Compare
Choose a tag to compare

NautilusTrader 1.186.0 Beta

Released on 2nd February 2024 (UTC).

Enhancements

None

Breaking Changes

None

Fixes

  • Fixed Interactive Brokers get account positions bug (#1475), thanks @benjaminsingleton
  • Fixed TimeBarAggregator handling of interval types on build
  • Fixed BinanceSpotExecutionClient non-existent method name, thanks @sunlei
  • Fixed unused psutil import, thanks @sunlei

NautilusTrader 1.185.0 Beta

26 Jan 11:58
9d09e96
Compare
Choose a tag to compare

NautilusTrader 1.185.0 Beta

Released on 26th January 2024 (UTC).

Enhancements

  • Add warning log when bypass_logging is set true for a LIVE context
  • Improved register_serializable object to also add type to internal _EXTERNAL_PUBLIHSABLE_TYPES
  • Improved Interactive Brokers expiration contract parsing, thanks @fhill2

Breaking Changes

  • Changed StreamingConfig.include_types type from tuple[str] to list[type] (better alignment with other type filters)
  • Consolidated clock module into component module (reduce binary wheel size)
  • Consolidated logging module into component module (reduce binary wheel size)

Fixes

  • Fixed Arrow serialization of OrderUpdated (trigger_price type was incorrect), thanks @benjaminsingleton
  • Fixed StreamingConfig.include_types behavior (was not being honored for instrument writers), thanks for reporting @doublier1
  • Fixed ImportableStrategyConfig type assignment in StrategyFactory (#1470), thanks @rsmb7z

NautilusTrader 1.184.0 Beta

22 Jan 14:34
a79c2bb
Compare
Choose a tag to compare

NautilusTrader 1.184.0 Beta

Released on 22nd January 2024 (UTC).

Enhancements

  • Added LogLevel.OFF (matches the Rust tracing log levels)
  • Added init_logging function with sensible defaults to initialize the Rust implemented logging system
  • Updated Binance Futures enum members for BinanceFuturesContractType and BinanceFuturesPositionUpdateReason
  • Improved log header using the sysinfo crate (adds swap space metrics and a PID identifier)
  • Removed Python dependency on psutil

Breaking Changes

  • Removed clock parameter from Logger (no dependency on Clock anymore)
  • Renamed LoggerAdapter to Logger (and removed old Logger class)
  • Renamed Logger component_name parameter to name (matches Python built-in logging API)
  • Renamed OptionKind kind parameter and property to option_kind (better clarity)
  • Renamed OptionsContract Arrow schema field kind to option_kind
  • Changed level_file log level to OFF (file logging is off by default)

Fixes

  • Fixed memory leak for catalog queries (#1430), thanks @twitu
  • Fixed DataEngine order book snapshot timer names (could not parse instrument IDs with hyphens), thanks for reporting @x-zho14 and @dimitar-petrov
  • Fixed LoggingConfig parsing of WARNING log level (was not being recognized), thanks for reporting @davidsblom
  • Fixed Binance Futures QuoteTick parsing to capture event time for ts_event, thanks for reporting @x-zho14

NautilusTrader 1.183.0 Beta

12 Jan 13:40
178d621
Compare
Choose a tag to compare

NautilusTrader 1.183.0 Beta

Released on 12th January 2024 (UTC).

Enhancements

  • Added NautilusConfig.json_primitives to convert object to Python dictionary with JSON primitive values
  • Added InstrumentClass.BOND
  • Added MessageBusConfig use_trader_prefix and use_trader_id options (provides more control over stream names)
  • Added CacheConfig.drop_instruments_on_reset (default true to retain current behavior)
  • Implemented core logging interface via the log crate, thanks @twitu
  • Implemented global atomic clock in Rust (improves performance and ensures properly monotonic timestamps in real-time), thanks @twitu
  • Improved Interactive Brokers adapter raising docker RuntimeError only when needed (not when using TWS), thanks @rsmb7z
  • Upgraded core HTTP client to latest hyper and reqwest, thanks @ayush-sb
  • Optimized Arrow encoding (resulting in ~100x faster writes for the Parquet data catalog)

Breaking Changes

  • Changed ParquetDataCatalog custom data prefix from geneticdata_ to custom_ (you will need to rename any catalog subdirs)
  • Changed ComponentStateChanged Arrow schema for config from string to binary
  • Changed OrderInitialized Arrow schema for options from string to binary
  • Changed OrderBookDeltas dictionary representation of deltas field from JSON bytes to a list of dict (standardize with all other data types)
  • Changed external message publishing stream name keys to be trader-{trader_id}-{instance_id}-streams (with options allows many traders to publish to the same streams)
  • Renamed all version 2 data wrangler classes with a V2 suffix for clarity
  • Renamed GenericData to CustomData (more accurately reflects the nature of the type)
  • Renamed DataClient.subscribed_generic_data to .subscribed_custom_data
  • Renamed MessageBusConfig.stream to .streams_prefix (more accurate)
  • Renamed ParquetDataCatalog.generic_data to .custom_data
  • Renamed TradeReport to FillReport (more conventional terminology, and more clearly separates market data from user execution reports)
  • Renamed asset_type to instrument_class across the codebase (more conventional terminology)
  • Renamed AssetType enum to InstrumentClass (more conventional terminology)
  • Renamed AssetClass.BOND to AssetClass.DEBT (more conventional terminology)
  • Removed AssetClass.METAL (not strictly an asset class, more a futures category)
  • Removed AssetClass.ENERGY (not strictly an asset class, more a futures category)
  • Removed multiplier param from Equity constructor (not applicable)
  • Removed size_precision, size_increment, and multiplier fields from Equity dictionary representation (not applicable)
  • Removed TracingConfig (now redundant with new logging implementation)
  • Removed Ticker data type and associated methods (not a type which can be practically normalized and so becomes adapter specific generic data)
  • Moved AssetClass.SPORTS_BETTING to InstrumentClass.SPORTS_BETTING

Fixes

  • Fixed logger thread leak, thanks @twitu
  • Fixed handling of configuration objects to work with StreamingFeatherWriter
  • Fixed BinanceSpotInstrumentProvider fee loading key error for partial instruments load, thanks for reporting @doublier1
  • Fixed Binance API key configuration parsing for testnet (was falling through to non-testnet env vars)
  • Fixed TWAP execution algorithm scheduled size handling when first order should be for the entire size, thanks for reporting @pcgm-team
  • Added BinanceErrorCode.SERVER_BUSY (-1008), also added to the retry error codes
  • Added BinanceOrderStatus.EXPIRED_IN_MATCH which is when an order was canceled by the exchange due self-trade prevention (STP), thanks for reporting @doublier1

NautilusTrader 1.182.0 Beta

23 Dec 04:12
f1b643d
Compare
Choose a tag to compare

NautilusTrader 1.182.0 Beta

Released on 23rd December 2023 (UTC).

Enhancements

  • Added CacheDatabaseFacade and CacheDatabaseAdapter to abstract backing technology from Python codebase
  • Added RedisCacheDatabase implemented in Rust with separate MPSC channel thread for insert, update and delete operations
  • Added TA-Lib integration, thanks @rsmb7z
  • Added OrderBookDelta and OrderBookDeltas to serializable and publishable types
  • Moved PortfolioFacade to Actor
  • Improved Actor and Strategy usability to be more lenient to mistaken calls to clock and logger from the constructor (warnings also added to docs)
  • Removed redis and hiredis dependencies from Python codebase

Breaking Changes

  • Changed configuration objects to take stronger types as these are now serializable when registered (rather than primitives)
  • Changed NautilusKernelConfig.trader_id to type TraderId
  • Changed BacktestDataConfig.instrument_id to type InstrumentId
  • Changed ActorConfig.component_id to type ComponentId | None
  • Changed StrategyConfig.strategy_id to type StrategyId | None
  • Changed Instrument, OrderFilled and AccountState info field serialization due below fix (you'll need to flush your cache)
  • Changed CacheConfig to take a DatabaseConfig (better symmetry with MessageBusConfig)
  • Changed RedisCacheDatabase data structure for currencies from hashset to simpler key-value (you'll need to clear cache or delete all curreny keys)
  • Changed Actor state loading to now use the standard Serializer
  • Renamed register_json_encoding to register_config_encoding
  • Renamed register_json_decoding to register_config_decoding
  • Removed CacheDatabaseConfig (due above config change)
  • Removed infrastructure subpackage (now redundant with new Rust implementation)

Fixes

  • Fixed json encoding for CacheDatabaseAdapter from info field serialization fix below
  • Fixed Instrument, OrderFilled and AccountState info field serialization to retain JSON serializable dicts (rather than double encoding and losing information)
  • Fixed Binance Futures good_till_date value when time_in_force not GTD, such as when strategy is managing the GTD (was incorrectly passing through UNIX milliseconds)
  • Fixed Executor handling of queued task IDs (was not discarding from queued tasks on completion)
  • Fixed DataEngine handling of order book snapshots with very small intervals (now handles as short as 20 milliseconds)
  • Fixed BacktestEngine.clear_actors(), BacktestEngine.clear_strategies() and BacktestEngine.clear_exec_algorithms(), thanks for reporting @davidsblom
  • Fixed BacktestEngine OrderEmulator reset, thanks @davidsblom
  • Fixed Throttler.reset and reset of RiskEngine throttlers, thanks @davidsblom

NautilusTrader 1.181.0 Beta

02 Dec 06:52
63c191b
Compare
Choose a tag to compare

NautilusTrader 1.181.0 Beta

Released on 2nd December (UTC).

This release adds support for Python 3.12.

Enhancements

  • Rewrote Interactive Brokers integration documentation, many thanks @benjaminsingleton
  • Added Interactive Brokers adapter support for crypto instruments with cash quantity, thanks @benjaminsingleton
  • Added HistoricInteractiveBrokerClient, thanks @benjaminsingleton and @limx0
  • Added DataEngineConfig.time_bars_interval_type (determines the type of interval used for time aggregation left-open or right-open)
  • Added LoggingConfig.log_colors to optionally use ANSI codes to produce colored logs (default true to retain current behavior)
  • Added QuoteTickDataWrangler.process_bar_data options for offset_interval_ms and timestamp_is_close
  • Added identifier generators in Rust, thanks @filipmacek
  • Added OrderFactory in Rust, thanks @filipmacek
  • Added WilderMovingAverage in Rust, thanks @ayush-sb
  • Added HullMovingAverage in Rust, thanks @ayush-sb
  • Added all common identifier generators in Rust, thanks @filipmacek
  • Added generic SQL database support with sqlx in Rust, thanks @filipmacek

Breaking Changes

  • Consolidated all data submodules into one data module (reduce binary wheel size)
  • Moved OrderBook from model.orderbook.book to model.book (subpackage only had this single module)
  • Moved Currency from model.currency to model.objects (consolidating modules to reduce binary wheel size)
  • Moved MessageBus from common.msgbus to common.component (consolidating modules to reduce binary wheel size)
  • Moved MsgSpecSerializer from serialization.msgpack.serializer to serialization.serializer
  • Moved CacheConfig snapshot_orders, snapshot_positions, snapshot_positions_interval to NautilusKernelConfig (logical applicability)
  • Renamed MsgPackSerializer to MsgSpecSeralizer (now handles both JSON and MsgPack formats)

Fixes

  • Fixed missing trader_id in Position dictionary representation, thanks @filipmacek
  • Fixed conversion of fixed precision integers to floats (should be dividing to avoid rounding errors), thanks for reporting @filipmacek
  • Fixed daily timestamp parsing for Interactive Brokers, thanks @benjaminsingleton
  • Fixed live reconciliation trade processing for partially filled then canceled orders
  • Fixed RiskEngine cumulative notional risk check for CurrencyPair SELL orders on multi-currency cash accounts

NautilusTrader 1.180.0 Beta

03 Nov 10:58
622014e
Compare
Choose a tag to compare

NautilusTrader 1.180.0 Beta

Released on 3rd November 2023 (UTC).

Enhancements

  • Improved internal latency for live engines by using loop.call_soon_threadsafe(...)
  • Improved RedisCacheDatabase client connection error handling with retries
  • Added WebSocketClient connection headers, thanks @ruthvik125 and @twitu
  • Added support_contingent_orders option for venues (to simulate venues which do not support contingent orders)
  • Added StrategyConfig.manage_contingent_orders option (to automatically manage open contingent orders)
  • Added FuturesContract.activation_utc property which returns a pd.Timestamp tz-aware (UTC)
  • Added OptionsContract.activation_utc property which returns a pd.Timestamp tz-aware (UTC)
  • Added CryptoFuture.activation_utc property which returns a pd.Timestamp tz-aware (UTC)
  • Added FuturesContract.expiration_utc property which returns a pd.Timestamp tz-aware (UTC)
  • Added OptionsContract.expiration_utc property which returns a pd.Timestamp tz-aware (UTC)
  • Added CryptoFuture.expiration_utc property which returns a pd.Timestamp tz-aware (UTC)

Breaking Changes

  • Renamed FuturesContract.expiry_date to expiration_ns (and associated params) as uint64_t UNIX nanoseconds
  • Renamed OptionsContract.expiry_date to expiration_ns (and associated params) as uint64_t UNIX nanoseconds
  • Renamed CryptoFuture.expiry_date to expiration_ns (and associated params) as uint64_t UNIX nanoseconds
  • Changed FuturesContract Arrow schema
  • Changed OptionsContract Arrow schema
  • Changed CryptoFuture Arrow schema
  • Transformed orders will now retain the original ts_init timestamp
  • Removed unimplemented batch_more option for Strategy.modify_order
  • Removed InstrumentProvider.venue property (redundant as a provider may have many venues)
  • Dropped support for Python 3.9

Fixes

  • Fixed ParquetDataCatalog file writing template, thanks @limx0
  • Fixed Binance all orders requests which would omit order reports when using a start param
  • Fixed managed GTD orders past expiry cancellation on restart (orders were not being canceled)
  • Fixed managed GTD orders cancel timer on order cancel (timers were not being canceled)
  • Fixed BacktestEngine logging error with immediate stop (caused by certain timestamps being None)
  • Fixed BacktestNode exceptions during backtest runs preventing next sequential run, thanks for reporting @cavan-black
  • Fixed BinanceSpotPersmission value error by relaxing typing for BinanceSpotSymbolInfo.permissions
  • Interactive Brokers adapter various fixes, thanks @rsmb7z

NautilusTrader 1.179.0 Beta

22 Oct 13:35
ef4d72e
Compare
Choose a tag to compare

NautilusTrader 1.179.0 Beta

Released on 22nd October 2023 (UTC).

A major feature of this release is the ParquetDataCatalog version 2, which represents months of
collective effort thanks to contributions from Brad @limx0, @twitu, @ghill2 and @davidsblom.

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

Enhancements

  • Added ParquetDataCatalog v2 supporting built-in data types OrderBookDelta, QuoteTick, TradeTick and Bar
  • Added Strategy specific order and position event handlers
  • Added ExecAlgorithm specific order and position event handlers
  • Added Cache.is_order_pending_cancel_local(...) (tracks local orders in cancel transition)
  • Added BinanceTimeInForce.GTD enum member (futures only)
  • Added Binance Futures support for GTD orders
  • Added Binance internal bar aggregation inference from aggregated trade ticks or 1-MINUTE bars (depending on lookback window)
  • Added BinanceExecClientConfig.use_gtd option (to remap to GTC and locally manage GTD orders)
  • Added package version check for nautilus_ibapi, thanks @rsmb7z
  • Added RiskEngine min/max instrument notional limit checks
  • Added Controller for dynamically controlling actor and strategy instances for a Trader
  • Added ReportProvider.generate_fills_report(...) which provides a row per individual fill event, thanks @r3k4mn14r
  • Moved indicator registration and data handling down to Actor (now available for Actor)
  • Implemented Binance WebSocketClient live subscribe and unsubscribe
  • Implemented BinanceCommonDataClient retries for update_instruments
  • Decythonized Trader

Breaking Changes

  • Renamed BookType.L1_TBBO to BookType.L1_MBP (more accurate definition, as L1 is the top-level price either side)
  • Renamed VenueStatusUpdate -> VenueStatus
  • Renamed InstrumentStatusUpdate -> InstrumentStatus
  • Renamed Actor.subscribe_venue_status_updates(...) to Actor.subscribe_venue_status(...)
  • Renamed Actor.subscribe_instrument_status_updates(...) to Actor.subscribe_instrument_status(...)
  • Renamed Actor.unsubscribe_venue_status_updates(...) to Actor.unsubscribe_venue_status(...)
  • Renamed Actor.unsubscribe_instrument_status_updates(...) to Actor.unsubscribe_instrument_status(...)
  • Renamed Actor.on_venue_status_update(...) to Actor.on_venue_status(...)
  • Renamed Actor.on_instrument_status_update(...) to Actor.on_instrument_status(...)
  • Changed InstrumentStatus fields/schema and constructor
  • Moved manage_gtd_expiry from Strategy.submit_order(...) and Strategy.submit_order_list(...) to StrategyConfig (simpler and allows re-activiting any GTD timers on start)

Fixes

  • Fixed LimitIfTouchedOrder.create (exec_algorithm_params were not being passed in)
  • Fixed OrderEmulator start-up processing of OTO contingent orders (when position from parent is open)
  • Fixed SandboxExecutionClientConfig kw_only=True to allow importing without initializing
  • Fixed OrderBook pickling (did not include all attributes), thanks @limx0
  • Fixed open position snapshots race condition (added open_only flag)
  • Fixed Strategy.cancel_order for orders in INITIALIZED state and with an emulation_trigger (was not sending command to OrderEmulator)
  • Fixed BinanceWebSocketClient reconnect behavior (reconnect handler was not being called due event loop issue from Rust)
  • Fixed Binance instruments missing max notional values, thanks for reporting @AnthonyVince and thanks for fixing @filipmacek
  • Fixed Binance Futures fee rates for backtesting
  • Fixed Timer missing condition check for non-positive intervals
  • Fixed Condition checks involving integers, was previously defaulting to 32-bit and overflowing
  • Fixed ReportProvider.generate_order_fills_report(...) which was missing partial fills for orders not in a final FILLED status, thanks @r3k4mn14r

NautilusTrader 1.178.0 Beta

02 Sep 12:23
ef75e5f
Compare
Choose a tag to compare

NautilusTrader 1.178.0 Beta

Released on 2nd September 2023 (UTC).

Enhancements

None

Breaking Changes

None

Fixes

  • Fixed OrderBookDelta.clear method (where the sequence field was swapped with flags causing an overflow)
  • Fixed OrderManager OTO contingency handling on fills
  • Fixed OrderManager duplicate order canceled events (race condition when processing contingencies)
  • Fixed Cache loading of initialized emulated orders (were not being correctly indexed as emulated)
  • Fixed Binance order book subscriptions for deltas at full depth (was not requesting initial snapshot), thanks for reporting @doublier1

NautilusTrader 1.177.0 Beta

25 Aug 15:55
e658ba6
Compare
Choose a tag to compare

NautilusTrader 1.177.0 Beta

Released on 26th August 2023 (UTC).

This release includes a large breaking change to QuoteTick bid and ask price property and
parameter naming. This was done in the interest of maintaining our generally explicit naming
standards, and has caused confusion for some users in the past. Data using 'bid' and 'ask' columns should
still work with the legacy data wranglers, as columns are renamed under the hood to accommodate
this change.

Enhancements

  • Added ActorExecutor with Actor API for creating and running threaded tasks in live environments
  • Added OrderEmulated event and associated OrderStatus.EMULATED enum variant
  • Added OrderReleased event and associated OrderStatus.RELEASED enum variant
  • Added BacktestVenueConfig.use_position_ids option (default true to retain current behavior)
  • Added Cache.exec_spawn_total_quantity(...) convenience method
  • Added Cache.exec_spawn_total_filled_qty(...) convenience method
  • Added Cache.exec_spawn_total_leaves_qty(...) convenience method
  • Added WebSocketClient.send_text, thanks @twitu
  • Implemented string interning for TimeEvent

Breaking Changes

  • Renamed QuoteTick.bid to bid_price including all associated parameters (for explicit naming standards)
  • Renamed QuoteTick.ask to ask_price including all associated parameters (for explicit naming standards)

Fixes

  • Fixed execution algorithm position_id assignment in HEDGING mode
  • Fixed OrderMatchingEngine processing of emulated orders
  • Fixed OrderEmulator processing of exec algorithm orders
  • Fixed ExecutionEngine processing of exec algorithm orders (exec spawn IDs)
  • Fixed Cache emulated order indexing (were not being properly discarded from the set when closed)
  • Fixed RedisCacheDatabase loading of transformed LIMIT orders
  • Fixed a connection issue with the IB client, thanks @dkharrat and @rsmb7z