欧易 · API 下单
tgtCcy 只管欧易币币市价单里 sz 按什么单位算
BTC-USDT 的市价买单,sz 填 100、不传 tgtCcy,下出去的是花 100 USDT 买 BTC;卖单不传 tgtCcy,sz 填 0.001 就是卖出 0.001 BTC。原因在 tgtCcy 的默认值买卖不同:买单默认 quote_ccy(计价货币),卖单默认 base_ccy(交易货币)。要按币数买,传 tgtCcy=base_ccy;要卖到一笔固定的 USDT,传 tgtCcy=quote_ccy。限价单和交割、永续、期权的 sz 单位,都不由它定。
tgtCcy 换一个值,同样的 sz 就换了单位
欧易 API v5 文档「下单」接口里,tgtCcy 是市价单委托数量 sz 的单位,仅适用于币币市价订单,取值只有两个:base_ccy 交易货币,quote_ccy 计价货币。在 BTC-USDT 上,交易货币是 BTC,计价货币是 USDT。
| tgtCcy | 方向 | sz | 下出去的是 |
|---|---|---|---|
| quote_ccy | 买入(默认) | 100 | 花费 100 USDT 购买 BTC |
| base_ccy | 买入 | 0.001 | 以市价买入 0.001 BTC |
| base_ccy | 卖出(默认) | 0.001 | 卖出 0.001 BTC |
| quote_ccy | 卖出 | 100 | 卖出 BTC,直到收到 100 USDT |
sz 是必填的字符串,填 "100" 而不是数字 100。策略里买卖共用一个下单函数时,把 tgtCcy 写进每一笔币币市价请求,读代码的人就不必去记买卖两边的默认值。
按币数买、按 USDT 卖的市价单为什么成交数量和 sz 对不上?
tgtCcy 填 base_ccy 的买单、填 quote_ccy 的卖单,要的是一个确定的到手数量,而市价单下单时定不下成交价。这两种单有两条处理办法:
- sz 大于当前可买或可卖的数量:系统按最大可买或可卖数量成交。一定要按指定数量成交,可以改用限价单,等价格波动到锁定的余额够买入或卖出这个数量。
- sz 不大于可买或可卖的数量,但价格波动过大,锁定的余额买不够输入的交易货币数量、或卖不出输入的计价货币数量:系统按「能买多少买多少」「能卖多少卖多少」更改下单数量。系统也会尽量多锁定一点余额,少出现改量的情况。
| 下单 | LTC-USDT 市价 | 被锁定的余额 | 最终成交 |
|---|---|---|---|
| 市价买入 10 个 LTC(可买 11 个) | 200 | 3,000 USDT | 10 个 LTC(200×10 < 3,000) |
| 市价买入 10 个 LTC(可买 11 个) | 400 | 3,000 USDT | 7.5 个 LTC(400×10 > 3,000,按 3,000÷400) |
| 市价卖出 1,000 USDT(可卖 1,200 USDT) | 200 | 6 个 LTC | 5 个 LTC |
| 市价卖出 1,000 USDT(可卖 1,200 USDT) | 100 | 6 个 LTC | 6 个 LTC,得 6×100 = 600 USDT(100×6 < 1,000) |
按交易货币数量市价买入时,为了确保有足够的资产买够设定的数量,会多冻结 5% 的计价币。
本想花 100 USDT,代码里却把 tgtCcy 写成了 base_ccy、sz 仍是 100,这笔就成了按 100 BTC 下的市价买单;banAmend 保持默认时,它套上面第一条处理办法,按最大可买数量成交。
banAmend 管的是余额不足时要不要自动缩减数量,只适用于币币市价单:默认 false,系统把 sz 缩到可用余额能支持的数量后执行;设成 true,余额不足时整笔订单被拒绝。上面那笔写反单位的单,banAmend 设成 true 时是按最大可买数量成交还是整笔被拒,在欧易模拟盘里下一笔、看返回最直接。
按到手数量下市价单时止盈止损和滑点怎么设
tgtCcy 为 base_ccy 的市价买单,和 tgtCcy 为 quote_ccy 的市价卖单,都不支持附带止盈止损(attachAlgoOrds)。附带的止盈止损只在母单成交后激活,母单成交前被撤就一并丢弃;要独立于母单的止盈止损,用策略委托接口 POST /api/v5/trade/order-algo 另下。
这两种单可以另设 slippagePct,也就是最大可接受滑点:取值 0 到 0.05,即 0% 到 5%,含两端;按百分比表示最多两位小数,0.01(1%)和 0.0123(1.23%)合法,0.01234(1.234%)会被拒绝。不填或为空时,默认值是 0.00%。滑点不能靠改单修改,要调就撤单重新提交。
下单请求里把 tgtCcy 和 banAmend 写明
tgtCcy 和 banAmend 都有默认值,不传脚本照样能下单。下面这段请求体按币数市价买入 0.001 BTC,余额不足就整笔拒绝。
{
"instId": "BTC-USDT",
"tdMode": "cash",
"side": "buy",
"ordType": "market",
"sz": "0.001",
"tgtCcy": "base_ccy",
"banAmend": true
}
tdMode 在现货模式和合约模式下的币币单填 cash;跨币种保证金模式和组合保证金模式下,全仓币币填 cross。下单返回里 code 为 0 表示请求成功,每笔订单下没下成,看 data 里的 sCode 和 sMsg,sCode 为 0 才算成功。脚本要把被拒的单当异常接住,不让循环原样重发,这是OKX API 自动交易风控里异常处理的一部分。
币币市价单以外的订单 sz 填什么单位
现货限价单的 sz 也要配 tgtCcy 吗?
限价单不看 tgtCcy:币币和币币杠杆以限价买入、卖出时,sz 都指交易货币数量,在 BTC-USDT 上就是 BTC 的个数。价格由 px 给,px 用于 limit、post_only、fok、ioc、mmp、mmp_and_post_only 这几类订单。
币币杠杆市价单的 sz 填的是哪种币?
币币杠杆以市价买入时,sz 指计价货币的数量;以市价卖出时,指交易货币的数量。放到 BTC-USDT 上,买单的 sz 是要花的 USDT,卖单的 sz 是要卖的 BTC。
交割和永续合约下单 sz 填 1 是多少?
交割、永续、期权买入和卖出时,sz 指合约张数,填 1 就是 1 张。合约面值在正向合约是 sz × ctVal × markPx,在反向合约(USD 计价)是 sz × ctVal;ctVal 和 ctType 用 GET /api/v5/public/instruments 查。期权合约不支持市价委托。