Binance自成交保护选EXPIRE_TAKER还是MAKER?
EXPIRE_TAKER优先,多数情况EXPIRE_TAKER更合适。如果你的目标是"尽量让挂单留着",选它;如果你的目标是"挂单别被吃掉",选EXPIRE_MAKER。两者的区别在于"牺牲谁"来避免自成交。
1. 先搞懂STP的两种模式怎么运作
自成交是指你的两个订单(一个买单、一个卖单)在订单簿上互相成交了。大多数情况下这是无意的,而且会白白损失手续费、搞乱你的仓位。币安的STP机制就是为了阻止这种事发生。
当系统检测到你的taker(吃单)和某个maker(挂单)可能会自成交时:
EXPIRE_TAKER:系统会立即过期taker订单的剩余数量,挂单(maker)保留。相当于"新来的那个单子自己走掉,别碰我的挂单"。
EXPIRE_MAKER:系统会立即过期订单簿上的maker订单,taker继续执行。相当于"旧挂单让路,让新单子成交"。
两者的核心区别,就是"牺牲哪个"来避免自成交。
2. 什么时候选EXPIRE_TAKER
币安绝大多数普通用户的默认STP行为是maker过期(EXPIRE_MAKER),但这不一定是最适合你的选择。
选EXPIRE_TAKER的场景:
你有重要的挂单(比如限价单)已经在订单簿上等着,不想被触发自成交时意外撤销。做量化或网格策略时,挂单的位置通常是精心计算的,用EXPIRE_TAKER能确保挂单安全。
你在做吃单(Taker)策略,愿意吃进去流动性,但不想"吃掉自己的单子"。如果你挂了一个买单等着抄底,同时又下一笔市价卖单,选EXPIRE_TAKER可以让卖单失效,买单继续挂。
举个例子:你在60000挂了一个BTC的买单等回调。突然你需要套现,下了一个市价卖单。如果系统默认用EXPIRE_MAKER,你的60000买单会被系统直接撤销。你套现成功了,但抄底的单子没了。如果选EXPIRE_TAKER,市价卖单会失效(或部分失效),你60000的挂单还在。
3. 什么时候选EXPIRE_MAKER
选EXPIRE_MAKER的场景:
你更想让吃单成交,宁愿牺牲现有的挂单。比如某个挂单已经不符合你的当前策略了,让它被冲掉反而是件好事。
你想主动取消旧的限价单,但又不想支付手动撤单的操作成本——用EXPIRE_MAKER让新单子"吃掉"旧挂单,相当于"零成本撤单"。
特别提醒:币安文档明确说明,STP行为由taker订单的STP模式决定。你挂到订单簿上的订单的STP模式,在未来匹配时会被忽略。所以关键是在"发起吃单"的那一刻选对模式,而不是看你挂单时填了什么。
前置条件:你使用的是币安Spot、Margin或合约市场的API下单。普通用户在App/Web端下单时,STP模式通常是系统默认的,无法手动切换。
4. 其他两种模式什么时候用
还有两种模式,但大部分普通用户不太会用到:
EXPIRE_BOTH:自成交时,taker和maker订单都被撤销。如果你想"彻底清零"防止意外,可以用这个。
NONE:关闭STP保护,允许自成交。除非你非常清楚自己在做什么,否则不建议用。自成交在一些地区可能被视为市场操纵。
常见失败原因:误以为"挂单时设了什么模式,以后就一直生效"。实际上,STP事件由taker订单的模式决定,maker订单的STP模式在挂上订单簿后就会失效。
风险提醒:自成交会白白损失手续费,不会增加你的净仓位。高频交易或网格策略中,频繁自成交会显著增加交易成本。如果你用多个子账户(同一tradeGroupId),也同样受STP规则约束。
做完以上判断,怎么确认自己选对了?
如果你希望"旧挂单"被保护,被冲掉的是"新吃单"——用EXPIRE_TAKER。如果你希望"新吃单"优先成交,愿意放弃"旧挂单"——用EXPIRE_MAKER。下次用API下单时,在请求里加上"selfTradePreventionMode": "EXPIRE_TAKER"或"EXPIRE_MAKER"就行。如果不确定,先在测试网跑一次,看系统到底撤销了哪个订单。



