v13.0.0
What's Changed
-
Better typing for order placement and response classes by @Graeme22 in #342, fixes #337
Introduces dedicated order classes per order type and uses them to overloadplace_order,place_complex_order, andreplace_orderfor more precise return types. Previously every response came back asPlacedOrder/PlacedComplexOrderwith many fields optional, forcing users to null-check fields that were always present for their order type.New order helpers:
- Simple orders:
LimitOrder,MarketOrder,StopOrder,StopLimitOrder,NotionalOrder - Complex orders:
OCOOrder,OTOOrder,OTOCOOrder
New response models:
PlacedOrderResponseandPlacedComplexOrderResponseare now generic over order type (so placing aLimitOrderreturnsPlacedOrderResponse[PlacedLimitOrder]where price is of typeDecimalinstead ofDecimal | Noneas before).- Dry runs now return
UnplacedOrder/UnplacedComplexOrder, which have noidfield, replacing the old sentinelid = -1. PlacedOCOOrder/PlacedOTOCOOrderexposetake_profit/stop_lossproperties to ease distinguishing orders in the response model.
Breaking changes:
- Order
price_effect/value_effectfields replaced with a single wrap serializer that parses the sign out of price/value at serialization time. MarketData.markis now optional (see #337)- Dry runs return
UnplacedOrder(which has noidfield) instead ofid = -1. PlacedComplexOrder.typeis nowComplexOrderTypeinstead of a simple string.
Code that previously looked like this:
order = NewOrder(order_type=OrderType.LIMIT, legs=[leg], price=Decimal('-10')) response = await account.place_order(session, order, dry_run=False) reveal_type(response.order.price) # Decimal | None
Becomes:
order = LimitOrder(legs=[leg], price=Decimal('-10')) response = await account.place_order(session, order, dry_run=False) reveal_type(response.order.price) # Decimal
This allows for inferring all sorts of useful fields, eg
stop_triggerfor aPlacedStopOrder,trigger_orderfor aPlacedOTOCO, noidfor anUnplacedOrder(dry run). - Simple orders:
-
Remove deprecated
ssl_contextparameter fromDXLinkStreamer(can passverify=TruetoSession.client_kwargsinstead)
Full Changelog: v12.4.3...v13.0.0