創建委託單
本接口提供幣幣交易,現貨槓桿交易,合約以及期權的訂單創建
支持的訂單類型 (
市價單:orderType
):
限價單:orderType
=Limit, 需要指定訂單數量和價格.orderType
=Market, 以Bybit市場內最優的價格一直執行到成交. 選擇市價單時,price 參數為空。在期貨交易系統,為了保護市價單產生嚴重的滑點,Bybit 交易系統會將市價單轉為限價單進行撮合,如果市場價格轉限價時,超過滑點設置的閾值,該筆市場價格訂單將會被取消。滑點閾值是指訂單價格偏離最新成交價格的百分比,目前閾值設置為:BTC 合約3%,其他合約5%。支持的timeInForce策略:
GTC
一直有效至取消
IOC
立即成交或取消
FOK
完全成交或取消
PostOnly
: 被動委托類型,如果該訂單在提交時會被立即執行成交,它將被取消. 這樣做的目的是為了保護您的訂單在提交的過程中,如果因為場內的價格變化,而撮合系統無法委託該筆訂單到訂單簿,因此會被取消。針對 PostOnly 訂單類型,單筆訂單可提交的數量比其他類型的訂單更多,請參考該接口中的lotSizeFilter > postOnlyMaxOrderQty
參數.如何創建條件單:
在提交訂單時,如果設置了triggerPrice,則該訂單會自動轉為條件單。另外條件單不佔用保證金,如果條件單觸發後,保證金不足,則該筆訂單會被取消。訂單數量: 訂單數量,只支持正數。
訂單價格: 下限價單,價格字段必傳。若您有倉位, 下單價格需要高於強平價. 對於設置價格的步長,請參閱該接口中的
priceFilter
>tickSize
.用戶自定義訂單Id: 最大長度不超過36個字符且唯一。您可以自定義設置的订单ID(
orderLinkId
),我们会为您关联到Bybit系统的唯一订单ID,并把唯一订单ID在活动委托创建成功后一并返回给您(包括Websocket),您可以使用 Bybit 的订单ID 和 orderLinkId 去獲取和取消訂單,如果在參數輸入中同時輸入 orderId 和 orderLinkId,Bybit 會優先以 orderId 為准來處理對應訂單.訂單持有上限:
期貨: 單個账户针对合约可持有每个 symbol 最多可同时持有500个普通活动订单。針對條件單,單個帳戶針對合約可持有每個 symbol 最多同時持有 10 個條件單
現貨: 單帳戶單交易對: 總計支持500個掛單,包括最多持有30個止盈止損委託單和30個條件單委託單
期權: 單帳戶最多可持有50個委託單風控限制提示:
Bybit 將針對您的 API 請求進行統計監控,當單日 (UTC 0点 - UTC 24点) 單帳號(母帳號和子帳號整體運算)訂單總数超過一定上限,平台將保留提醒、警告,以及進行必要性限制的權利。 使用API的客戶預設接受本條款並負有配合調整的義務。
現貨支持止盈止損單, 條件單, 但是背後的處理邏輯略有不同
經典帳戶: 當止盈止損或者條件單創建後, 您將會得到一個訂單ID. 當它被觸發後, 您將獲取到一個全新的訂單ID
統一帳戶: 當止盈止損或者條件單創建後, 您將會得到一個訂單ID. 當它被觸發後, 訂單ID將會保持不變
HTTP請求
POST /v5/order/create
請求參數
參數 | 是否必需 | 類型 | 說明 |
---|---|---|---|
category | true | string | 產品類型 |
symbol | true | string | 合約名稱 |
isLeverage | false | integer | 是否借貸. 僅統一帳戶的現貨交易有效. 0 (default): 否,則是幣幣訂單, 1 : 是,則是槓桿訂單 |
side | true | string | Buy , Sell |
orderType | true | string | 訂單類型. Market , Limit |
qty | true | string | 訂單數量
|
marketUnit | false | string | 統一帳戶現貨交易創建市價單時給入參qty 指定的單位, 支持orderFilter=Order, tpslOrder 和 StopOrderbaseCoin : 比如, 買BTCUSDT, 則"qty"的單位是BTCquoteCoin : 比如, 賣BTCUSDT, 則"qty"的單位是USDT |
price | false | string | 訂單價格.
|
triggerDirection | false | integer | 條件單參數. 用於辨別期望的方向.
linear 和inverse 有效 |
orderFilter | false | string | 指定訂單品種. Order : 普通單,tpslOrder : 止盈止損單,StopOrder : 條件單. 若不傳, 默認Order 僅對現貨有效 |
triggerPrice | false | string |
|
triggerBy | false | string | 條件單參數. 觸發價格類型. LastPrice , IndexPrice , MarkPrice 僅對 linear 和inverse 有效 |
orderIv | false | string | 隱含波動率. 僅option 有效. 按照實際值傳入, e.g., 對於10%, 則傳入0.1. orderIv 比price 有更高的優先級 |
timeInForce | false | string | 訂單執行策略
|
positionIdx | false | integer | 倉位標識, 用戶不同倉位模式. 該字段對於雙向持倉模式是必傳:
|
orderLinkId | false | string | 用戶自定義訂單Id option 時,該參數必傳 |
takeProfit | false | string | 止盈價格 linear & inverse : 支援統一帳戶和經典帳戶spot : 僅支持統一帳戶, 創建限價單時, 可以附帶市價止盈止損和限價止盈止損 |
stopLoss | false | string | 止損價格 linear & inverse : 支援統一帳戶和經典帳戶spot : 僅支持統一帳戶, 創建限價單時, 可以附帶市價止盈止損和限價止盈止損 |
tpTriggerBy | false | string | 觸發止盈的價格類型 MarkPrice IndexPrice LastPrice (默認)僅對 linear 和inverse 有效 |
slTriggerBy | false | string | 觸發止損的價格類型 MarkPrice IndexPrice LastPrice (默認)僅對 linear 和inverse 有效 |
reduceOnly | false | boolean | 什麼是只減倉? true 將這筆訂單設為只減倉
linear , inverse 和option 有效 |
closeOnTrigger | false | boolean | 什麼是觸發後平倉委託?此選項可以確保您的止損單被用於減倉(平倉)而非加倉,並且在可用保證金不足的情況下,取消其他委託,騰出保證金以確保平倉委託的執行. 僅對 linear 和inverse 有效 |
smpType | false | string | Smp執行類型. 什麼是SMP? |
mmp | false | boolean | 做市商保護, true 表示該訂單是做市商保護訂單. 什麼是做市商保護?option 有效 |
tpslMode | false | string | 止盈止損模式
linear 和inverse 有效 |
tpLimitPrice | false | string | 觸發止盈後轉換為限價單的價格
|
slLimitPrice | false | string | 觸發止損後轉換為限價單的價格
|
tpOrderType | false | string | 止盈觸發後的訂單類型
Market (默認), Limit 對於tpslMode=Full, 僅支持tpOrderType=Market |
slOrderType | false | string | 止損觸發後的訂單類型
|
響應參數
參數 | 類型 | 說明 |
---|---|---|
orderId | string | 訂單ID |
orderLinkId | string | 用戶自定義訂單ID |
ack僅表示請求被成功接受. 請使用websocket-order推送來確認訂單狀態
請求示例
- HTTP
- Python
- Go
- Java
- .Net
- Node.js
POST /v5/order/create HTTP/1.1
Host: api-testnet.bybit.com
X-BAPI-SIGN: XXXXX
X-BAPI-API-KEY: XXXXX
X-BAPI-TIMESTAMP: 1672211928338
X-BAPI-RECV-WINDOW: 5000
Content-Type: application/json
// 現貨下僅maker單
{"category":"spot","symbol":"BTCUSDT","side":"Buy","orderType":"Limit","qty":"0.1","price":"15600","timeInForce":"PostOnly","orderLinkId":"spot-test-01","isLeverage":0,"orderFilter":"Order"}
// 現貨止盈止損單
{"category":"spot","symbol":"BTCUSDT","side":"Buy","orderType":"Limit","qty":"0.1","price":"15600","triggerPrice": "15000", "timeInForce":"Limit","orderLinkId":"spot-test-02","isLeverage":0,"orderFilter":"tpslOrder"}
// 槓桿交易單 (統一帳戶)
{"category":"spot","symbol":"BTCUSDT","side":"Buy","orderType":"Limit","qty":"0.1","price":"15600","timeInForce":"Limit","orderLinkId":"spot-test-limit","isLeverage":1,"orderFilter":"Order"}
// 現貨市價單, qty為報價幣種金額
{"category":"spot","symbol":"BTCUSDT","side":"Buy","orderType":"Market","qty":"200","timeInForce":"IOC","orderLinkId":"spot-test-04","isLeverage":0,"orderFilter":"Order"}
// USDT永續開多倉訂單 (單向持倉)
{"category":"linear","symbol":"BTCUSDT","side":"Buy","orderType":"Limit","qty":"1","price":"25000","timeInForce":"GTC","positionIdx":0,"orderLinkId":"usdt-test-01","reduceOnly":false,"takeProfit":"28000","stopLoss":"20000","tpslMode":"Partial","tpOrderType":"Limit","slOrderType":"Limit","tpLimitPrice":"27500","slLimitPrice":"20500"}
// USDT永續平多倉訂單 (單向持倉)
{"category": "linear", "symbol": "BTCUSDT", "side": "Sell", "orderType": "Limit", "qty": "1", "price": "30000", "timeInForce": "GTC", "positionIdx": 0, "orderLinkId": "usdt-test-02", "reduceOnly": true}
from pybit.unified_trading import HTTP
session = HTTP(
testnet=True,
api_key="XXXXX",
api_secret="XXXXX",
)
print(session.place_order(
category="spot",
symbol="BTCUSDT",
side="Buy",
orderType="Limit",
qty="0.1",
price="15600",
timeInForce="PostOnly",
orderLinkId="spot-test-postonly",
isLeverage=0,
orderFilter="Order",
))
import (
"context"
"fmt"
bybit "https://github.com/bybit-exchange/bybit.go.api")
client := bybit.NewBybitHttpClient("YOUR_API_KEY", "YOUR_API_SECRET", bybit.WithBaseURL(bybit.TESTNET))
params := map[string]interface{}{
"category": "linear",
"symbol": "BTCUSDT",
"side": "Buy",
"positionIdx": 0,
"orderType": "Limit",
"qty": "0.001",
"price": "10000",
"timeInForce": "GTC",
}
client.NewUtaBybitServiceWithParams(params).PlaceOrder(context.Background())
import com.bybit.api.client.restApi.BybitApiAsyncTradeRestClient;
import com.bybit.api.client.domain.ProductType;
import com.bybit.api.client.domain.TradeOrderType;
import com.bybit.api.client.domain.trade.PositionIdx;
import com.bybit.api.client.domain.trade.Side;
import com.bybit.api.client.domain.trade.TimeInForce;
import com.bybit.api.client.domain.trade.TradeOrderRequest;
import com.bybit.api.client.service.BybitApiClientFactory;
import java.util.Map;
BybitApiClientFactory factory = BybitApiClientFactory.newInstance("YOUR_API_KEY", "YOUR_API_SECRET");
BybitApiAsyncTradeRestClient client = factory.newAsyncTradeRestClient();
var newOrderRequest = TradeOrderRequest.builder().category(ProductType.LINEAR).symbol("XRPUSDT")
.side(Side.BUY).orderType(TradeOrderType.MARKET).qty("10").timeInForce(TimeInForce.IMMEDIATE_OR_CANCEL)
.positionIdx(PositionIdx.ONE_WAY_MODE).build();
client.createOrder(newOrderRequest, System.out::println);
using bybit.net.api.ApiServiceImp;
using bybit.net.api.Models.Trade;
BybitTradeService tradeService = new(apiKey: "xxxxxxxxxxxxxx", apiSecret: "xxxxxxxxxxxxxxxxxxxxx");
var orderInfo = await tradeService.PlaceOrder(category: Category.LINEAR, symbol: "BLZUSDT", side: Side.BUY, orderType: OrderType.MARKET, qty: "15", timeInForce: TimeInForce.GTC);
Console.WriteLine(orderInfo);
const { RestClientV5 } = require('bybit-api');
const client = new RestClientV5({
testnet: true,
key: 'apikey',
secret: 'apisecret',
});
client
.submitOrder({
category: 'spot',
symbol: 'BTCUSDT',
side: 'Buy',
orderType: 'Market',
qty: '0.1',
price: '15600',
timeInForce: 'PostOnly',
orderLinkId: 'spot-test-postonly',
isLeverage: 0,
orderFilter: 'Order',
})
.then((response) => {
console.log(response);
})
.catch((error) => {
console.error(error);
});
響應示例
{
"retCode": 0,
"retMsg": "OK",
"result": {
"orderId": "1321003749386327552",
"orderLinkId": "spot-test-postonly"
},
"retExtInfo": {},
"time": 1672211918471
}