Skip to content

Commit 9d09e96

Browse files
authored
Release 1.185.0
See release notes.
2 parents a79c2bb + 15b3a4c commit 9d09e96

File tree

256 files changed

+3254
-2791
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

256 files changed

+3254
-2791
lines changed

RELEASES.md

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
1+
# NautilusTrader 1.185.0 Beta
2+
3+
Released on 26th January 2024 (UTC).
4+
5+
### Enhancements
6+
- Add warning log when `bypass_logging` is set true for a `LIVE` context
7+
- Improved `register_serializable object` to also add type to internal `_EXTERNAL_PUBLIHSABLE_TYPES`
8+
- Improved Interactive Brokers expiration contract parsing, thanks @fhill2
9+
10+
### Breaking Changes
11+
- Changed `StreamingConfig.include_types` type from `tuple[str]` to `list[type]` (better alignment with other type filters)
12+
- Consolidated `clock` module into `component` module (reduce binary wheel size)
13+
- Consolidated `logging` module into `component` module (reduce binary wheel size)
14+
15+
### Fixes
16+
- Fixed Arrow serialization of `OrderUpdated` (`trigger_price` type was incorrect), thanks @benjaminsingleton
17+
- Fixed `StreamingConfig.include_types` behavior (was not being honored for instrument writers), thanks for reporting @doublier1
18+
- Fixed `ImportableStrategyConfig` type assignment in `StrategyFactory` (#1470), thanks @rsmb7z
19+
20+
---
21+
122
# NautilusTrader 1.184.0 Beta
223

324
Released on 22nd January 2024 (UTC).
@@ -478,7 +499,7 @@ Released on 30th April 2023 (UTC).
478499
- Defined public API for instruments, can now import directly from `nautilus_trader.model.instruments` (denest namespace)
479500
- Defined public API for orders, can now import directly from `nautilus_trader.model.orders` (denest namespace)
480501
- Defined public API for order book, can now import directly from `nautilus_trader.model.orderbook` (denest namespace)
481-
- Now stripping debug symbols after build (reduced binary sizes)
502+
- Now stripping debug symbols after build (reduced binary wheel size)
482503
- Refined build and added additional `debug` Makefile convenience targets
483504

484505
### Fixes

docs/api_reference/common.md

-20
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,6 @@
1212
:member-order: bysource
1313
```
1414

15-
## Clock
16-
17-
```{eval-rst}
18-
.. automodule:: nautilus_trader.common.clock
19-
:show-inheritance:
20-
:inherited-members:
21-
:members:
22-
:member-order: bysource
23-
```
24-
2515
## Component
2616

2717
```{eval-rst}
@@ -60,16 +50,6 @@
6050
:member-order: bysource
6151
```
6252

63-
## Logging
64-
65-
```{eval-rst}
66-
.. automodule:: nautilus_trader.common.logging
67-
:show-inheritance:
68-
:inherited-members:
69-
:members:
70-
:member-order: bysource
71-
```
72-
7353
```{eval-rst}
7454
.. automodule:: nautilus_trader.common.providers
7555
:show-inheritance:

docs/concepts/adapters.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Here is an example of discovering the current instruments for the Binance Future
2727
from nautilus_trader.adapters.binance.common.enums import BinanceAccountType
2828
from nautilus_trader.adapters.binance.factories import get_cached_binance_http_client
2929
from nautilus_trader.adapters.binance.futures.providers import BinanceFuturesInstrumentProvider
30-
from nautilus_trader.common.clock import LiveClock
30+
from nautilus_trader.common.component import LiveClock
3131

3232

3333
clock = LiveClock()

docs/concepts/execution.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,8 @@ determine how a primary order is split into a series of spawned orders.
109109
```python
110110
# Configure your strategy
111111
config = EMACrossTWAPConfig(
112-
instrument_id=str(ETHUSDT_BINANCE.id),
113-
bar_type="ETHUSDT.BINANCE-250-TICK-LAST-INTERNAL",
112+
instrument_id=ETHUSDT_BINANCE.id,
113+
bar_type=BarType.from_str("ETHUSDT.BINANCE-250-TICK-LAST-INTERNAL"),
114114
trade_size=Decimal("0.05"),
115115
fast_ema_period=10,
116116
slow_ema_period=20,

docs/concepts/logging.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ It's possible to use `Logger` objects directly, and these can be initialized any
106106
If you ***aren't*** using an object which already initializes a `NautilusKernel` (and logging) such as `BacktestEngine` or `TradingNode`,
107107
then you can initialize a logging in the following way:
108108
```python
109-
from nautilus_trader.common.logging import init_logging
110-
from nautilus_trader.common.logging import Logger
109+
from nautilus_trader.common.component import init_logging
110+
from nautilus_trader.common.component import Logger
111111

112112
init_logging()
113113
logger = Logger("MyLogger")

docs/concepts/message_bus.md

+36-24
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,14 @@ your `TradingNodeConfig`. Each of these config options will be described below.
7777
message_bus=MessageBusConfig(
7878
database=DatabaseConfig(),
7979
encoding="json",
80-
stream="streams",
81-
use_instance_id=False,
8280
timestamps_as_iso8601=True,
83-
types_filter=[QuoteTick, TradeTick],
81+
buffer_interval_ms=100,
8482
autotrim_mins=30,
83+
use_trader_prefix=True,
84+
use_trader_id=True,
85+
use_instance_id=False,
86+
streams_prefix="streams",
87+
types_filter=[QuoteTick, TradeTick],
8588
)
8689
...
8790
```
@@ -90,27 +93,6 @@ message_bus=MessageBusConfig(
9093
A `DatabaseConfig` must be provided, for a default Redis setup on the local
9194
loopback you can pass a `DatabaseConfig()`, which will use defaults to match.
9295

93-
### Trader keys
94-
95-
Trader keys are essential for identifying individual trader nodes and organizing messages within streams.
96-
They can be tailored to meet your specific requirements and use cases. In the context of message bus streams, a trader key is typically structured as follows:
97-
98-
```
99-
{stream}:{trader_id}:{instance_id}
100-
```
101-
102-
The following options are available for configuring trader keys:
103-
104-
#### Stream
105-
The `stream` string allows you to group all streams for a single trader instance, or organize messages related to a group of trader instances.
106-
By configuring this grouping behavior, pass a string to the `stream` configuration option.
107-
108-
#### Instance ID
109-
110-
Each trader node is assigned a unique 'instance ID,' which is a UUIDv4. This instance ID helps distinguish individual traders when messages
111-
are distributed across multiple streams. You can include the instance ID in the trader key by setting the `use_instance_id` configuration option to `True`.
112-
This is particularly useful when you need to track and identify traders across various streams in a multi-node trading system.
113-
11496
### Encoding
11597

11698
Two encodings are currently supported by the built-in `Serializer` used by the `MessageBus`:
@@ -129,6 +111,36 @@ It's recommended to use `json` encoding for human readability when performance i
129111
By default timestamps are formatted as UNIX epoch nanosecond integers. Alternatively you can
130112
configure ISO 8601 string formatting by setting the `timestamps_as_iso8601` to `True`.
131113

114+
### Message stream keys
115+
116+
Message stream keys are essential for identifying individual trader nodes and organizing messages within streams.
117+
They can be tailored to meet your specific requirements and use cases. In the context of message bus streams, a trader key is typically structured as follows:
118+
119+
```
120+
trader:{trader_id}:{instance_id}:{streams_prefix}
121+
```
122+
123+
The following options are available for configuring message stream keys:
124+
125+
#### Trader prefix
126+
127+
If the key should begin with the `trader` string.
128+
129+
#### Trader ID
130+
131+
If the key should include the trader ID for the node.
132+
133+
#### Instance ID
134+
135+
Each trader node is assigned a unique 'instance ID,' which is a UUIDv4. This instance ID helps distinguish individual traders when messages
136+
are distributed across multiple streams. You can include the instance ID in the trader key by setting the `use_instance_id` configuration option to `True`.
137+
This is particularly useful when you need to track and identify traders across various streams in a multi-node trading system.
138+
139+
#### Streams prefix
140+
141+
The `streams_prefix` string allows you to group all streams for a single trader instance, or organize messages related to a group of trader instances.
142+
By configuring this grouping behavior, pass a string to the `streams_prefix` configuration option (with other prefixes false).
143+
132144
### Types filtering
133145

134146
When messages are published on the message bus, they are serialized and written to a stream, provided that a backing for the message bus has been configured and enabled.

docs/tutorials/backtest_low_level.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ from nautilus_trader.model.currencies import ETH
2929
from nautilus_trader.model.currencies import USDT
3030
from nautilus_trader.model.enums import AccountType
3131
from nautilus_trader.model.enums import OmsType
32+
from nautilus_trader.model.identifiers import TraderId
3233
from nautilus_trader.model.identifiers import Venue
3334
from nautilus_trader.model.objects import Money
3435
from nautilus_trader.persistence.wranglers import TradeTickDataWrangler
@@ -72,7 +73,7 @@ to show the general configuration pattern:
7273

7374
```python
7475
# Configure backtest engine
75-
config = BacktestEngineConfig(trader_id="BACKTESTER-001")
76+
config = BacktestEngineConfig(trader_id=TraderId("BACKTESTER-001"))
7677

7778
# Build the backtest engine
7879
engine = BacktestEngine(config=config)
@@ -135,8 +136,8 @@ Firstly, initialize a strategy configuration, then use this to initialize a stra
135136

136137
# Configure your strategy
137138
strategy_config = EMACrossTWAPConfig(
138-
instrument_id=str(ETHUSDT_BINANCE.id),
139-
bar_type="ETHUSDT.BINANCE-250-TICK-LAST-INTERNAL",
139+
instrument_id=ETHUSDT_BINANCE.id,
140+
bar_type=BarType.from_str("ETHUSDT.BINANCE-250-TICK-LAST-INTERNAL"),
140141
trade_size=Decimal("0.10"),
141142
fast_ema_period=10,
142143
slow_ema_period=20,

examples/backtest/betfair_backtest_orderbook_imbalance.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,15 @@
3030
from nautilus_trader.model.enums import BookType
3131
from nautilus_trader.model.enums import OmsType
3232
from nautilus_trader.model.identifiers import ClientId
33+
from nautilus_trader.model.identifiers import TraderId
3334
from nautilus_trader.model.objects import Money
3435
from tests.integration_tests.adapters.betfair.test_kit import BetfairDataProvider
3536
from tests.integration_tests.adapters.betfair.test_kit import betting_instrument
3637

3738

3839
if __name__ == "__main__":
3940
# Configure backtest engine
40-
config = BacktestEngineConfig(trader_id="BACKTESTER-001")
41+
config = BacktestEngineConfig(trader_id=TraderId("BACKTESTER-001"))
4142

4243
# Build the backtest engine
4344
engine = BacktestEngine(config=config)

examples/backtest/crypto_ema_cross_ethusdt_trailing_stop.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from nautilus_trader.model.data import BarType
2929
from nautilus_trader.model.enums import AccountType
3030
from nautilus_trader.model.enums import OmsType
31+
from nautilus_trader.model.identifiers import TraderId
3132
from nautilus_trader.model.identifiers import Venue
3233
from nautilus_trader.model.objects import Money
3334
from nautilus_trader.persistence.wranglers import TradeTickDataWrangler
@@ -37,7 +38,7 @@
3738

3839
if __name__ == "__main__":
3940
# Configure backtest engine
40-
config = BacktestEngineConfig(trader_id="BACKTESTER-001")
41+
config = BacktestEngineConfig(trader_id=TraderId("BACKTESTER-001"))
4142

4243
# Build the backtest engine
4344
engine = BacktestEngine(config=config)

examples/backtest/crypto_ema_cross_with_binance_provider.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from nautilus_trader.adapters.binance.futures.providers import BinanceFuturesInstrumentProvider
2626
from nautilus_trader.backtest.engine import BacktestEngine
2727
from nautilus_trader.backtest.engine import BacktestEngineConfig
28-
from nautilus_trader.common.clock import LiveClock
28+
from nautilus_trader.common.component import LiveClock
2929
from nautilus_trader.config import InstrumentProviderConfig
3030
from nautilus_trader.config import LoggingConfig
3131
from nautilus_trader.examples.strategies.ema_cross_trailing_stop import EMACrossTrailingStop
@@ -35,6 +35,7 @@
3535
from nautilus_trader.model.enums import OmsType
3636
from nautilus_trader.model.identifiers import InstrumentId
3737
from nautilus_trader.model.identifiers import Symbol
38+
from nautilus_trader.model.identifiers import TraderId
3839
from nautilus_trader.model.identifiers import Venue
3940
from nautilus_trader.model.objects import Money
4041
from nautilus_trader.persistence.wranglers import QuoteTickDataWrangler
@@ -66,7 +67,7 @@ async def create_provider():
6667
if __name__ == "__main__":
6768
# Configure backtest engine
6869
config = BacktestEngineConfig(
69-
trader_id="BACKTESTER-001",
70+
trader_id=TraderId("BACKTESTER-001"),
7071
logging=LoggingConfig(log_level="INFO"),
7172
)
7273

examples/backtest/crypto_orderbook_imbalance.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from nautilus_trader.model.enums import BookType
3131
from nautilus_trader.model.enums import OmsType
3232
from nautilus_trader.model.enums import book_type_to_str
33+
from nautilus_trader.model.identifiers import TraderId
3334
from nautilus_trader.model.identifiers import Venue
3435
from nautilus_trader.model.objects import Money
3536
from nautilus_trader.persistence.loaders import BinanceOrderBookDeltaDataLoader
@@ -40,7 +41,7 @@
4041
if __name__ == "__main__":
4142
# Configure backtest engine
4243
config = BacktestEngineConfig(
43-
trader_id="BACKTESTER-001",
44+
trader_id=TraderId("BACKTESTER-001"),
4445
# logging=LoggingConfig(log_level="DEBUG"),
4546
)
4647

examples/backtest/fx_ema_cross_audusd_bars_from_ticks.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from nautilus_trader.model.data import BarType
3030
from nautilus_trader.model.enums import AccountType
3131
from nautilus_trader.model.enums import OmsType
32+
from nautilus_trader.model.identifiers import TraderId
3233
from nautilus_trader.model.identifiers import Venue
3334
from nautilus_trader.model.objects import Money
3435
from nautilus_trader.persistence.wranglers import QuoteTickDataWrangler
@@ -39,7 +40,7 @@
3940
if __name__ == "__main__":
4041
# Configure backtest engine
4142
config = BacktestEngineConfig(
42-
trader_id="BACKTESTER-001",
43+
trader_id=TraderId("BACKTESTER-001"),
4344
)
4445

4546
# Build the backtest engine

examples/backtest/fx_ema_cross_audusd_ticks.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from nautilus_trader.model.data import BarType
3131
from nautilus_trader.model.enums import AccountType
3232
from nautilus_trader.model.enums import OmsType
33+
from nautilus_trader.model.identifiers import TraderId
3334
from nautilus_trader.model.identifiers import Venue
3435
from nautilus_trader.model.objects import Money
3536
from nautilus_trader.persistence.wranglers import QuoteTickDataWrangler
@@ -40,7 +41,7 @@
4041
if __name__ == "__main__":
4142
# Configure backtest engine
4243
config = BacktestEngineConfig(
43-
trader_id="BACKTESTER-001",
44+
trader_id=TraderId("BACKTESTER-001"),
4445
)
4546

4647
# Build the backtest engine

examples/backtest/fx_ema_cross_bracket_gbpusd_bars_external.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from nautilus_trader.model.data import BarType
3333
from nautilus_trader.model.enums import AccountType
3434
from nautilus_trader.model.enums import OmsType
35+
from nautilus_trader.model.identifiers import TraderId
3536
from nautilus_trader.model.identifiers import Venue
3637
from nautilus_trader.model.objects import Money
3738
from nautilus_trader.persistence.wranglers import BarDataWrangler
@@ -42,7 +43,7 @@
4243
if __name__ == "__main__":
4344
# Configure backtest engine
4445
config = BacktestEngineConfig(
45-
trader_id="BACKTESTER-001",
46+
trader_id=TraderId("BACKTESTER-001"),
4647
logging=LoggingConfig(log_level="INFO"),
4748
risk_engine=RiskEngineConfig(
4849
bypass=True, # Example of bypassing pre-trade risk checks for backtests

examples/backtest/fx_ema_cross_bracket_gbpusd_bars_internal.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
from nautilus_trader.model.data import BarType
3333
from nautilus_trader.model.enums import AccountType
3434
from nautilus_trader.model.enums import OmsType
35+
from nautilus_trader.model.identifiers import TraderId
3536
from nautilus_trader.model.identifiers import Venue
3637
from nautilus_trader.model.objects import Money
3738
from nautilus_trader.persistence.wranglers import QuoteTickDataWrangler
@@ -42,7 +43,7 @@
4243
if __name__ == "__main__":
4344
# Configure backtest engine
4445
config = BacktestEngineConfig(
45-
trader_id="BACKTESTER-001",
46+
trader_id=TraderId("BACKTESTER-001"),
4647
logging=LoggingConfig(log_level="INFO"),
4748
risk_engine=RiskEngineConfig(
4849
bypass=True, # Example of bypassing pre-trade risk checks for backtests

examples/backtest/fx_market_maker_gbpusd_bars.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from nautilus_trader.model.data import BarType
3232
from nautilus_trader.model.enums import AccountType
3333
from nautilus_trader.model.enums import OmsType
34+
from nautilus_trader.model.identifiers import TraderId
3435
from nautilus_trader.model.identifiers import Venue
3536
from nautilus_trader.model.objects import Money
3637
from nautilus_trader.persistence.wranglers import QuoteTickDataWrangler
@@ -41,7 +42,7 @@
4142
if __name__ == "__main__":
4243
# Configure backtest engine
4344
config = BacktestEngineConfig(
44-
trader_id="BACKTESTER-001",
45+
trader_id=TraderId("BACKTESTER-001"),
4546
)
4647

4748
# Build the backtest engine

examples/backtest/fx_talib_gbpusd_bars_internal.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
from nautilus_trader.model.data import BarType
3030
from nautilus_trader.model.enums import AccountType
3131
from nautilus_trader.model.enums import OmsType
32+
from nautilus_trader.model.identifiers import TraderId
3233
from nautilus_trader.model.identifiers import Venue
3334
from nautilus_trader.model.objects import Money
3435
from nautilus_trader.persistence.wranglers import QuoteTickDataWrangler
@@ -39,7 +40,7 @@
3940
if __name__ == "__main__":
4041
# Configure backtest engine
4142
config = BacktestEngineConfig(
42-
trader_id="BACKTESTER-001",
43+
trader_id=TraderId("BACKTESTER-001"),
4344
logging=LoggingConfig(log_level="INFO"),
4445
risk_engine=RiskEngineConfig(
4546
bypass=True, # Example of bypassing pre-trade risk checks for backtests

examples/live/betfair/betfair.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
from nautilus_trader.adapters.betfair.factories import get_cached_betfair_client
2626
from nautilus_trader.adapters.betfair.factories import get_cached_betfair_instrument_provider
2727
from nautilus_trader.adapters.betfair.providers import BetfairInstrumentProviderConfig
28-
from nautilus_trader.common.logging import init_logging
29-
from nautilus_trader.common.logging import log_level_from_str
28+
from nautilus_trader.common.component import init_logging
29+
from nautilus_trader.common.component import log_level_from_str
3030
from nautilus_trader.config import LoggingConfig
3131
from nautilus_trader.config import TradingNodeConfig
3232
from nautilus_trader.examples.strategies.orderbook_imbalance import OrderBookImbalance

0 commit comments

Comments
 (0)