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.

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.

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 Perpetuals only (UTA_USDT, UTA_USDC, UTA_INVERSE, UTA_INVERSE_FUTURE, UTA_USDT_FUTURE). Spot is not supported. When interval > 0, at least one of size or duration must be provided.

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
}