跳到主要内容

下单

接口描述

创建并提交一个新订单。

HTTP请求

POST /fapi/v1/order (HMAC SHA256)

请求参数

名称类型是否必需描述
symbolSTRINGYES交易对
sideENUMYES买卖方向: BUY, SELL
positionSideENUMNO接受但不做校验 —— 无论传什么值,订单始终按单向持仓(BOTH)模式处理。触发单的响应中会原样回显该值。
typeENUMYES订单类型: LIMIT, MARKET, STOP, TAKE_PROFIT, STOP_MARKET, TAKE_PROFIT_MARKETSTOP_LIMITTAKE_PROFIT_LIMIT 接受为 STOPTAKE_PROFIT 的别名。TRAILING_STOP_MARKET 在本接口不支持,会返回 -1130 拒绝 —— 跟踪止损请使用 POST /fapi/v1/algoOrder
reduceOnlyBOOL 或 STRINGNOtrue / false / "true" / "false"。reduceOnly 单在 admission 时按对侧持仓数量上限收口;若没有可减的对侧持仓,返回 -2022 拒绝。reduceOnly=true 订单豁免 MIN_NOTIONAL 过滤器,确保 < 10 USD 的残余仓位也能平掉;LOT_SIZEMAX_NOTIONAL 仍然适用。
quantityDECIMALYES下单数量。会向下对齐到 symbol 的 lot size;产生的名义额必须满足 symbol 的最小/最大边界,否则返回 -1013。错误消息以 Filter failure: <FILTER>. 开头,<FILTER>LOT_SIZE / MIN_NOTIONAL / MAX_NOTIONAL 之一,客户端可据此 switch。
priceDECIMALNO委托价格(LIMIT 类订单必填)
newClientOrderIdSTRINGNO用户自定义订单 ID,[A-Za-z0-9_.-],长度 1–36。会持久化,query-order / all-orders 会原样返回。与调用方活跃订单中的 ID 重复时返回 -2014 拒绝。
stopPriceDECIMALNO止损 / 触发价格。STOP / STOP_MARKET / TAKE_PROFIT / TAKE_PROFIT_MARKET 必填(缺失返回 -1102)。提交时若触发条件已被满足,返回 -2021 拒绝。
timeInForceENUMNO有效方式: GTC, IOC, FOK, GTXGTX 是 post-only —— 与对手价交叉的 GTX 单返回 -2010IOC / FOK 语义在引擎层严格执行。
workingTypeENUMNO接受但被忽略 —— 无论传什么值,触发条件始终按标记价格判定。触发单的响应中会原样回显该值。
recvWindowLONGNO接受但被忽略 —— 服务端固定执行 ±60 秒的时间戳窗口。
timestampLONGYES时间戳

在市价入场单上挂止盈 / 止损

需要在开仓的同时挂止盈和/或止损时,先单独下市价入场单,再用一两笔 反向 reduceOnly 触发单挂在对应触发价上:

订单typesidestopPricereduceOnly
入场MARKET你的开仓方向 (BUY / SELL)false
止盈TAKE_PROFIT_MARKET与入场相反止盈触发价true
止损STOP_MARKET与入场相反止损触发价true

触发单在其 stopPrice标记价格命中时按市价执行(workingType 会被忽略 —— 见上文)。如果你以其他方式手动平仓,请通过 DELETE /fapi/v1/order 显式撤销这些触发单 —— 它们与入场单之间没有 联动关系。

响应示例

{
"orderId": "3fa42833-9508-4061-8d80-b68563dcd521",
"symbol": "BTCUSDT",
"status": "NEW",
"clientOrderId": "testOrder1",
"price": "60000",
"avgPrice": "0",
"origQty": "0.01",
"executedQty": "0",
"cumQuote": "0",
"timeInForce": "GTC",
"type": "LIMIT",
"reduceOnly": false,
"side": "BUY",
"positionSide": "BOTH",
"stopPrice": "0",
"workingType": "CONTRACT_PRICE",
"priceProtect": false,
"origType": "LIMIT",
"updateTime": 1774330265238,
"time": 1774330265238
}

错误码

错误码原因
-1013过滤器校验失败: LOT_SIZE / MIN_NOTIONAL / MAX_NOTIONAL
-1100非法数值(quantity / price / stopPrice 非正数或无法解析)
-1102缺少必需参数(quantity;触发类订单的 stopPrice;GTX 的 price
-1121未知或不可交易的交易对
-1130非法的 sidetype(包括 TRAILING_STOP_MARKET
-2010GTX post-only 单会立即成交,或超出单边持仓量上限
-2014newClientOrderId 重复 —— 已有活跃订单使用该 ID
-2019保证金不足
-2021触发单在当前标记价格下会立即触发
-2022ReduceOnly 订单被拒: 没有可减的对侧持仓

代码示例

cURL

API_KEY="your_api_key"
API_SECRET="your_api_secret"
TIMESTAMP=$(date +%s%3N)
BODY='{"symbol":"BTCUSDT","side":"BUY","type":"LIMIT","timeInForce":"GTC","quantity":"0.01","price":"60000"}'
SIGNATURE=$(echo -n "timestamp=${TIMESTAMP}${BODY}" | openssl dgst -sha256 -hmac "${API_SECRET}" | awk '{print $2}')

curl -s -X POST \
-H "X-MBX-APIKEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d "${BODY}" \
"https://api.prex.world/fapi/v1/order?timestamp=${TIMESTAMP}&signature=${SIGNATURE}"

Python

import time, hmac, hashlib, requests, json

API_KEY = "your_api_key"
API_SECRET = "your_api_secret"
BASE_URL = "https://api.prex.world"

def sign(msg: str) -> str:
return hmac.new(API_SECRET.encode(), msg.encode(), hashlib.sha256).hexdigest()

def signed_post(path, body={}):
ts = int(time.time() * 1000)
qs = f"timestamp={ts}"
body_str = json.dumps(body, separators=(',', ':'))
sig = sign(qs + body_str)
return requests.post(
f"{BASE_URL}{path}?timestamp={ts}&signature={sig}",
data=body_str,
headers={"X-MBX-APIKEY": API_KEY, "Content-Type": "application/json"},
)

# Place a LIMIT BUY order for BTCUSDT
resp = signed_post("/fapi/v1/order", body={
"symbol": "BTCUSDT",
"side": "BUY",
"type": "LIMIT",
"timeInForce": "GTC",
"quantity": "0.01",
"price": "60000",
})
print(resp.json())