Como criar robô Trailing Stop para Binance Spot em Node.js

Bot Cripto

Como criar robô Trailing Stop para Binance Spot em Node.js

Luiz Duarte
Escrito por Luiz Duarte em 22/05/2025
Junte-se a mais de 34 mil devs

Entre para minha lista e receba conteúdos exclusivos e com prioridade

No trading a gente costuma chamar de stop o ponto onde você decide entrar ou sair de uma operação. Por exemplo, se você decide comprar um ativo a R$1k, seu stop de compra é R$1k. Se você decide vender um ativo a R$2k, seu stop de venda é R$2k. Valores fixos como esses são também chamados de limites ou stop fixo.

No caso de Trailing Stop ou Stop Móvel, o ponto de compra ou venda não possui um valor fixo, mas dinâmico, ele se movimenta conforme o mercado segue uma tendência inicial que você estipulou. Por exemplo, se você acredita que o ativo está caindo mas não quer definir um preço mínimo de compra, você pode definir um stop móvel para comprar no mais fundo que chegar. Ou o contrário, se você acredita que o ativo vai subir ainda mais, mas não sabe até quando, você pode definir um stop móvel para comprar no mais alto que chegar. Assim, toda vez que o preço do ativo se mantém na mesma direção que você previu inicialmente, o stop é atualizado, automaticamente.

Mas então, se o stop é móvel, quando é que o stop será ativado de fato, concretizando o trade? Ou melhor, quando sabemos que o ativo chegou no topo ou no fundo do poço? Em algoritmos de Trailing Stop sabemos isso quando a tendência se reverte x %, onde x é o que chamamos de callback rate (taxa de recuo) ou trailing delta (delta móvel). Assim, se um ativo está subindo, mas começou a descer, quando ele descer x%, a ordem será realizada.

Obviamente quanto menor for a taxa, mais sensível será o seu trailing stop e consequentemente mais fácil será para ele ser ativado por falsas reversões. Já se sua taxa for muito grande, você não aproveitará tanto os topos e fundos quanto poderia. O segredo está no equilíbrio, equilíbrio este que pode variar enormemente conforme a volatilidade do ativo e a relação risco x retorno que você busca.

No tutorial de hoje eu vou lhe ensinar como programar um bot de criptomoedas que usa o recurso de Trailing Stop para aproveitar mais os topos e fundos de um ativo listado na Binance, a maior corretora de criptomoedas do mundo, no seu mercado à vista (Spot). Note que cabe a você entender as melhores configurações para os seus objetivos financeiros, a sua situação financeira, a situação do mercado de criptomoedas no momento que você está atuando nele, etc. Me focarei aqui na construção do robô de compra e venda de criptomoedas, não na sua estratégia, ok? Tome muito cuidado quando for executar em produção e sempre use uma estratégia criada por você.

Se preferir, você pode assistir ao vídeo abaixo ao invés de ler o tutorial. No final do tutorial você encontra um formulário para download dos fontes também.

Vamos lá!

#1 – Configuração inicial

Para conseguir fazer este tutorial você deve ter uma conta criada na Binance (clique no link), a maior exchange mundial e a mais confiável até onde sei. Eles possuem uma API REST muito completa que permite inclusive o recurso de trailing stop que mencionei na introdução. O vídeo abaixo mostra todo o processo de criação de conta e obtenção das chaves, tanto de produção quando de desenvolvimento.

Caso não goste de assistir vídeos, neste link tem o tutorial da Binance para chave de produção, enquanto que neste link você pode criar as chaves de desenvolvimento/teste.

Certifique-se de anotar e guardar em segurança as suas chaves, precisará delas se quiser operar através de robôs e se alguém tiver acesso às mesmas poderá controlar a sua conta, então cuidado!

Com a conta aberta e as chaves em mãos, é hora de instalar na sua máquina o Node.js, que é a tecnologia que vamos usar para construir o bot. Para fazer isso basta ir no site oficial, baixar a versão LTS e instalar até o final. Caso tenha qualquer dificuldade, o vídeo abaixo mostra o passo a passo.

Curso Web3 para Iniciantes

#2 – Criar o projeto Node.js

Crie uma pasta no seu computador com o nome de binance-trailing-stop e dentro dela coloque um arquivo index.js vazio e via console execute um ‘npm init -y’ nesta pasta para fazer as configurações iniciais de um projeto Node.js.

Vamos instalar alguns pacotes via NPM pra deixar nosso projeto preparado. Seguem os comandos de instalação:

O módulo dotenv serve para carregar automaticamente variáveis de ambiente na sua aplicação Node.js. Usaremos estas variáveis de ambiente para colocar as configurações do nosso bot. Agora crie um arquivo “.env” na raiz do seu projeto colocando nele os valores abaixo, conforme instruções:

  • API_KEY: sua API Key (alfanumérico), criada na Binance;
  • SECRET_KEY: o seu API Secret (alfanumérico), criado na Binance;
  • API_URL: o endereço base da API da Binance que você vai utilizar, produção ou desenvolvimento;

Seu arquivo deve ficar mais ou menos assim:

Tenha em mente que as informações de API_KEY e SECRET_KEY são secretas e você não deve compartilhar com ninguém, caso contrário quem descobri-las poderá comprar e vender criptomoedas em seu nome, usando seu dinheiro. Se você for versionar o seu projeto ou mesmo compartilhar o seu código com outras pessoas via Git, coloque um .gitignore na raiz do seu projeto incluindo a pasta node_modules (padrão) e o arquivo .env, que é mantido localmente só no seu projeto.

Na raiz do seu projeto deve ter um arquivo index.js, coloque um ‘hello world’ nele como abaixo apenas para testar seu projeto, usando o comando “node index” no terminal para executar e ver se está tudo ok até aqui.

Com o setup inicial do projeto preparado, podemos avançar para a codificação da primeira funcionalidade.

Curso Node.js e MongoDB

#3 – Submetendo Ordens

Vamos começar importando os pacotes que vamos precisar.

O primeiro require serve para carregar as variáveis de ambiente que configuramos antes. Já o segundo é o pacote que vamos usar para falar com a API da Binance e o terceiro é um pacote nativo do Node.js (não precisa instalar) que vamos usar para uma etapa de criptografia da requisição.

Por fim, eu declarei uma constante com o par de moedas que vou negociar e que recomendo que use na Testnet, já que a maioria das moedas não possui liquidez por lá, o que geram erros nos trades.

Agora eu vou criar uma função genérica que envia uma requisição para a API de orders da Binance.

Essa função espera o HTTP method (GET ou POST) e um objeto JSON com o payload a ser enviado para a API. Com isso teremos uma função que servirá tanto para o envio de ordens quanto para a verificação de status das mesmas (ficará mais claro mais à frente).

Com o payload recebido por parâmetro e a secret key armazenada nas variáveis de ambiente, usamos o pacote cripto para gerar uma assinatura criptográfica conforme exigida pela Binance, a fim de autenticar sua requisição. Requisição esta que é montada a seguir com o method, a URL e a API Key, também existente nas variáveis de ambiente. Essa requisição é enviada para a Binance com o Axios e o resultado é impresso no console e retornado.

Para chamarmos esta função, vamos criar uma segunda, específica para o envio de ordens do tipo trailing stop.

Nesta função newOrder nós esperamos o symbol, a quantidade, o side (se é compra ou venda) e o trailingDelta, que merece uma explicação adicional mais ao final deste bloco. Ignorando ele por enquanto, esta função monta o payload de uma ordem STOP_LOSS ou TAKE_PROFIT, a depender se é uma compra (BUY) ou venda (SELL), mas sem stopPrice, que é substituído pelo trailingDelta. Por fim, chamamos a função que criamos anteriormente, que enviará a request de fato para a Binance. Antes de executarmos, vamos entender melhor o parâmetro trailingDelta.

O trailingDelta é a taxa de recuo do seu trailing stop, indicando a variação entre a mínima (em compras) ou máxima (em vendas) e o seu gatilho de preço que vai disparar a ordem de fato. Isso é melhor explicado na documentação oficial do trailing stop, mas resumidamente, em uma escala de BIPS 100, ele indica o percentual da taxa de recuo. Assim, um trailingDelta 100 é igual a um callback rate de 1%, enquanto que um trailingDelta de 10 equivale a 0.1%. Importante ressaltar que cada par de moedas possui um trailing delta mínimo e máximo que deve ser respeitado e para saber todos os detalhes do par de moedas que deseja negociar deve consultar a API Exchange Info, que eu ensino no vídeo abaixo.

Agora você pode testar a sua aplicação com o comando “node index” no terminal, para ver se ela vai enviar a ordem com sucesso para a Binance. O resultado deve ser o recibo de transação no console, como abaixo. Caso você tenha um erro, consulte este artigo para solucionar os erros mais comuns.

Anote esse orderId, vamos precisar dele na próxima etapa. O que importa neste momento é que se você mandou fazer um trailing stop de compra e colocou um trailingDelta de 100, quer dizer que enquanto o preço do ativo cair, nada vai acontecer, mas quando ele reverter a tendência de queda em 1% (BIPS 100 = 1%), então sua compra será efetivada. Importante frisar que uma vez que a ordem foi enviada para a Binance, seu robô não precisa mais ficar executando pois a ordem será finalizada pela própria Binance quando for a hora.

Mas como saber se a ordem foi realizada? Vou mostrar uma forma de fazer isso a seguir.

#4 – Verificando Ordens

Uma vez que uma ordem trailing stop tenha sido submetida com sucesso para a Binance, é hora de aguardar o mercado reverter a tendência para que ela seja efetivada, o que pode levar segundos, minutos ou até horas, dependendo do valor usado como trailingDelta. Como você não vai querer ficar esperando isso acontecer, vamos criar uma última função que vai monitorar isso pra gente.

Esta função está um pouco mais complexa do que normalmente eu faria mas é por uma boa causa que vou falar a seguir. Antes disso, repare que ela espera o symbol e o orderId a serem monitorados. Já o último parâmetro é uma função de callback, que você deve passar com a instrução a ser realizada após a verificação descobrir que a ordem foi executada, o que vai nos ajudar a encadear outra ordem automaticamente, algo que provavelmente você vai querer.

A função começa com a construção do payload JSON de uma consulta de ordem. Depois enviamos um GET com estes dados para a API de ordens da Binance e verificamos o status de retorno. Se ele for FILLED, quer dizer que a ordem foi executada e então executaremos o callback da função. Caso contrário, agendamos uma nova verificação para daqui a 1 minuto (60.000 milissegundos).

Comente a chamada a função newOrder e atualize a chamada à função checkStatus com o seu orderId para realizar um teste desta função que criamos. O resultado no terminal será uma mensagem indicando se a ordem foi executada ou não.

Por fim, agora vamos criar uma função que vai encadear sucessivas compras e vendas conforme cada uma for sendo executada com sucesso, criando um trailing stop de compra e de venda em loop. Aqui vai uma ressalva: muito cuidado com loops como esse, pois podem facilmente drenar todos os fundos da sua conta em sucessivas compras e vendas e eu não fiz qualquer cálculo ou estratégia que garanta lucratividade, é apenas um exemplo técnico e hipotético, focado na programação.

Essa função startCycle inicia com um trailing stop de compra, aguarda ele executar (monitorando a cada minuto) e então faz um trailing de venda. Aguarda ele executar a venda e então reinicia o ciclo, eternamente ou até você derrubar o programa.

Comente a chamada da função checkStatus que tínhamos feito anterior e execute a aplicação com “node index” a partir do startCycle, fazendo com que o bot enfim funcione como esperado.

Até a próxima!

TAGS:

Olá, tudo bem?

O que você achou deste conteúdo? Conte nos comentários.

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

2 Replies to “Como criar robô Trailing Stop para Binance Spot em Node.js”

Carlos

Olá,mestre é sempre com entusiasmo que acompanho seus materiais, sempre ricos de informações de muito grande valor e que mim faz avançar em meus estudos e experiências como aprendiz de programador..Fico muito grato a você…irei acompanhar código a código, mas quero baixar e prevenir alguma correção pelo código ..

Luiz Duarte

Fico feliz que goste do conteúdo. Todos os tutoriais de código sempre tem o formulário para baixar os fontes ao final do mesmo. Também pode encontrar todos repositórios em github.com/luiztools