Skip to content

Releases: nautechsystems/nautilus_trader

NautilusTrader 1.188.0 Beta

25 Feb 11:37
92aee66
Compare
Choose a tag to compare

NautilusTrader 1.188.0 Beta

Released on 25th February 2024 (UTC).

Enhancements

  • Added FuturesSpread instrument type
  • Added OptionsSpread instrument type
  • Added InstrumentClass.FUTURE_SPREAD
  • Added InstrumentClass.OPTION_SPREAD
  • Added managed parameter to subscribe_order_book_deltas, default true to retain current behavior (if false then the data engine will not automatically manage a book)
  • Added managed parameter to subscribe_order_book_snapshots, default true to retain current behavior (if false then the data engine will not automatically manage a book)
  • Added additional validations for OrderMatchingEngine (will now reject orders with incorrect price or quantity precisions)
  • Removed interval_ms 20 millisecond limitation for subscribe_order_book_snapshots (i.e. just needs to be positive), although we recommend you consider subscribing to deltas below 100 milliseconds
  • Ported LiveClock and LiveTimer implementations to Rust
  • Implemented OrderBookDeltas pickling
  • Implemented AverageTrueRange in Rust, thanks @rsmb7z

Breaking Changes

  • Changed TradeId value maximum length to 36 characters (will raise a ValueError if value exceeds the maximum)

Fixes

  • Fixed TradeId memory leak due assigning unique values to the Ustr global string cache (which are never freed for the lifetime of the program)
  • Fixed TradeTick size precision for pyo3 conversion (size precision was incorrectly price precision)
  • Fixed RiskEngine cash value check when selling (would previously divide quantity by price which is too much), thanks for reporting@AnthonyVince
  • Fixed FOK time in force behavior (allows fills beyond the top level, will cancel if cannot fill full size)
  • Fixed IOC time in force behavior (allows fills beyond the top level, will cancel any remaining after all fills are applied)
  • Fixed LiveClock timer behavior for small intervals causing next time to be less than now (timer then would not run)
  • Fixed log level filtering for log_level_file (bug introduced in v1.187.0), thanks @twitu
  • Fixed logging print_config config option (was not being passed through to the logging system)
  • Fixed logging timestamps for backtesting (static clock was not being incrementally set to individual TimeEvent timestamps)
  • Fixed account balance updates (fills from zero quantity NETTING positions will generate account balance updates)
  • Fixed MessageBus publishable types collection type (needed to be tuple not set)
  • Fixed Controller registration of components to ensure all active clocks are iterated correctly during backtests
  • Fixed Equity short selling for CASH accounts (will now reject)
  • Fixed ActorFactory.create JSON encoding (was missing the encoding hook)
  • Fixed ImportableConfig.create JSON encoding (was missing the encoding hook)
  • Fixed ImportableStrategyConfig.create JSON encoding (was missing the encoding hook)
  • Fixed ExecAlgorithmFactory.create JSON encoding (was missing the encoding hook)
  • Fixed ControllerConfig base class and docstring
  • Fixed Interactive Brokers historical bar data bug, thanks @benjaminsingleton
  • Fixed persistence freeze_dict function to handle fs_storage_options, thanks @dimitar-petrov

NautilusTrader 1.187.0 Beta

09 Feb 12:15
61debf2
Compare
Choose a tag to compare

NautilusTrader 1.187.0 Beta

Released on 9th February 2024 (UTC).

Enhancements

  • Refined logging system module and writers in Rust, thanks @ayush-sb and @twitu
  • Improved Interactive Brokers adapter symbology and parsing with a strict_symbology option, thanks @rsmb7z and @fhill2

Breaking Changes

  • Reorganized configuration objects (separated into a config module per subpackage, with re-exports from nautilus_trader.config)

Fixes

  • Fixed BacktestEngine and Trader disposal (now properly releasing resources), thanks for reporting @davidsblom
  • Fixed circular import issues from configuration objects, thanks for reporting @cuberone
  • Fixed unnecessary creation of log files when file logging off

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