⚠️ Aviso Importante
Antes de ler e utilizar esta estratégia, preste atenção aos três pontos a seguir:
1. A estratégia requer paciência para aguardar oportunidades de abertura de posição
A deslistagem de contratos perpétuos na Binance é um evento de baixa frequência, que não ocorre todos os dias. Após iniciar a estratégia, pode ser necessário aguardar vários dias ou até mais tempo para que a primeira abertura de posição seja acionada. Durante a maior parte do tempo de execução, o programa ficará em estado de "monitoramento em espera". Esteja preparado psicologicamente para longos períodos de espera e não ache que a estratégia falhou por não haver negociações em curto prazo.
2. Ainda há espaço para otimização no momento da detecção de abertura de posição
Este artigo adota uma abordagem de consulta da interface fapi/v1/exchangeInfo a cada 15 segundos, identificando o sinal de deslistagem através da alteração no campo deliveryDate. Este método apresenta certa latência em testes com conta real, não sendo o caminho mais rápido. Os leitores podem otimizar o método de detecção conforme suas necessidades, por exemplo: reduzindo o intervalo de consulta, monitorando em paralelo a API de anúncios da Binance, assinando push via WebSocket, ou combinando múltiplas fontes de sinal para validação cruzada, a fim de buscar um ponto de entrada mais precoce. Quanto mais cedo entrar, maior será a queda máxima aproveitada na primeira onda de queda acentuada.
3. É fundamental desligar a estratégia a tempo de evitar o recuo dos lucros
Em observações com conta real, nem todos os pares deslistados caem de forma monotônica até o momento da deslistagem. Alguns ativos sofrem uma queda acentuada após o anúncio, mas depois se recuperam gradualmente ao longo de horas ou até um dia, podendo o preço retornar ao nível anterior ao anúncio. Se a estratégia não for desligada a tempo, os lucros flutuantes acumulados anteriormente podem ser drasticamente consumidos na recuperação, podendo até mesmo transformar lucro em prejuízo.
Recomenda-se definir qualquer uma das seguintes condições como sinal de saída ativa:
-- Encerrar imediatamente a posição ao atingir a meta de lucro pré-definida;
-- Forçar o fechamento da posição quando o preço se recuperar acima de uma certa proporção (por exemplo, 20%~30%) do ponto mais baixo após o anúncio;
-- Acionar a proteção de take profit quando o recuo da posição atingir uma certa proporção do lucro máximo (por exemplo, 30%~50%).
Não espere passivamente até os 60 minutos finais antes da deslistagem para fechar a posição — esse é um mecanismo de segurança, não o momento ideal de saída.
Introdução
No mercado de contratos perpétuos da Binance, existe um tipo especial de oportunidade de negociação que a maioria das pessoas ignora — eventos de deslistagem de contratos.
Periodicamente, a Binance publica anúncios declarando que certos contratos perpétuos com baixa liquidez ou volume de negociação reduzido serão deslistados. No momento do anúncio, o mercado reage rapidamente: traders com posições compradas são forçados a liquidar, vendas em pânico se sucedem, e o preço da moeda geralmente sofre uma queda violenta nos primeiros minutos após o anúncio, entrando depois em uma longa tendência de baixa oscilante até a deslistagem final.
Tomando MLNUSDT como exemplo:
Em meia hora, perdeu quase um terço do valor, e todo o ciclo de deslistagem geralmente dura vários dias, durante os quais o preço oscila em níveis baixos. Esse tipo de mercado é um campo fértil natural para estratégias vendidas.
No entanto, operar manualmente esse tipo de oportunidade apresenta dois desafios:
Primeiro, a informação é extremamente sensível ao tempo. Os primeiros 5 minutos após o anúncio são a janela de maior queda. Se perder o momento de entrada, o risco de vender a descoberto depois aumenta significativamente. O monitoramento manual não consegue responder em tempo real 24 horas por dia, 7 dias por semana.
Segundo, o mercado não é uma queda linear. Durante o processo de queda do preço, ocorrem constantes recuperações. Manter apenas posições vendidas, embora capture o lucro da tendência, perde inúmeras oportunidades de diferença de preço de alta frequência durante as recuperações.
É para resolver esses dois problemas que este artigo apresenta uma estratégia automatizada completa: através de um programa que monitora em tempo real os sinais de deslistagem da Binance, abre automaticamente uma posição vendida de base no momento do anúncio, enquanto inicia uma grade vendida dinâmica para capturar continuamente diferenças de preço oscilantes na tendência geral de baixa, e finalmente fecha a posição automaticamente antes da deslistagem, sem qualquer intervenção manual.
I. Por que este tipo de mercado
Antes de aprofundar na estratégia, precisamos primeiro entender as características do movimento de preços dos pares deslistados, que são a base do design de toda a estratégia.
1.1 O impacto de mercado do anúncio de deslistagem
Quando a Binance anuncia a deslistagem de um contrato perpétuo, a primeira reação do mercado é pânico. Os traders com posições compradas sabem que o contrato está prestes a desaparecer e precisam liquidar antes da deslistagem, caso contrário, serão forçados a liquidar. Essa venda concentrada forma uma forte pressão de venda de curto prazo, levando a uma rápida queda no preço.
Ao mesmo tempo, os formadores de mercado rapidamente reduzem seus spreads ou retiram liquidez, amplificando ainda mais a volatilidade dos preços. É por isso que os primeiros minutos após o anúncio de deslistagem geralmente são o período de maior queda em todo o ciclo.
1.2 O padrão de queda oscilante
Após a primeira queda acentuada, o preço não cai em linha reta até o fundo, mas apresenta um movimento típico de queda oscilante:
A formação desse movimento tem sua lógica interna: cada recuperação é resultado de traders de curto prazo que acreditam que a queda foi excessiva e tentam comprar na baixa, mas como o cenário fundamental não mudou (o contrato está prestes a desaparecer), essas compras logo ficam presas e o preço recomeça a cair. As alturas das recuperações tornam-se cada vez mais baixas, até que a liquidez se esgota completamente antes da deslistagem.
Essa oscilação regular é o ambiente mais adequado para estratégias de grade.
1.3 Duas fontes de lucro
Com base na análise acima, podemos projetar dois caminhos de lucro independentes:
| Fonte de Lucro | Ferramenta Correspondente | Condição de Lucro |
|---|---|---|
| Queda de tendência | Posição vendida de base | Preço geralmente para baixo |
| Diferença de oscilação | Grade vendida | Preço oscila repetidamente dentro de um intervalo |
A combinação de ambos confere à estratégia uma forte capacidade de lucro em mercados de deslistagem. Mesmo que o preço se recupere significativamente, a parte da grade ainda pode continuar colhendo diferenças de preço; e enquanto a tendência geral for de baixa, a posição de base continua lucrando.
II. Princípio de Monitoramento: Como detectar o sinal de deslistagem o mais rápido possível
Para monitorar informações de contratos, esta estratégia adota um método mais direto: monitorar diretamente as alterações de dados na interface de contratos da Binance.
2.1 O segredo do campo deliveryDate
A interface fapi/v1/exchangeInfo da Binance retorna informações detalhadas de todos os contratos, incluindo um campo chamado deliveryDate, que indica o momento de entrega do contrato.
Para contratos perpétuos, este campo é geralmente definido com um timestamp de um futuro distante:
4133404800000 → corresponde a 31 de dezembro de 2100
Isso atua como um placeholder equivalente a "nunca expira".
O ponto chave é: quando a Binance decide deslistar um contrato perpétuo, ao mesmo tempo em que publica o anúncio, ela altera o deliveryDate do contrato para o timestamp real do momento da deslistagem.
Contrato perpétuo normal: deliveryDate = 4133404800000 (nunca expira)
Contrato prestes a ser deslistado: deliveryDate = 1744106400000 (2026-04-08 17:00:00)
Essa alteração é refletida imediatamente nos dados da interface, sendo mais rápida e estruturada do que a renderização da página de anúncio, sem necessidade de analisar nenhum HTML.
2.2 Implementação do código de monitoramento
A cada 15 segundos, a interface é consultada, filtrando os contratos perpétuos USDT cujo deliveryDate já mudou para um timestamp real:
python
def fetch_delist_symbols():
body = HttpQuery("https://fapi.binance.com/fapi/v1/exchangeInfo")
data = json.loads(body)
now_ms = get_now_ms()
result = {}
for s in data.get("symbols", []):
if not s["symbol"].endswith("USDT"):
continue
if s.get("contractType") != "PERPETUAL":
continue
dd = s.get("deliveryDate", PERPETUAL_END)
if dd < PERPETUAL_END and dd > now_ms:
result[s["symbol"]] = dd
return result
Exemplo de resultado retornado:
python
{
"HIPPOUSDT": 1744106400000, # 2026-04-08 17:00:00
"OLUSDT": 1744106400000,
"RLSUSDT": 1744106400000,
"PUFFERUSDT":1744106400000,
}
Nota: Em testes com conta real, houve um pequeno atraso; métodos de verificação mais rápidos podem ser escolhidos.
III. Arquitetura da Estratégia
Toda a estratégia é composta por dois módulos executados em paralelo:
Ao descobrir um novo contrato, um objeto task é criado de forma independente para cada contrato, contendo todo o seu estado:
python
task = {
"symbol": "HIPPO_USDT",
"delist_time_ms": 1744106400000,
"fund_per_task": 250.0, # Fundos alocados
"base_short_qty": 1500000, # Quantidade da posição vendida de base
"range_high": 0.0005287, # Limite superior da grade
"range_low": 0.0004758, # Limite inferior da grade
"grid_width": 0.0000529, # Largura do intervalo (fixa)
"grids": [...], # Estado dos 10 intervalos da grade
"shift_count": 0, # Número de movimentos já realizados
...
}
Os tasks de múltiplos contratos são independentes entre si, não interferindo e sendo executados em paralelo.
IV. Alocação de Capital
Ao descobrir N contratos prestes a serem deslistados, o saldo disponível da conta é dividido dinamicamente de forma igual:
Capital alocado por contrato = Saldo disponível × 80% / N
Os 20% restantes servem como buffer de margem, para evitar liquidação devido a uma recuperação de preço de curto prazo.
Detalhe crucial: Ao inicializar vários contratos sequencialmente, a cada inicialização de um contrato, o saldo disponível da conta diminui (a posição de base ocupa margem). Portanto, o capital alocado para todos os contratos não pode ser calculado de uma só vez antes do início do loop; em vez disso, a consulta deve ser refeita antes de cada inicialização:
python
for idx, (binance_sym, delist_ms) in enumerate(delist_map.items()):
update_global_account()
remaining_count = total_new - idx
available_now = total_balance - margin_used
fund_per_task = available_now * 0.8 / remaining_count
task = init_task(binance_sym, delist_ms, fund_per_task)
Isso garante que cada contrato receba uma alocação razoável de fundos, evitando que os contratos anteriores consumam muita margem e deixem os posteriores com capital insuficiente.
5. Detalhamento da Posição Base e da Grade
5.1 Abertura de Venda da Posição Base
Assim que o anúncio é emitido, na inicialização, abre-se imediatamente uma venda a mercado, sem esperar pela grade:
Posição nominal da posição base = Fundos alocados × 50% × Alavancagem
Exemplo: Fundos alocados = 250U, Alavancagem = 10x
Posição nominal da posição base = 250 × 50% × 10 = 1250U
A posição base é mantida durante todo o percurso, não participa das aberturas e fechamentos repetitivos da grade, e só é liquidada juntamente com o fechamento forçado antes do delisting.
A posição base é a parte mais lucrativa de toda a estratégia — se o ativo a ser delistado cair 50% desde o anúncio até o delisting, a posição base contribui com esses 50% de ganho na venda (multiplicados pela alavancagem).
5.2 Configuração da Grade de Venda
Com o preço atual como limite superior e 10% abaixo como limite inferior, dividido uniformemente em 10 níveis:
Exemplo (preço atual 0.0005287, largura do intervalo 10%):
Limite superior = 0.0005287
Limite inferior = 0.0005287 × (1 - 10%) = 0.0004758
Espaçamento = (0.0005287 - 0.0004758) / 10 = 0.0000053
Nível 9: Abrir venda @0.0005287 → Fechar venda @0.0005234
Nível 8: Abrir venda @0.0005234 → Fechar venda @0.0005181
Nível 7: Abrir venda @0.0005181 → Fechar venda @0.0005128
...
Nível 0: Abrir venda @0.0004811 → Fechar venda @0.0004758
Os fundos de cada nível são igualmente distribuídos. A lógica é simples: quando o preço sobe até o preço de abertura da venda, a ordem pendente é executada e a venda é aberta; quando o preço cai até o preço de fechamento da venda, a ordem pendente é executada e a venda é fechada; concluído um ciclo, a ordem de venda é recolocada, aguardando a próxima recuperação.
5.3 Estratégia de Colocação de Ordens na Iniciação
Na inicialização, todas as grades cujo preço de abertura da venda seja >= o preço atual são colocadas:
Preço atual 0.0005287
Nível 9 preço de abertura = 0.0005287 ≥ 0.0005287 → Ordem colocada ✅
Nível 8 preço de abertura = 0.0005234 < 0.0005287 → skip_below (preço já caiu)
Níveis 7 e abaixo: todos skip_below
Colocam-se todas as grades acima do preço atual porque, em um movimento de queda, o preço pode ter recuperações inesperadas a qualquer momento. Colocar todas as grades antecipadamente garante que nenhuma oportunidade de venda devido a essas recuperações seja perdida.
6. Movimentação Dinâmica do Intervalo
Este é o mecanismo mais central de toda a estratégia. O preço não permanece para sempre no intervalo inicial; a grade precisa acompanhar o movimento do preço para continuar capturando os spreads.
6.1 Movimento para Baixo (Abaixo do Limite Inferior)
Quando o preço cai abaixo do limite inferior da grade, significa que a queda ultrapassou a cobertura do intervalo atual, sendo necessário mover todo o intervalo para baixo:
Intervalo antigo: 0.0004758 ~ 0.0005287
Preço atual: 0.0004500 (abaixo do limite inferior 0.0004758)
Cálculo do novo intervalo (passo de movimento 5%):
shift_step = 0.0004500 × 5% = 0.0000225
Novo limite superior = 0.0005287 - 0.0000225 = 0.0005062
Novo limite inferior = 0.0005062 - 0.0000529 = 0.0004533
Novo intervalo: 0.0004533 ~ 0.0005062
6.2 Movimento para Cima (Recuperação Acima do Limite Superior)
Quando o preço sobe acima do limite superior da grade, o intervalo acompanha o movimento para cima:
Intervalo antigo: 0.0004494 ~ 0.0005023
Preço atual: 0.0005100 (acima do limite superior 0.0005023)
Novo intervalo desloca-se para cima, garantindo que o preço atual esteja dentro do novo intervalo.
Novo intervalo: 0.0004758 ~ 0.0005287
Este mecanismo garante que, independentemente da volatilidade do preço, a grade sempre acompanha a movimentação, evitando que o preço saia do intervalo e todas as grades fiquem vazias.
6.3 Largura do Intervalo Permanece Constante
Cada movimento altera apenas a posição do intervalo, não a sua largura:
python
grid_width = round(range_high - range_low, 8) # Fixado na inicialização
# Ao mover para baixo
range_high = fp(task, range_high - shift_step)
range_low = fp(task, range_high - grid_width) # Calculado com largura fixa
Isso evita que erros de arredondamento em ponto flutuante façam o intervalo ficar cada vez mais estreito ou mais largo.
6.4 Mecanismo de Proteção de Posições
Ao mover o intervalo, todas as ordens pendentes são canceladas e a grade é reconstruída. Mas o que fazer com as grades que já abriram venda e estão aguardando fechamento?
Se forem reconstruídas diretamente, as posições dessas grades ficam "órfãs" — há posições vendidas sem ordens de fechamento correspondentes, tornando-se posições nuas, totalmente expostas ao risco de recuperação.
Solução: Antes de mover, registra-se a quantidade de contratos em todas as grades com posição; após o movimento, coloca-se uma ordem de fechamento de venda no nível mais baixo do novo intervalo:
python
# Resumir posições antes do movimento
holding_contracts = sum(
g.get("sell_contracts", 0)
for g in task["grids"]
if g["status"] in ("pending_cover", "holding_no_cover")
)
cancel_all_orders(task)
activate_grids(task, new_high, new_low)
# Após o movimento, colocar ordem de cobertura de venda no nível mais baixo
if holding_contracts > 0:
_place_grid_cover(task, 0, holding_contracts)
Dessa forma, não importa quantas vezes o intervalo se mova, as posições vendidas já abertas nunca perdem o rastreamento.
7. Gerenciamento Paralelo de Múltiplos Contratos
7.1 Lógica de Tratamento ao Descobrir Novos Contratos
Os fundos liberados com o fechamento de contratos antigos são redistribuídos, garantindo que novos contratos recebam capital suficiente.
7.2 Gerenciamento do Ciclo de Vida
Ciclo de vida de cada contrato:
8. Alguns Detalhes Cruciais
8.1 Armadilha de Precisão em Moedas de Preço Baixo
Moedas como HIPPOUSDT, com preço na ordem de 0.0003, enfrentam problemas de precisão ao calcular o passo de movimento do intervalo:
shift_step = 0.0003 × 5% = 0.000015
Se PricePrecision = 4 (4 casas decimais)
round(0.000015, 4) = 0.0 ← O passo se torna 0!
→ O loop while nunca termina, loop infinito
A solução é não truncar a precisão do passo e definir um passo mínimo como salvaguarda:
python
shift_step = price * SHIFT_STEP_PCT
min_step = 10 ** (-PricePrecision)
shift_step = max(shift_step, min_step) # Pelo menos igual à unidade mínima de precisão
8.2 Tratamento de Falha na Abertura da Posição Base
A abertura de venda a mercado pode falhar por falta de capital ou problemas de rede. Nesse caso, não se deve prosseguir com a construção da grade, pois isso resultaria em uma grade nua sem posição base:
python
def open_base_short(task):
oid = place_market_short(task, usdt_amount)
Sleep(1000)
amt, _, _ = get_short_position(task)
task["base_short_qty"] = amt
if amt <= 0:
Log(f"Falha ao abrir posição base, pulando este contrato")
return False
return True
# Em init_task
if not open_base_short(task):
return None # Inicialização falhou, não adicionar a tasks
8.3 Momento e Método do Fechamento Forçado
Escolhe-se 60 minutos antes do delisting em vez de 30 minutos (momento em que a Binance proíbe abertura de novas posições) para dar uma janela de tempo suficiente para o fechamento. Quanto mais próximo do delisting, menor a liquidez e maior a dificuldade de liquidar.
No fechamento, utiliza-se uma ordem limitada ligeiramente acima do preço de mercado, em vez de uma ordem verdadeiramente a mercado, para evitar ser mal combinado em condições de liquidez extremamente baixa:
python
buy_p = fp(task, price * 1.005) # 0.5% acima do mercado
exchange.CreateOrder(swapcode, "closesell", buy_p, fc)
Se não liquidar de uma vez, repete-se até 10 vezes, obtendo o preço mais recente a cada tentativa.
8.4 Ganho Adicional com Taxa de Funding
Em mercados em queda, a taxa de funding geralmente favorece os vendedores (os vendidos recebem). Esse é um ganho extra da manutenção da posição base, que não aparece nas estatísticas de spread da grade, mas reflete-se no crescimento do patrimônio da conta.
9. Sugestões de Parâmetros
python
LEVERAGE = 10 # Alavancagem, recomenda-se 5~10, não muito alta
GRID_WIDTH_PCT = 0.10 # Largura do intervalo 10%, cobre a amplitude normal de oscilação
SHIFT_STEP_PCT = 0.05 # Passo de deslocamento 5%, aproximadamente metade da largura do intervalo
GRID_COUNT = 10 # Número de grades, quanto mais grades, menos capital por grade
BASE_SHORT_RATIO = 0.5 # Posição base ocupa 50%, grades 40%, reserva 10% de margem
FORCE_CLOSE_MINS = 60 # Fechar posição 60 minutos antes
MONITOR_INTERVAL = 15000 # Monitorar a cada 15 segundos, equilibrando atualidade e frequência
Escolha da largura do intervalo: Quanto maior a largura, maior a faixa de oscilação coberta, mas a distância entre grades também aumenta, reduzindo a frequência de colheita. Recomenda-se ajustar com base na volatilidade histórica da moeda. Normalmente, 10% é um ponto de partida razoável.
Escolha do número de grades: Quanto mais grades, menor a distância entre elas, maior a frequência de colheita, mas menor o capital por grade e menor o lucro individual. Muitas grades podem causar problemas como capital insuficiente por grade para atender ao lote mínimo. 10 grades são uma escolha equilibrada.
Dez, Aviso de Riscos
Antes de usar esta estratégia, é necessário compreender plenamente os seguintes riscos:
Risco de rebote: Se a notícia já foi precificada pelo mercado antecipadamente, após o anúncio pode ocorrer um rebote do tipo "notícia ruim já precificada", causando perda temporária na posição base. A parte das grades ainda pode lucrar com a diferença durante o rebote, mas pode haver um retrocesso geral de curto prazo.
Risco de liquidez: Quanto mais próximo do momento de exclusão, pior a liquidez do contrato, maior o spread entre compra e venda, e maior o slippage ao fechar posição. A estratégia inclui um prêmio de 0,5% e 10 tentativas para mitigar isso, mas em situações extremas ainda pode não ser possível liquidar totalmente.
Risco de falso sinal: Em casos raros, a Binance pode cancelar ou adiar o plano de exclusão. Nesse cenário, a estratégia continuará mantendo posições vendidas até intervenção manual ou próxima atualização do monitoramento.
Risco de alta alavancagem: Moedas em processo de exclusão têm volatilidade extrema. Com alavancagem de 10x, mesmo um rebote de 10% pode causar perda próxima de todo o capital. Recomenda-se ajustar a alavancagem de acordo com a própria tolerância ao risco e controlar o tamanho total da posição.
Início e parada oportunos da estratégia: Com base em operações reais, alguns ativos, após um dia de queda oscilante, podem gradualmente retornar ao preço anterior ao anúncio. É necessário desligar a estratégia a tempo.
Tempo de execução: A estratégia requer espera prolongada para detectar oportunidades. É preciso paciência.
Onze, Conclusão
O valor central desta estratégia está em transformar vantagem informacional (detecção imediata do sinal de exclusão) em vantagem de negociação (execução automatizada), enquanto, por meio da estrutura dupla de posição base + grades, captura tanto o lucro da tendência quanto as diferenças de oscilação em movimentos de queda unilateral.
Os principais pontos de design de todo o sistema:
| Módulo | Design central | Problema resolvido |
|---|---|---|
Monitoramento deliveryDate | Leitura direta da alteração do campo da interface | Descoberta do sinal de exclusão em segundos |
| Alocação dinâmica de capital | Consultar saldo novamente antes de cada inicialização | Alocação equilibrada de capital entre múltiplos contratos |
| Abrir venda a mercado na posição base | Executar imediatamente após o anúncio | Não perder a primeira queda brusca |
| Ordens em todas as grades | Colocar ordens em todas as grades acima do preço atual | Não perder rebotes acima do esperado |
| Largura de intervalo fixa | Manter largura constante ao deslocar | Evitar desvios de ponto flutuante |
| Proteção de posição | Recolocar ordens de venda após deslocamento | Evitar posição descoberta |
| Fechamento 60 minutos antes | Deixar janela de tempo suficiente para liquidar | Lidar com baixa liquidez |
O movimento de exclusão não ocorre todos os dias, mas cada vez que aparece, é uma oportunidade de negociação com relativa alta certeza. Por meio de monitoramento e execução automatizados, é possível participar dessas oportunidades de forma estável, sem necessidade de acompanhamento constante da tela.
Código fonte da estratégia: Estratégia de grade para contratos em exclusão
- 1







