Skip to main content

Create Strategy Order

Create a strategy order. Supported strategy types: chaseOrder, twap, iceberg, pov.

Strategy Types​

TWAP (Time-Weighted Average Price)​

Splits a large order into equal-sized sub-orders executed at fixed time intervals, minimizing market impact and achieving a price close to the time-weighted average.

Execution logic: Number of sub-orders = Running Time (seconds) ÷ Frequency. Sub-orders that fail to fill are retried once; if unsuccessful, they are canceled and the strategy continues.

The maximum number of concurrent TWAP strategies per user is 30.

Please refer to Introduction to TWAP Strategy to get more details.

ParameterConstraint
Total quantity (size)Must be ≥ Max(MinNotional × subOrders ÷ LastPrice × 1.1, MinSize × subOrders)
Running time (duration)5 minutes – 24 hours
Sub-order interval (interval)5 – 120 seconds
Sub-order quantity≤ 50% of the exchange's maximum single order size (Perpetual/Futures)
Random quantity variance±20% if isRandom is enabled

Chase Order (Chase Limit Order)​

Continuously places and adjusts a limit order at the best bid/ask price to track market movements until the order is fully filled, canceled, or reaches the maximum chase distance.

Execution logic: The order price updates every second. All Chase Limit Orders are Post Only by default (maker execution). If the order is rejected by the Post Only condition 5 consecutive times, the strategy is canceled.

Please refer to Chase Limit Order to get more details.


Iceberg Order​

Splits a large order into multiple smaller sub-orders that are placed sequentially, revealing only a small portion of the total order size to the market at any one time.

Execution logic: Each sub-order enters the order book → upon fill, the next sub-order is automatically placed → repeats until the full quantity is executed.

Please refer to Iceberg Order to get more details.

Note: The number of sub-orders is capped at 200. This applies to the count implied by size ÷ subSize (or positionValue ÷ subPositionValue) as well as to an explicit orderCount; a larger count is rejected with 10001 order count is too big.

Order preferences:

PreferenceExecution behavior
Chase Limit (Taker)Buy at Ask1 / Sell at Bid1; prioritizes speed
Chase LimitBuy at Bid1 / Sell at Ask1; maker execution
Chase Limit (offset)Fixed distance from Ask1/Bid1; balances speed and cost
Fixed PricesAll sub-orders placed at a single fixed price

POV Order (Percentage of Volume)​

Participates in market volume at a fixed rate, dynamically sizing each sub-order as a percentage of observed trading activity or order book depth to minimize market impact.

Execution logic: At each interval, the strategy samples market activity based on the selected mode → calculates sub-order quantity using participationRate → places the order → repeats until maxQty (size) is reached or maxDuration (duration) expires. Setting interval to 0 executes once immediately (OneTime mode).

Note: POV supports Spot (UTA_SPOT), Perpetuals (UTA_USDT, UTA_USDC, UTA_INVERSE) and Futures (UTA_INVERSE_FUTURE, UTA_USDT_FUTURE).

Stop conditions: At least one of the following must be set, otherwise the request is rejected: duration > 0, size > 0, positionValue > 0, or interval = 0 (One-Time execution). size and positionValue are mutually exclusive.

Execution modes (povParams.mode):

ModeOrder typeVolume reference
TradedVolumeMarket orderHistorical traded volume over referenceWindow seconds; range: [60, 14400]
OppositeSideLiquidityTaker limit at best bid/askOpposite-side book depth; Top-N levels via depthReference [1, 10]
SameSideLiquidityPost-Only limit at best bid/askSame-side book depth; Top-N levels via depthReference [1, 10]; maker execution only

HTTP Request​

POST/v5/strategy/create

Request Parameters​

ParameterRequiredTypeComments
categorytruestringProduct type. UTA_USDT(USDT Perpetual), UTA_USDC(USDC Perpetual), UTA_SPOT(Spot), UTA_INVERSE(Inverse Perpetual), UTA_INVERSE_FUTURE(Inverse Futures), UTA_USDT_FUTURE(USDT Futures)
symboltruestringSymbol name, e.g. BTCUSDT
sidetruestringBuy, Sell
sizefalsestringTotal order quantity (coin). Either "size" or "positionValue" is needed
positionValuefalsestringTotal order quantity (value). Either "size" or "positionValue" is needed
strategyTypetruestringStrategy type. twap
durationtrueintegerTotal execution duration in seconds. Range: [300, 86400]. Must be divisible by interval
reduceOnlyfalsebooleanReduce-only order, must set true when reducing the position. true, false
positionIdxfalseintegerPosition index. 0: one-way mode, 1: buy side of hedge mode, 2: sell side of hedge mode. Required for hedge mode
leverageTypefalseintegerSpot leverage type. 0: normal, 1: borrow to trade (UTA_SPOT only)
intervalfalseintegerSub-order placement interval in seconds. 5, 10, 15, 30(default), 60, 120
isRandomfalsebooleanWhether to randomize each sub-order quantity by ±20%
triggerPricefalsestringAdvanced settings (Trigger price): Strategy activates when the market price reaches this value
maxChasePricefalsestringAdvanced settings (Stop Price): Strategy terminates when the last traded price reaches this value
chaseDistancefalsestringAdvanced settings - ordertype=Limit (default: market): Price distance from best bid/ask (absolute value), e.g. "0.5". Mutually exclusive with chasePercentE4; chaseDistance takes priority if both are set
chasePercentE4falseintegerAdvanced settings - ordertype=Limit (default: market): Price offset from best bid/ask in basis points (1/10000), e.g. 100 = 1%. Mutually exclusive with chaseDistance

Response Parameters​

ParameterTypeComments
strategyIdstringStrategy ID (UUID format)
resultstringExecution result. null if creation succeeded

Request Example​

POST /v5/strategy/create HTTP/1.1
Host: api-testnet.bybit.com
X-BAPI-SIGN: XXXXX
X-BAPI-API-KEY: xxxxxxxxxxxxxxxxxx
X-BAPI-TIMESTAMP: 1773711467000
X-BAPI-RECV-WINDOW: 5000
Content-Type: application/json

{
"side": "Buy",
"symbol": "BTCUSDT",
"reduceOnly": false,
"category": "UTA_USDT",
"size": "0.1",
"positionIdx": 1,
"strategyType": "chaseOrder",
"chasePrice": "75967.7",
"maxChasePrice": "83564.5",
"triggerPrice": "75000.0"
}

Response Example​

{
"retCode": 0,
"retMsg": "success",
"result": {
"strategyId": "119b6211-2611-461b-be5e-5ac557099e82",
"result": null
},
"retExtInfo": {},
"time": 1773711467052
}