Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions tplus/model/order.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from tplus.model.asset_identifier import AssetIdentifier
from tplus.model.limit_order import LimitOrderDetails
from tplus.model.market_order import MarketOrderDetails
from tplus.model.order_trigger import TriggerAbove, TriggerBelow
from tplus.model.order_trigger import OrderTrigger
from tplus.model.types import UserPublicKey

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -68,7 +68,7 @@ class Order(BaseModel):
book_quantity_decimals: int
details: LimitOrderDetails | MarketOrderDetails
side: Side
trigger: TriggerAbove | TriggerBelow | None = None
trigger: OrderTrigger | None = None
creation_timestamp_ns: int
canceled: bool = False
target: TradeTarget = TradeTarget.margin_account_spot_trade()
Expand Down Expand Up @@ -109,6 +109,7 @@ class OrderResponse(BaseModel):
trigger_above_price: Decimal | None
trigger_below_price: Decimal | None
trigger_touched: bool | None = None
parent_id: str | None = None
last_update_timestamp_ns: int | None
is_immediate_or_cancel: bool | None = None
is_fill_or_kill: bool | None = None
Expand Down
14 changes: 14 additions & 0 deletions tplus/model/order_trigger.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,17 @@ def serialize_model(self) -> dict[str, dict[str, Any]]:
"price": self.price,
}
return {"PriceBelow": data}


class OrderTrigger(BaseModel):
parent_order_id: str | None
trigger: TriggerAbove | TriggerBelow

@model_serializer
def serialize_model(self) -> dict[str, dict[str, Any] | str]:
if self.parent_order_id is not None:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is exclude_none=True kwarg on model dump, just as fyi
also can simplify this

data = {"trigger": self.trigger.serialize_model()}
if self.parent_order_id is not None:
    data["parent_order_id"] = self.parent_order_id

return {
"parent_order_id": self.parent_order_id,
"trigger": self.trigger.serialize_model(),
}
return {"trigger": self.trigger.serialize_model()}
4 changes: 2 additions & 2 deletions tplus/utils/limit_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from tplus.model.asset_identifier import AssetIdentifier
from tplus.model.limit_order import GTC, GTD, IOC, LimitOrderDetails
from tplus.model.order import CreateOrderRequest, Order, Side, TradeTarget
from tplus.model.order_trigger import TriggerAbove, TriggerBelow
from tplus.model.order_trigger import OrderTrigger
from tplus.utils.user import User


Expand All @@ -17,7 +17,7 @@ def create_limit_order_ob_request_payload(
asset_identifier: AssetIdentifier,
order_id: str,
time_in_force: GTC | GTD | IOC | None = None,
trigger: TriggerAbove | TriggerBelow | None = None,
trigger: OrderTrigger | None = None,
target: TradeTarget | None = None,
) -> CreateOrderRequest:
side_normalized = Side.SELL if side.lower() == "sell" else Side.BUY
Expand Down
4 changes: 2 additions & 2 deletions tplus/utils/market_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
MarketQuoteQuantity,
)
from tplus.model.order import CreateOrderRequest, Order, Side, TradeTarget
from tplus.model.order_trigger import TriggerAbove, TriggerBelow
from tplus.model.order_trigger import OrderTrigger
from tplus.utils.user import User


Expand All @@ -22,7 +22,7 @@ def create_market_order_ob_request_payload(
base_quantity: MarketBaseQuantity | None = None,
quote_quantity: MarketQuoteQuantity | None = None,
fill_or_kill: bool = False,
trigger: TriggerAbove | TriggerBelow | None = None,
trigger: OrderTrigger | None = None,
target: TradeTarget | None = None,
) -> CreateOrderRequest:
side_normalized = Side.SELL if side.lower() == "sell" else Side.BUY
Expand Down