Place Strategy Order
Place Strategy Order
Descriptionâ
Place a strategy order
- API Broker rebate identifier:
The following code block needs to be added to the HTTP Header of the request."X-CHANNEL-API-CODE":"your-channel-api-code"
HTTP Requestâ
- POST /api/v3/trade/place-strategy-order
- Speed limit is 10 times/s (UID)
- Permission: UTA trade (read & write)
curl -X POST "https://api.bitget.com/api/v3/trade/place-strategy-order" \
-H "ACCESS-KEY:your apiKey" \
-H "ACCESS-SIGN:*" \
-H "ACCESS-PASSPHRASE:*" \
-H "ACCESS-TIMESTAMP:1659076670000" \
-H "locale:zh-CN" \
-H "Content-Type: application/json" \
-d '{ "category": "usdt-futures","symbol": "BTCUSDT","posSide": "long","stopLoss": "99000","takeProfit": "100800","clientOid": "121211212122"}'
Common Request Parametersâ
These fields apply to every strategy type. The parameters specific to each strategy type are listed separately in the sections below.
| Parameter | Type | Required | Comments |
|---|---|---|---|
| category | String | Yes | Product type SPOT Spot MARGIN Margin USDT-FUTURES USDT futures COIN-FUTURES Coin-M futures USDC-FUTURES USDC futures |
| symbol | String | Yes | Symbol name e.g., BTCUSDT |
| type | String | No | Strategy Typetpsl Take-Profit and Stop-Losstrigger Trigger Orderoco OCOtrailing_stop Trailing Stopiceberg Icebergtwap TWAPDefault: tpsl |
| side | String | No | Trade sidebuy/sellHedge-mode: Open long: side=buy & posSide=longOpen short: side=sell & posSide=shortClose long: side=sell & posSide=longClose short: side=buy & posSide=shortOne-way mode: Open long: side=buyOpen short: side=sellClose long: side=sell & reduceOnly=yesClose short: side=buy & reduceOnly=yes |
| posSide | String | No | Position sidelong/short |
| qty | String | No | Order Quantity |
| clientOid | String | No | Client order ID Only valid when type=tpsl; not supported for other strategy types |
Strategy Typeâ
Bitget UTA supports the following strategy order types via the type parameter. Not every strategy type is available on every product line â check the support matrix below before placing an order.
| type | Description | SPOT | MARGIN | USDT-FUTURES | COIN-FUTURES | USDC-FUTURES |
|---|---|---|---|---|---|---|
tpsl | Take-Profit and Stop-Loss | â | â | â | â | â |
trigger | Trigger Order | â | â | â | â | â |
oco | OCO (One-Cancels-the-Other) | â | â | â | â | â |
trailing_stop | Trailing Stop | â | â | â | â | â |
iceberg | Iceberg Order | â | â | â | â | â |
twap | TWAP (Time-Weighted Average Price) | â | â | â | â | â |
Take-Profit and Stop-Loss (type=tpsl)â
Attach take-profit and/or stop-loss protection to an existing position. When the market (or mark) price reaches the configured trigger price, Bitget submits a limit or market order on your behalf to close the position.
| Parameter | Type | Required | Comments |
|---|---|---|---|
| tpslMode | String | No | Take-Profit and Stop-Loss ModefullAll Positions Take-Profit and Stop-LosspartialPartial Position Take-Profit and Stop-LossIf left blank, the default value is full |
| qty | String | No | Order Quantity Required when tpslMode=partial. Unit is in the base coin |
| reduceOnly | String | No | Whether it is reduce-onlyyes/no |
| tpTriggerBy | String | No | Take-Profit Trigger Typemarket: Market Pricemark: Mark PriceIf not specified, the default value is market price |
| slTriggerBy | String | No | Stop-Loss Trigger Typemarket: Market Pricemark: Mark PriceIf not filled in, the default value is market price |
| takeProfit | String | No | Take-Profit Trigger Price |
| stopLoss | String | No | Stop-Loss Trigger Price |
| tpOrderType | String | No | Take-Profit Trigger Strategy Order Typelimit: Limit Ordermarket: Market OrderIf not filled in, the default value is market price |
| slOrderType | String | No | Stop-Loss Trigger Strategy Order Typelimit: Limit Ordermarket: Market OrderIf not filled in, the default value is market price |
| tpLimitPrice | String | No | Take-Profit Strategy Order Execution Price This field is only valid for limit orders (when tpOrderType=limit); it is ignored for market orders. |
| slLimitPrice | String | No | Stop-Loss Strategy Order Execution Price This field is only valid for limit orders (when slOrderType=limit); it is ignored for market orders |
Trigger Order (type=trigger)â
Place a single conditional order that only submits to the order book once the market reaches your trigger price â useful for breakout entries or stop-loss entries without holding a position yet.
| Parameter | Type | Required | Comments |
|---|---|---|---|
| qty | String | No | Order Quantity Required for trigger orders. Unit is in the base coin |
| reduceOnly | String | No | Whether it is reduce-onlyyes/no |
| triggerBy | String | No | Trigger order trigger price typemarket: Market Pricemark: Mark PriceIf not specified, the default value is market price |
| triggerPrice | String | No | Trigger order trigger price Only valid for limit orders (when triggerOrderType=limit); ignored for market orders |
| triggerOrderType | String | No | Trigger order typelimit: Limit Ordermarket: Market Order |
| triggerOrderPrice | String | No | Trigger order execution price Only valid for limit orders (when triggerOrderType=limit); ignored for market orders |
OCO (type=oco)â
OCO (One-Cancels-the-Other) places two orders at once â a direct limit order and a conditional (trigger) order â as a single pair. Whichever leg fills or triggers first automatically cancels the other, letting you set a take-profit/bottom-fishing limit and a chase-up/stop-loss trigger in one request.
| Parameter | Type | Required | Comments |
|---|---|---|---|
| ocoParams | List<String> | Yes | OCO parameters list |
| >ocoLimitPrice | String | Yes | Limit order price for OCOside=buy: limit buy price (bottom fishing)side=sell: limit sell price (take-profit)Applied to the non-triggered direct limit order |
| >ocoTriggerPrice | String | Yes | Trigger price for the conditional order legside=buy: chase-up trigger priceside=sell: stop-loss trigger priceApplied to the triggered conditional order leg |
| >ocoOrderType | String | Yes | Order type for the conditional order leglimit: Limit Ordermarket: Market Order |
| >ocoOrderPrice | String | No | Execution price for the conditional order legside=buy: chase-up priceside=sell: stop-loss priceRequired when ocoOrderType=limit |
Trailing Stop (type=trailing_stop)â
Trailing stop dynamically follows the market price by a fixed ratio or spread once activated, then submits a preset order when the price pulls back by that trailing distance â allowing you to lock in profit as the market keeps moving in your favor.
| Parameter | Type | Required | Comments |
|---|---|---|---|
| trailingStopParams | List<String> | Yes | Trailing stop parameters list |
| >activationPrice | String | Yes | Activation price Trailing starts when the market reaches this price |
| >activationType | String | Yes | Activation price typemarket: Market Pricemark: Mark Priceindex: Index PriceFor futures only; spot supports market only |
| >trailType | String | Yes | Trailing moderatio: Percentagespread: Spread |
| >trailVariance | String | Yes | Trailing variance When trailType=ratio: spot range [0.1, 20], futures range [0.1, 10] |
| >preOrderType | String | Yes | Preset order typelimit: Limit Ordermarket: Market Order |
| >preOrderPrice | String | No | Preset order price Required when preOrderType=limit |
Iceberg Order (type=iceberg)â
Iceberg order splits a large order into a series of smaller sub-orders and drips them into the order book over time, reducing market impact and concealing the full order size.
| Parameter | Type | Required | Comments |
|---|---|---|---|
| icebergParams | List<String> | Yes | Iceberg parameters list |
| >splitMode | String | Yes | Split modequantity: By quantity per sub-orderorder: By number of sub-orders |
| >qtyPerOrder | String | No | Quantity per sub-order Required when splitMode=quantity |
| >splitOrderNumbers | String | No | Number of sub-orders Required when splitMode=orderRange: [1, 100] |
| >orderPreference | String | Yes | Order preferencefaster_execution: Faster executionfixed_distance: Fixed distancefixed_price: Fixed price |
| >executionStrategy | String | No | Sub-order execution strategyqueue1: Same-direction price 1counterparty1: Counterparty price 1Valid when orderPreference=faster_execution; default queue1 |
| >fixedDistanceType | String | No | Fixed distance typespread: By spreadpercentage: By percentageDistance from best bid/ask Valid when orderPreference=fixed_distance; default spread |
| >distance | String | No | Distance value Spread value when fixedDistanceType=spread; percentage when fixedDistanceType=percentage |
| >fixedPrice | String | No | Fixed price for sub-orders Required when orderPreference=fixed_price |
| >priceLimit | String | No | Price protection limit Sub-orders will not be placed if price exceeds this limit Valid when orderPreference=faster_execution or orderPreference=fixed_distance |
TWAP (type=twap)â
TWAP (Time-Weighted Average Price) splits an order into equal-interval sub-orders spread evenly across a configured duration, executing gradually to approximate the time-weighted average price instead of filling all at once.
| Parameter | Type | Required | Comments |
|---|---|---|---|
| twapParams | List<String> | Yes | TWAP parameters list |
| >duration | String | Yes | Total duration in minutes Range: [1, 1440] (1 minute to 24 hours) |
| >interval | String | Yes | Frequency in seconds Enum: 5, 10, 20, 30, 60 |
| >orderType | String | No | Sub-order typemarket: Market Orderlimit: Limit OrderDefault: market |
| >limitOffsetType | Number | No | Limit offset typepercentage: Percentagespread: SpreadValid when orderType=limit; default percentage |
| >limitOffsetPercentage | Number | No | Limit offset percentage Decimal format, range [0.001, 0.1]; 0.1 means 10% Required when limitOffsetType=percentage |
| >limitOffsetSpread | Number | No | Limit offset spread Required when limitOffsetType=spreadSpread from latest trade price cannot exceed 20% |
| >twapTriggerPrice | Number | No | Strategy trigger price |
| >twapTerminationPrice | Number | No | Strategy termination price Strategy terminates early when market reaches this price |
{
"code": "00000",
"msg": "success",
"requestTime": 1695806875837,
"data": {
"clientOid": "121211212122",
"orderId": "121211212122"
}
}
Response Parametersâ
| Parameter | Type | Comments |
|---|---|---|
| orderId | String | Order ID |
| clientOid | String | Client order ID |