tracepu
Português (Brasil)

Status da ordem

Ordem da Binance expirou sem você cancelar: o que acontece quando sua compra encontra sua própria venda

A prevenção de autonegociação é uma das causas de ordem expirada. No modo padrão, EXPIRE_MAKER, o restante da ordem que já estava no livro é encerrado; confirme o motivo antes de enviar outra ordem.

Exemplo do modo EXPIRE_MAKER: uma ordem de venda sua de 10 AAA a 1,20 está no livro, uma nova ordem de compra sua chega até ela, o restante da venda antiga expira e a compra nova segue casando ou fica no livro
Exemplo no modo EXPIRE_MAKER: quando a ordem nova está para casar com uma ordem antiga sua, o restante da antiga expira e a nova continua sendo processada.

Você não cancelou nada, mas a sua ordem limitada na Binance aparece como Expirada. Uma explicação possível é a prevenção de autonegociação (Self-Trade Prevention, ou STP): o sistema impede que uma ordem de compra sua seja executada contra uma ordem de venda sua. Imagine uma venda sua parada no livro e uma compra nova, também sua, chegando até ela — é aí que o STP entra. Só a palavra “Expirada”, porém, não prova a causa. O que comprova é o status EXPIRED_IN_MATCH ou o registro da execução que foi bloqueada.

No anúncio de lançamento, a Binance diz que o modo padrão, EXPIRE_MAKER, faz expirar toda a quantidade restante da ordem que já estava no livro, e a ordem nova segue o seu caminho. O que a ordem antiga já tinha executado continua valendo, e o saldo reservado para a parte não executada é desbloqueado. Quem envia ordens pela API pode ter escolhido outro modo; nesse caso quem termina pode ser a ordem nova, ou as duas, e o registro mostra qual modo foi aplicado.

Por que a ordem antiga terminou se você não cancelou

O FAQ de STP da documentação da API Spot da Binance (em inglês) define autonegociação como uma ordem que seria negociada contra outra da mesma conta, ou de uma conta com o mesmo tradeGroupId. Contas com o mesmo tradeGroupId pertencem ao mesmo grupo de negociação. Quando esse campo retorna -1, a conta não tem grupo definido e o STP só se aplica às ordens da própria conta.

FAQ de STP no repositório oficial da Binance no GitHub, em inglês: mesma conta ou mesmo tradeGroupId, seguidos dos modos EXPIRE_TAKER, EXPIRE_MAKER e EXPIRE_BOTH
No FAQ de STP do repositório oficial da Binance no GitHub, “What defines a self-trade?” lista a mesma conta e contas com o mesmo tradeGroupId. Logo abaixo estão os modos e a quantidade que cada um faz expirar. Captura de outubro de 2026.

Se a ordem antiga termina ou não depende do modo usado naquele casamento. Três modos fazem expirar toda a quantidade restante:

  • EXPIRE_MAKER: expira na hora o restante da ordem que já estava no livro esperando execução (o lado maker, ou formador).
  • EXPIRE_TAKER: expira o restante da ordem que acabou de chegar para consumir liquidez (o lado taker, ou tomador).
  • EXPIRE_BOTH: expira o restante das duas.

As regras públicas do par BTCUSDT, consultadas em outubro de 2026, trazem defaultSelfTradePreventionMode igual a EXPIRE_MAKER. O campo allowedSelfTradePreventionModes, porém, também lista DECREMENT e TRANSFER — então não dá para supor que todo modo acabe com a ordem antiga inteira. Para outro par, troque BTCUSDT no endereço pelo código dele e procure esses dois campos.

O anúncio de 11 de outubro de 2023 (em inglês) confirma o EXPIRE_MAKER como padrão e avisa que usuários de API podem escolher outro modo. Os exemplos a seguir partem desse padrão. Se você opera por API ou por um robô de trading, confira antes o selfTradePreventionMode que foi enviado de fato: nos três modos de expiração acima, vale o modo escolhido pela ordem taker, a que chegou por último.

Dois exemplos no modo padrão: compra encontrando venda sua

Exemplo 1: você tem uma ordem limitada de venda de 10 AAA a 1,20 no par AAA/USDT. Ela é a melhor oferta de venda do livro e está em primeiro lugar na fila desse preço. Você muda de ideia e manda uma ordem de compra a mercado, ou uma compra limitada a 1,20 ou mais. A primeira ordem que a compra encontra é a sua própria venda. Resultado: os 10 AAA restantes da venda expiram inteiros, e não apenas a parte que coincidia com a compra.

Exemplo 2: você deixou uma compra limitada de 50 AAA a 0,95 na frente da fila de compras e, depois, vende a mercado outros AAA que já tinha. A venda bate primeiro na sua própria compra, que então expira; os USDT que estavam reservados para ela voltam ao saldo disponível.

Nos dois casos, depois que a ordem antiga expira, a nova continua: se encontrar ordens de outras pessoas, executa. O que sobrar dela só fica no livro se o tipo de ordem e a validade permitirem — uma limitada GTC, por exemplo. Uma ordem a mercado, IOC ou FOK não vira uma ordem comum parada no livro só porque desviou da sua ordem antiga.

Preço compatível não basta. As duas ordens precisam chegar a casar de fato. Se a ordem nova for totalmente executada contra ordens de terceiros antes, ela nunca alcança a sua antiga; e se o preço da antiga estiver fora do alcance da nova, o STP nem é acionado.

Depois do STP: o que acontece com a parte executada e o saldo bloqueado

Nos três modos, a documentação fala em expirar a quantidade restante. Se a ordem antiga já tinha sido executada em parte, faça a conta: ordem original de 10 AAA, 3 AAA já vendidos, restante = 10 − 3 = 7 AAA. A execução dos 3 AAA e a taxa cobrada sobre eles ficam no histórico; no modo EXPIRE_MAKER, o que expira são os 7 AAA.

A parte bloqueada pelo STP não foi negociada. Por isso ela não aparece no histórico de execuções e não gera taxa de negociação. O ativo que a ordem mantinha reservado — AAA, no caso de uma venda; USDT, no caso de uma compra — deve voltar ao saldo disponível quando a ordem termina. Se a ordem já terminou e o disponível ainda não fecha com o que você esperava, siga em saldo disponível e bloqueado na Binance.

Como saber se a ordem expirou por autonegociação ou por outro motivo

No site ou no app da Binance, abra o histórico de ordens Spot, filtre pelo par e pela data, entre nos detalhes da ordem antiga e localize a ordem do lado oposto para comparar. Os nomes dos menus mudam conforme a versão; o que importa são três pontos:

  1. Status e motivo: veja se os detalhes citam a prevenção de autonegociação. Se aparecer só “Expirada”, ainda não dá para separar o STP de outras causas.
  2. Horário de término: compare com o momento em que a ordem oposta tentou casar. Horários próximos são uma pista, não uma prova.
  3. Quantidade executada: separe o que foi negociado do que foi bloqueado. A parte barrada pelo STP não conta como execução, mas no mesmo processo a ordem pode ter tido execuções normais com outras pessoas.

Pela API, essa expiração tem status próprio, EXPIRED_IN_MATCH, diferente do EXPIRED comum. A quantidade bloqueada fica em preventedQuantity, e cada bloqueio pode ser consultado no endpoint preventedMatches. Se você usa só o site ou o app e os detalhes não mostram o motivo, anote os números das duas ordens e o par e peça ao suporte oficial que confira. Não conclua nada só porque os horários batem.

Outros motivos para uma ordem aparecer como expirada

O STP não é a única origem. Se aqueles três pontos não fecharem, passe por estas possibilidades:

  • Validade da ordem: numa IOC, o que não for executado na hora é encerrado; numa FOK, se a ordem não puder ser executada inteira de imediato, nada é executado. Essas validades, por si só, já podem deixar a ordem como expirada — veja ordem parcialmente executada.
  • Regras de preço: se, no momento do casamento, o preço de execução sair da faixa permitida, a ordem pode expirar. Isso é diferente de a ordem ser recusada logo no envio porque o preço limite não passou no filtro — veja ordem limitada com preço fora da faixa.
  • Par suspenso ou retirado: quando o status do par muda, as ordens abertas podem ser encerradas conforme as regras — veja o que acontece com as ordens de um par suspenso.

Se você não mandou nenhuma ordem do lado oposto manualmente, verifique se algum robô de trading mandou, e se existe outra conta no mesmo tradeGroupId. No fim, quem decide é o motivo da expiração e o registro de execução bloqueada; “eu não mexi em nada naquela hora” não basta para descartar o STP.

Quer mudar o preço? Cancele a ordem antiga antes de enviar a nova

Se a ideia é só ajustar o preço de venda, o caminho é editar ou cancelar a venda original. Mandar uma compra é trocar de lado. Se você quer mesmo inverter a posição, decida primeiro se a ordem antiga deve continuar. Jogar uma ordem nova do lado oposto contra ela, no modo EXPIRE_MAKER, encerra todo o restante da antiga — e talvez não fosse isso que você queria.

A sequência mais segura: cancele a ordem antiga em Ordens em aberto, espere ela aparecer como cancelada no histórico e o saldo bloqueado voltar ao disponível, e só então envie a nova. Uma execução pode acontecer entre o pedido de cancelamento e o cancelamento em si; por isso, calcule quanto comprar ou vender na ordem nova a partir do status final e da quantidade executada.

Se o STP já foi acionado, confira primeiro se o restante da ordem antiga terminou e depois se a nova foi executada, continua no livro ou também terminou. Assim você evita mandar a mesma ordem duas vezes. Guarde os números das duas ordens; para o roteiro completo de conferência, use primeira negociação Spot na Binance.