Binance自成交保护为何会取消订单
币安自成交保护(STP)触发后取消订单,核心原因是为了防止同一个账户或同一交易组内的账户之间发生自我交易,避免人为制造虚假交易量或操纵价格。触发后哪个订单被取消,由吃单方订单的STP模式决定。
这种情况最常见于使用API或量化策略的用户,但在特定挂单场景下,普通用户也可能遇到。以下是自成交保护的工作机制和被取消后的处理步骤。
前置条件
- 你正在使用币安进行交易,某个订单被系统取消,状态显示为"EXPIRED_IN_MATCH"。
- 你确认该订单不是主动取消,而是系统自动操作的。
- 你能登录币安账户查看订单历史。
步骤1:确认订单是否因STP被取消
在币安App或网页端,进入【订单管理】→【历史委托】,找到被取消的那笔订单。查看订单的状态字段。
情况A:订单状态显示为"EXPIRED_IN_MATCH"
说明该订单确实因自成交保护(STP)被系统取消。这是币安判断订单因STP失效的明确标志。
情况B:订单状态显示为"CANCELED"且无特殊说明
可能是你手动取消的,或因其他原因被系统取消。检查该订单的selfTradePreventionMode字段,如果显示为EXPIRE_TAKER、EXPIRE_MAKER或EXPIRE_BOTH,说明与STP有关。
完成标准:确认订单确实因STP被取消。
步骤2:了解自成交保护是如何触发的
自成交可能发生在两种情况下:
- 同一账户内:你自己的买单和卖单发生了匹配。
- 同一交易组内:主账户与子账户之间发生了匹配。
触发STP后,系统根据吃单方(Taker)订单的STP模式决定取消哪个订单:
| STP模式 | 效果 |
|---|---|
EXPIRE_TAKER | 取消吃单方的剩余挂单 |
EXPIRE_MAKER | 取消挂单方的剩余挂单(普通用户默认) |
EXPIRE_BOTH | 同时取消吃单方和挂单方的剩余挂单 |
NONE | 不触发STP,允许自成交 |
完成标准:知道哪个订单被取消,以及对应的触发模式。
步骤3:选择应对方式
情况A:订单被误取消,需要重新下单
- 确认被取消的订单数量和价格。
- 在交易页面重新提交一张新的订单。
- 如果你使用API且需要避免STP,可以设置订单的STP模式为
NONE(需确认该交易对支持此模式)。
情况B:订单被取消是正常现象(使用量化策略)
如果使用API,币安的API订单默认启用STP。如果你不希望自己的策略订单因自成交被取消,可以在下单时通过selfTradePreventionMode字段指定模式。
完成标准:订单重新提交成功,或策略已按需调整。
常见失败原因
误以为STP只影响API用户,实际普通用户也可能遇到
虽然大多数普通用户的STP默认取消挂单方(Maker)订单,但在某些特定挂单场景下(例如同时挂出买卖单且价格交叉时),STP机制同样会生效并取消订单。如果你在普通交易中遇到订单无故被取消,不要直接归咎于系统故障——先检查自己是否同时存在价格交叉的挂单。
风险提醒
- 自成交可能被视为市场操纵:一些司法管辖区将反复自成交视为市场操纵行为。即使STP阻止了自成交,频繁触发也可能引起风控关注。
- STP生效时可能会产生"被阻止数量":被取消的订单数量会计入该订单的"preventedQuantity"字段。对于API用户,可以通过
GET /api/v3/preventedMatches接口查询被阻止的匹配记录。
如何确认操作完成
重新下单后,在【当前委托】中查看新订单的状态。如果显示为"挂单中"或"已成交"而不是"已取消",说明订单已正常进入撮合队列。
如果订单再次被取消,检查是否又触发了STP。如果是,考虑调整订单价格或使用NONE模式(需确认支持)。
