diff --git a/tplus/model/order.py b/tplus/model/order.py index 204fe36..2dfd03f 100644 --- a/tplus/model/order.py +++ b/tplus/model/order.py @@ -72,6 +72,7 @@ class Order(BaseModel): creation_timestamp_ns: int canceled: bool = False target: TradeTarget = TradeTarget.margin_account_spot_trade() + reduce_only: bool = False protocol_version: int = 1 def signable_part(self) -> str: @@ -114,6 +115,7 @@ class OrderResponse(BaseModel): is_immediate_or_cancel: bool | None = None is_fill_or_kill: bool | None = None is_liquidation: bool | None = None + is_reduce_only: bool | None = None def parse_orders(orders_data: list[dict[str, Any]]) -> list[OrderResponse]: diff --git a/tplus/utils/limit_order.py b/tplus/utils/limit_order.py index 63e078b..96da5d8 100644 --- a/tplus/utils/limit_order.py +++ b/tplus/utils/limit_order.py @@ -19,6 +19,7 @@ def create_limit_order_ob_request_payload( time_in_force: GTC | GTD | IOC | None = None, trigger: OrderTrigger | None = None, target: TradeTarget | None = None, + reduce_only: bool = False, ) -> CreateOrderRequest: side_normalized = Side.SELL if side.lower() == "sell" else Side.BUY @@ -41,6 +42,7 @@ def create_limit_order_ob_request_payload( trigger=trigger, creation_timestamp_ns=time.time_ns(), target=actual_target, + reduce_only=reduce_only, ) sign_payload_json = order.signable_part() signature_bytes = signer.sign(sign_payload_json) diff --git a/tplus/utils/market_order.py b/tplus/utils/market_order.py index 77f6b79..7288150 100644 --- a/tplus/utils/market_order.py +++ b/tplus/utils/market_order.py @@ -24,6 +24,7 @@ def create_market_order_ob_request_payload( fill_or_kill: bool = False, trigger: OrderTrigger | None = None, target: TradeTarget | None = None, + reduce_only: bool = False, ) -> CreateOrderRequest: side_normalized = Side.SELL if side.lower() == "sell" else Side.BUY @@ -43,6 +44,7 @@ def create_market_order_ob_request_payload( trigger=trigger, creation_timestamp_ns=time.time_ns(), target=actual_target, + reduce_only=reduce_only, ) sign_payload_json = order.signable_part()