OCO 是 One-Cancels-the-Other 的缩写,币安帮助中心叫它「选择性委托订单」,币安学院的术语表译成「二选一订单」。本文按币安帮助中心的现货面板讲这组搭配:一张限价单,一张止损限价单。限价单成交或部分成交、止损单触发,都会撤掉另一张;并不保证任一张最终成交。
所以下单面板上会一下子冒出三个价格栏:限价单的价格、止损单的触发价、止损单的限价。数量只填一个,两张单共用。这三栏谁是谁,拆回两张单去读就清楚了。
为什么不直接下两张单
假设你手里有 0.1 BTC,想在上面挂一张止盈卖单,下面再放一张止损卖单。分开下,两张单各管各的:币安学院「OCO(二选一)订单」(2026 年 8 月 28 日更新)提到的后果是,其中一笔成交后另一笔仍然留着,可能带来你没打算要的敞口。现货这边还有个更早碰到的问题:挂出去的卖单会占住对应数量的币,同一份币通常撑不起两张满额卖单,这一层在可用、冻结、锁定里讲过。
OCO 解决的就是这件事。同一份数量,同时挂两个出场条件,一边成交或止损触发,就不再让另一边继续等。
卖出 OCO 的三个价格:一个在现价上面,两个在下面
卖出这一侧好理解:手里已经有币,给它定一个止盈位和一个止损位。三个价格这样读:
- 限价单的价格:高于当前价,等待买方撮合,这是止盈那一头;
- 止损单的触发价:低于当前价,市场价碰到它,止损那张单才被放出来;
- 止损单的限价:止损单放出来之后挂在什么价上卖。
币安帮助中心「如何使用 OCO (One-Cancels-the-Other) 功能」给的设置条件只有一行:卖单要满足「价格(限价单)> 当前市价 > 止损触发价」。顺序反了,这组单就下不出去。
币安学院那页的例子可以直接套:假设 90,000 美元买入了 0.1 BTC,想在 100,000 止盈,同时把亏损控制在 85,000 附近。下一组卖出 OCO,限价单挂 100,000,止损单触发价设 87,000、限价设 85,000。限价单先在 100,000 或更高价格成交(含部分成交),止损单取消;先跌到 87,000,止损单激活,那张 100,000 的限价单取消。
触发价和限价为什么不填成同一个数?学院页的解释是,触发价通常设得比限价高一些,给行情快速变化留出余地。帮助中心在页末也有一句类似的话:为了让止损限价单更快成交,限价可以比触发价稍微低一点(卖出时)。触发价和委托价各管什么,止盈止损和条件单那篇拆得更细。
买入 OCO 把方向整个反过来,别当成止盈止损来读
买入 OCO 不能照着止盈止损去读。它不是给持仓设出场,是给「还没买」设两个进场条件:跌下来就低价接,涨上去就追。
帮助中心的图示是这么标的:当前价格是 A,上方的 B 是「限价追涨单」的触发价,下方的 C 是「抄底的被动限价单」价格。图上的数字是 3,000 和 1,500:价格涨到 3,000,追涨单触发,1,500 那张限价买单撤销;限价买单在 1,500 或更低价格成交(含部分成交),追涨单撤销。到价不代表你的全部数量都能成交,还要看对手盘和排队情况。
对应的设置条件也倒过来:买单要满足「价格(限价单)< 当前市价 < 止损触发价」。限价在下,触发价在上。
| 面板上的栏位 | 卖出 OCO(手里有币) | 买入 OCO(手里是计价币) |
|---|---|---|
| 限价单的价格 | 高于当前价,等待撮合卖出 | 低于当前价,等待撮合买入 |
| 止损单的触发价 | 低于当前价 | 高于当前价 |
| 止损单的限价 | 官方建议比触发价稍低 | 官方建议比触发价稍高 |
| 这张止损单实际在做的事 | 跌破后卖出离场 | 涨破后追价买入 |
面板上的栏位名字却不跟着换。帮助中心讲 App 步骤时用的正是买入 OCO,栏位仍然写在「止盈」「止损」两个区块下面:止盈区块的【限价】是那张被动限价单的价格,【触发价】是止损限价单的触发价,止损区块的【限价】是止损限价单的限价。买入时看到「止损」两个字,心里要换成「追涨那张单」。
币安现货的 OCO 在哪里选
照帮助中心那页写的入口(页面只标了发布日期 2019 年 8 月 19 日,没有更新日期,按钮位置以你当前看到的面板为准):
- 网页端:【交易】-【现货交易】,在【止盈止损】那一栏的下拉菜单里选 OCO。它不在限价、市价旁边单列,收在止盈止损下面。
- App:【交易】-【现货交易】,订单种类下拉里选【OCO】。
- 填三个价格和一个【数量】,点【买入】或【卖出】。
- 提交后到【未结订单】里看,这一组单会列在那里。
币安现货接口文档交易接口页里「新订单列表 - OCO」一节还交代了几件面板上不写的事。数量参数的说明是「两个订单的数量」,也就是两张单同一个数,不能上面卖一半、下面卖全部。一组 OCO 在挂单数量限制里算 2 张单。价格高低比的是「最后交易价格」,也就是最新成交价。
本文这套搭配的被动限价单对应 LIMIT_MAKER,即只做挂单;API 还支持其他 OCO 组合,不能把这三个价格栏套到所有类型上。只做挂单的单子不能一提交就吃掉对手盘。挂单和吃单的分界见挂单和吃单差在哪。
止损那张单「被触发」就会撤掉止盈单,可它自己未必成交
OCO 的撤单条件,两头并不对称。
帮助中心的原话是:止损单被触发,或限价订单成交或部分成交时,另一个订单自动撤销。限价单那头要真有成交才算数;止损单这头,只要触发就算,不用等它成交。
而止损单触发之后,放出来的只是一张限价单。还是上面那组假设的数字:触发价 87,000、限价 85,000。行情跌到 87,000,100,000 的止盈单立刻被撤,一张 85,000 的限价卖单挂进市场。有足够买单承接,才可能在 85,000 或更高价格成交;没有足够承接,便可能部分成交或一直未成交。学院页对这种情况的描述是:市场波动过快时,价格可能在找到买家之前就跌破限价,导致限价单无法成交。
若价格已跌到限价下面且一直没有成交,止盈单没了,止损单没卖掉,币仍在手里。
反过来的情况同样要留意。帮助中心和学院页都写了「部分成交」:止盈限价单哪怕只成交了一部分,止损单也会自动取消。剩下没卖完的那部分继续挂在止盈价上,但下方已经没有止损在守着,要不要补一张,得自己回【未结订单】看一眼。
限价离触发价留多宽,没有一个通用的数。留得宽,成交把握大,卖出的价格可能比预想的低;留得窄,价格好看,落空的可能大。这是用止损限价单就绕不开的取舍,OCO 没有替你消掉它,只是把另一头的止盈单顺手管了。
手动撤一张,另一张跟着走
学院页写得明白:手动取消 OCO 组合中的其中一笔,系统同步取消另一笔。想只改止损位、保留止盈单,做不到单独动一张,只能整组撤掉重下。
重新下单前,先看最新价。原来放在现价下方的触发价,可能已经在现价上方;三个价格需要重新核对,不能照抄上一组。
顺带一提 OTOCO。学院页介绍它是币安 2024 年 6 月推出的相关订单类型:先挂一张开仓单,这张全部成交之后,系统再激活一组 OCO 管出场。OCO 本身既能买入也能卖出;OTOCO 则多了前置订单,等它全部成交后才启用后面的 OCO。
下单时卡住的三个问题
OCO 订单的止盈单只成交了一部分,止损单还在吗?
不在了。币安帮助中心「如何使用 OCO (One-Cancels-the-Other) 功能」写的是限价订单成交或部分成交时,另一个订单自动撤销;币安学院术语表也写其中一笔订单全部或部分成交时系统自动取消另一笔。没卖完的部分继续挂在限价上,下方不再有止损单。
OCO 下单提示价格不对,三个价格的高低顺序是什么?
币安帮助中心给的设置条件是:卖单要满足 限价单价格 > 当前市价 > 止损触发价;买单要满足 限价单价格 < 当前市价 < 止损触发价。币安现货接口文档里对照的是最后交易价格。止损单的限价不在这条不等式里,卖出时通常比触发价略低,买入时略高。
OCO 能只撤掉其中一张单吗?
不能单独撤。币安学院术语表「OCO(二选一)订单」写明,手动取消 OCO 组合中的其中一笔订单,系统会同步取消另一笔。要改其中一个价格,只能整组撤掉后重新下一组。