Skip to content

Commit baa3182

Browse files
v3.0.1
Signed-off-by: Dinger <quantdinger@gmail.com>
1 parent de3fd09 commit baa3182

1 file changed

Lines changed: 9 additions & 4 deletions

File tree

  • backend_api_python/app/services/live_trading

‎backend_api_python/app/services/live_trading/binance.py‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -704,8 +704,6 @@ def place_market_order(
704704
"type": "MARKET",
705705
"quantity": self._dec_str(q_dec, strict_precision=qty_precision),
706706
}
707-
if reduce_only:
708-
params["reduceOnly"] = "true"
709707
client_order_id_norm = self._format_client_order_id(client_order_id)
710708
if client_order_id_norm:
711709
params["newClientOrderId"] = client_order_id_norm
@@ -722,6 +720,10 @@ def place_market_order(
722720
# Unknown mode: try without positionSide first; we may retry on -4061.
723721
params.pop("positionSide", None)
724722

723+
# reduceOnly after positionSide: in hedge mode, Binance returns -1106 if both are sent.
724+
if reduce_only and not (dual_side is True and params.get("positionSide") in ("LONG", "SHORT")):
725+
params["reduceOnly"] = "true"
726+
725727
try:
726728
raw = self._signed_request("POST", "/fapi/v1/order", params=params)
727729
except LiveTradingError as e:
@@ -747,6 +749,7 @@ def place_market_order(
747749
else:
748750
# Likely hedge mode; retry with inferred positionSide.
749751
params2["positionSide"] = (pos_norm if pos_norm in ("LONG", "SHORT") else self._infer_position_side(side=sd, reduce_only=reduce_only))
752+
params2.pop("reduceOnly", None)
750753
try:
751754
raw = self._signed_request("POST", "/fapi/v1/order", params=params2)
752755
self._dual_side_cache = (time.time(), True)
@@ -843,8 +846,6 @@ def place_limit_order(
843846
"quantity": self._dec_str(q_dec, strict_precision=qty_precision),
844847
"price": self._dec_str(px_dec),
845848
}
846-
if reduce_only:
847-
params["reduceOnly"] = "true"
848849
client_order_id_norm = self._format_client_order_id(client_order_id)
849850
if client_order_id_norm:
850851
params["newClientOrderId"] = client_order_id_norm
@@ -857,6 +858,9 @@ def place_limit_order(
857858
params.pop("positionSide", None)
858859
else:
859860
params.pop("positionSide", None)
861+
862+
if reduce_only and not (dual_side is True and params.get("positionSide") in ("LONG", "SHORT")):
863+
params["reduceOnly"] = "true"
860864
try:
861865
raw = self._signed_request("POST", "/fapi/v1/order", params=params)
862866
except LiveTradingError as e:
@@ -878,6 +882,7 @@ def place_limit_order(
878882
pass
879883
else:
880884
params2["positionSide"] = (pos_norm if pos_norm in ("LONG", "SHORT") else self._infer_position_side(side=sd, reduce_only=reduce_only))
885+
params2.pop("reduceOnly", None)
881886
try:
882887
raw = self._signed_request("POST", "/fapi/v1/order", params=params2)
883888
self._dual_side_cache = (time.time(), True)

0 commit comments

Comments
 (0)