The major thrust of this release is added support for order book data in
backtests. The SimulatedExchange
now maintains order books of each instrument
and will accurately simulate market impact with L2/L3 data. For quote and trade
tick data a L1 order book is used as a proxy. A future release will include
improved fill modelling assumptions and customizations.
OrderBook.create
now takesInstrument
andOrderBookLevel
.
SimulatedExchange
now maintains order books internally.LiveLogger
now exhibits better blocking behavior and logging.
- Various patches to the
Betfair
adapter. - Documentation builds.
Announcing official Windows 64-bit support.
Several bugs have been identified and fixed.
None
- Performance test refactoring.
- Remove redundant performance harness.
- Add
Queue.peek()
to high-performance queue. - GitHub action refactoring, CI for Windows.
- Builds for 32-bit platforms.
OrderBook.create
forOrderBookLevel.L3
now returns correct book.- Betfair handling of execution IDs.
This release includes substantial breaking changes.
Further fundamental changes to the core API have been made.
- Introduce
ClientId
for data and execution client identification. - Standardize client IDs to upper case.
- Rename
OrderBookOperation
toOrderBookDelta
. - Rename
OrderBookOperations
toOrderBookDeltas
. - Rename
OrderBookOperationType
toOrderBookDeltaType
.
None
None
This release includes substantial breaking changes.
Due to recent feedback and much further thought - a major renaming has been carried
out involving order identifiers. The Order
is the only domain object in the
model which is identified with more than one ID. Due to this, more explicitness
helps to ensure correct logic. Previously the OrderId
was
implicitly assumed to be the one assigned by the trading venue. This has been
clarified by renaming the identifier to VenueOrderId
. Following this, it no
longer made sense to refer to it through Order.id
, and so this was changed to
its full name Order.venue_order_id
. This naturally resulted in ClientOrderId
(s)
being renamed in properties and variables from cl_ord_id
to client_order_id
.
- Rename
OrderId
toVenueOrderId
. - Rename
Order.id
toOrder.venue_order_id
. - Rename
Order.cl_ord_id
toOrder.client_order_id
. - Rename
AssetClass.STOCK
toAssetClass.EQUITY
. - Remove redundant flag
generate_position_ids
(handled byOMSType
).
- Introduce integration for Betfair.
- Add
AssetClass.METAL
andAssetClass.ENERGY
. - Add
VenueStatusEvent
,InstrumentStatusEvent
andInstrumentClosePrice
. - Usage of
np.ndarray
to improve function and indicator performance.
- LiveLogger log message when blocking.
This release includes substantial breaking changes.
Further standardization of naming conventions along with internal refinements and fixes.
- Rename
AmendOrder
toUpdateOrder
. - Rename
OrderAmended
toOrderUpdated
. - Rename
amend
andamended
related methods toupdate
andupdated
. - Rename
OrderCancelReject
toOrderCancelRejected
(standardize tense).
- Improve efficiency of data wrangling.
- Simplify
Logger
and general system logging. - Add
stdout
andstderr
log streams with configuration. - Add
OrderBookData
base class.
- Backtest handling of
GenericData
andOrderBook
related data. - Backtest
DataClient
creation logic prevented client registering.
This release includes substantial breaking changes.
Further standardization of naming conventions along with internal refinements and fixes.
- Rename
AmendOrder
toUpdateOrder
. - Rename
OrderAmended
toOrderUpdated
. - Rename
amend
andamended
related methods toupdate
andupdated
. - Rename
OrderCancelReject
toOrderCancelRejected
(standardize tense).
- Introduce
OrderUpdateRejected
, event separated for clarity. - Refined LiveLogger: Now runs on event loop with high-performance
Queue
. - Improved flexibility of when strategies are added to a
BacktestEngine
. - Improved checks for
VenueOrderId
equality when applying order events.
- Removed
UNDEFINED
enum values. Do not allow invalid values to be represented in the system (prefer throwing exceptions).
This release includes substantial breaking changes.
The platforms internal timestamping has been standardized to nanoseconds. This
decision was made to increase the accuracy of backtests to nanosecond precision,
improve data handling including order book and custom data for backtesting, and
to future-proof the platform to a more professional standard. The top-level user
API still takes datetime
and timedelta
objects for usability.
There has also been some standardization of naming conventions to align more closely with established financial market terminology with reference to the FIX5.0 SP2 specification, and CME MDP 3.0.
- Move
BarType
intoBar
as a property. - Change signature of
Bar
handling methods due to above. - Remove
Instrument.leverage
(incorrect place for concept). - Change
ExecutionClient.venue
as aVenue
toExecutionClient.name
as astr
. - Change serialization of timestamp datatype to
int64
. - Extensive changes to serialization constant names.
- Rename
OrderFilled.filled_qty
toOrderFilled.last_qty
. - Rename
OrderFilled.filled_price
toOrderFilled.last_px
. - Rename
avg_price
toavg_px
in methods and properties. - Rename
avg_open
toavg_px_open
in methods and properties. - Rename
avg_close
toavg_px_close
in methods and properties. - Rename
Position.relative_quantity
toPosition.relative_qty
. - Rename
Position.peak_quantity
toPosition.peak_qty
.
- Standardize nanosecond timestamps.
- Add time unit conversion functions as found in
nautilus_trader.core.datetime
. - Add optional
broker
property toVenue
to assist with routing. - Enhance state reconciliation from both
LiveExecutionEngine
andLiveExecutionClient
. - Add internal messages to aid state reconciliation.
DataCache
incorrectly caching bars.
This release adds further enhancements to the platform.
None
RiskEngine
built out including configuration options hook andLiveRiskEngine
implementation.- Add generic
Throttler
. - Add details
dict
toinstrument_id
related requests to cover IB futures contracts. - Add missing Fiat currencies.
- Add additional Crypto currencies.
- Add ISO 4217 codes.
- Add currency names.
- Queue
put
coroutines in live engines when blocking atmaxlen
was not creating a task on the event loop.
This release applies one more major change to the identifier API. Security
has
been renamed to InstrumentId
for greater clarity that the object is an identifier,
and to group the concept of an instrument with its identifier.
Data objects in the framework have been further abstracted to prepare for the handling of custom data in backtests.
A RiskEngine
base class has also been scaffolded.
Security
renamed toInstrumentId
.Instrument.security
renamed toInstrument.id
.Data
becomes an abstract base class withtimestamp
andunix_timestamp
properties.Data
andDataType
moved tomodel.data
.on_data
methods now takeGenericData
.
- Add
GenericData
. - Add
Future
instrument.
None
The main thrust of this release is to refine and further bed down the changes
to the identifier model via InstrumentId
, and fix some bugs.
Errors in the CCXT clients caused by the last release have been addressed.
InstrumentId
now takes first class value objectSymbol
.InstrumentId
asset_class
andasset_type
no longer optional.SimulatedExchange.venue
changed toSimulatedExchange.id
.
- Ensure
TestTimer
advances monotonically increase. - Add
AssetClass.BETTING
.
- CCXT data and execution clients regarding
instrument_id
vssymbol
naming. InstrumentId
equality and hashing.- Various docstrings.
This release executes a major refactoring of Symbol
and how securities are
generally identified within the platform. This will allow a smoother integration
with Interactive Brokers and other exchanges, brokerages and trading
counterparties.
Previously the Symbol
identifier also included a venue which confused the concept.
The replacement Security
identifier more clearly expresses the domain with a
symbol string, a primary Venue
, AssetClass
and AssetType
properties.
- All previous serializations.
Security
replacesSymbol
with expanded properties.AssetClass.EQUITY
changed toAssetClass.STOCK
.from_serializable_string
changed tofrom_serializable_str
.to_serializable_string
changed toto_serializable_str
.
- Reports now include full instrument_id name.
- Add
AssetType.WARRANT
.
StopLimitOrder
serialization.
This is a patch release which applies various fixes and refactorings.
The behaviour of the StopLimitOrder
continued to be fixed and refined.
SimulatedExchange
was refactored further to reduce complexity.
None
None
TRIGGERED
states in order FSM.StopLimitOrder
triggering behaviour.OrderFactory.stop_limit
missingpost_only
andhidden
.Order
andStopLimitOrder
__repr__
string (duplicate id).
The main thrust of this release is to refine some subtleties relating to order
matching and amendment behaviour for improved realism. This involved a fairly substantial refactoring
of SimulatedExchange
to manage its complexity, and support extending the order types.
The post_only
flag for LIMIT orders now results in the expected behaviour regarding
when a marketable limit order will become a liquidity TAKER
during order placement
and amendment.
Test coverage was moderately increased.
None
- Refactored
SimulatedExchange
order matching and amendment logic. - Add
risk
subpackage to group risk components.
StopLimitOrder
triggering behaviour.- All flake8 warnings.
The main thrust of this release is to introduce the Interactive Brokers integration, and begin adding platform capabilities to support this effort.
from_serializable_string
methods changed tofrom_serializable_str
.
- Scaffold Interactive Brokers integration in
adapters/ib
. - Add the
Future
instrument type. - Add the
StopLimitOrder
order type. - Add the
Data
andDataType
types to support custom data handling. - Add the
InstrumentId
identifier types initial implementation to support extending the platforms capabilities.
BracketOrder
correctness.- CCXT precision parsing bug.
- Some log formatting.