Como criar robô trader da Binance em Node.js

Node.js

Como criar robô trader da Binance em Node.js

Luiz Duarte
Escrito por Luiz Duarte em 19/04/2021
Junte-se a mais de 22 mil profissionais de TI

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

Estamos em 2021 e jamais as criptomoedas estiveram tão em alta. Com o Bitcoin batendo recordes de valorização superiores a U$60.000 e centenas de milhares de brasileiros comprando e vendendo a moeda todos os dias é difícil ficar apenas olhando. E eu não sou o tipo de empreendedor que fica apenas olhando.

Independente de você acreditar ou não que o Bitcoin está em uma bolha (todos acreditavam que ela estava em 2018, quando chegou a U$15 mil), a oscilação da moeda traz diversas oportunidades para quem quer fazer trading, ou seja, compra e venda de moeda visando lucro na diferença entre as cotações. Em alguns dias é até mesmo possível fazer day trade de Bitcoin, considerando que nas últimas semanas tivemos diversos dias com spread (diferença entre mínima e máxima) superior a 10%!!!

Para comprar e vender Bitcoin e demais criptomoedas (considerando que minerar não é mais tão lucrativo quanto foi no passado) você deve ter conta em algum exchange. Dentre os players mundiais, uma das mais agressivas em termos de taxas e portfólio de moedas é a Binance, considerada a maior exchange de criptomoedas do mundo em volume de negociações. O processo é bem burocrático para que seu cadastro seja aprovado, necessitando o envio de selfies, documentos, etc.

Caso prefira uma exchange nacional, leia este tutorial de robô para Mercado Bitcoin.

Uma vez com a conta aberta (o que pode demorar de algumas horas a alguns dias), você deve adicionar saldo na exchange para que sua conta tenha grana para operar. Você pode fazer isso de diversas formas na Binance, mas as mais comuns são depósito bancário ou cartão de crédito.

A operação tradicional é muito simples: você usa reais para comprar criptomoedas, como Bitcoin, (a preço atual ou oferta futura) e usa criptomoedas para vender e ganhar reais, que ficam na sua conta do exchange até ser sacado de volta para sua conta bancária.

Como o preço oscila bastante, um trader mais espertinho que a média pode fazer muita grana comprando em baixa e vendendo nas altas da moeda.

Como eu não sou um trader, mas um programador, decidi criar um bot para fazer o monitoramento do mercado, além da compra e venda das moedas. E é isso que vou ensinar você a fazer hoje.

Atenção: ganhos passados não representam garantia de ganhos futuros. Criptomoedas são investimentos de risco e portanto você pode perder muito dinheiro mesmo acreditando que sabe operar neste mercado. Eu NÃO SOU responsável e jamais serei pelas suas perdas, eu apenas ensino a criar programas de computador, não aconselho investimentos, ok?

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.

Primeiro passo: Criar uma conta no exchange

Para conseguir fazer este tutorial você deve ter uma conta criada na Binance (clique no link), o maior exchange mundial e o mais confiável até onde sei. Eles possuem uma API REST muito completa que usaremos para monitorar e operar no mercado de criptomoedas. Sim, porque você não precisa apenas operar bitcoins, mas também outras mais de 100 moedas que eles possuem.

Como esse processo de criação de conta pode mudar com o tempo, não vou entrar em detalhes aqui. Crie sua conta e faça todo o processo de validação, com selfie e tudo mais. Após estar com a sua conta 100% aprovada, habilite todos os mecanismos de segurança (na área de configurações da sua conta) como uma senha forte, Two Factor Authentication (2FA), etc. Nem todos estes itens são necessários para fazer este tutorial, mas sugiro que faça todos eles pois estes exchanges são atacados por hackers o tempo todo e você não vai querer facilitar, não é mesmo?

Após habilitar os mecanismos de segurança, você poderá criar a sua chave de API (ApiKey), como citado neste tutorial oficial deles. É bem simples, basta acessar a área de API Management no seu perfil, dar um nome para a API Key e definir as permissões que essa chave vai ter, o que recomendo que você deixe o padrão mesmo.

Certifique-se de anotar e guardar em segurança o Api Key e o Secret Key que vai ser fornecido para você, precisaremos deles se quiser operar através de robôs.

Curso FullStack

Segundo passo: Criar o projeto Node.js

Crie uma pasta no seu computador com o nome de nodejs-binance 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-safe 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. Crie um arquivo “.env.example” na raiz do seu projeto com o seguinte conteúdo dentro, representando o modelo de arquivo de configuração que vamos precisar:

Agora crie um arquivo “.env” na raiz do seu projeto usando o mesmo conteúdo do .env.example como base, mas colocando os seus valores de verdade ao lado do sinal de igualdade de cada uma das variáveis de ambiente. Uma rápida explicação de cada variável:

  • CRAWLER_INTERVAL: milissegundos entre cada execução do bot, sendo que não recomendo que este valor seja inferior a 1000 (equivalente a 1 segundo) para evitar bloqueios da API deles;
  • 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, pode preencher com https://api.binance.com/api;
  • PROFITABILITY: a rentabilidade desejada que seu bot deve alcançar em decimal, ou seja, 1.1 representa 10%, 1.05 representa 5% e assim por diante;

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 bitcoins em seu nome, usando seu dinheiro.

Sobre a variável PROFITABILITY (rentabilidade ou lucratividade), entenda que quanto maior a rentabilidade desejada, mais irá demorar para que você consiga ter retorno com seu bot e às vezes isso pode nunca acontecer. Exemplo, se sua PROFITABILITY é 1.2 (20%) e você compra bitcoin hoje, vai demorar 20 dias para o bot vender se a moeda estiver valorizando 1% ao dia. Claro que diversas técnicas podem reduzir ou aumentar esse prazo (como uma queda da moeda ao invés de valorização), e cabe a você estudá-las (como analisar os gráficos da moeda, por exemplo).

Além disso, uma PROFITABILITY inferior a 1.01 (1%) não é muito interessante pois você tem de pagar as taxas da exchange tanto na compra quanto na venda.

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.

Para carregar estas configurações na sua aplicação, modifique o seu package.json para que no script de start ele carregue o .env:

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 bitcoins, não na sua configuração.

Curso Node.js e MongoDB

Terceiro passo: Monitorando o mercado

Vamos começar pela primeira atividade, que é mais simples e é a base do robô: monitorar o mercado.

A documentação completa e atualizada da API de dados da Binance pode ser encontrada aqui. Para organizar melhor nosso código, crie um arquivo api.js na raiz do seu projeto e dentro dele vamos criar as funções que usam a API:

Nesta amostra de código eu carrego a biblioteca axios para fazer as chamadas à API REST da Binance e a biblioteca querystring, nativa do Node, que serve para transformar objetos em strings de URL, o padrão utilizado para passagem de parâmetro nesta API.

Na sequência, eu crio uma função extremamente importante para nosso robô: publicCall. Ela é uma função genérica que será utilizada para todas as atividades que viermos a realizar em endpoints públicos da Binance. Ou seja, obtenção de dados públicos e que não envolvam você gastar dinheiro, que é o que nos focaremos nesta primeira parte.

Basicamente o que ela fez é montar o request seguindo o padrão da documentação oficial e usando a variável de ambiente de API_URL. A função publicCall é assíncrona e como eu usei await nela você deverá cuidar com isso na index.js onde chamará as funções (leia este artigo caso tenha problemas com programação assíncrona)

Depois da função genérica, criei mais duas, a time e a depth. A time serve apenas para testar se você está conseguindo se conectar corretamente com o servidor e ela retorna o timestamp atual dele.

Já a função depth traz informações do livro de ordens, baseado no symbol e no limit que você passar, sendo que os valores default são BTCBRL (Bitcoins em Reais) e 5 ordens. Com esse arquivo de API pronto, podemos voltar ao nosso index.js para criar uma rotina básica de monitoramento em nosso bot, como abaixo:

Aqui eu carreguei nosso módulo api e criei um objeto para monitorar a moeda BTC (Bitcoin), que vai rodar a cada x segundos, definidos pela variável de ambiente CRAWLER_INTERVAL (sugiro começar com 3000).

Se você rodar agora este arquivo usando o comando ‘npm start’, ele já deve estar funcionando e o seu bot vai estar monitorando o mercado continuamente (até ser encerrado), embora ainda não esteja tomando ação alguma. A função depth retorna um array de bids (os maiores valores posicionados para compra) e asks (os menores valores posicionados para venda).

O primeiro valor é o preço, em BRL, e o segundo é a quantidade da oferta.

Outra alternativa a fazer estas chamadas uma a uma é se conectar nas streams da Binance, para receber os dados em tempo real. Algo um pouco mais complexo mas bem mais eficiente, ensinado neste tutorial.

Usando destes valores e comparando com seus objetivos de compra a venda, é possível ao robô lhe avisar, por email de repente, que é a hora certa de comprar ou vender. Claro, que em um cenário ideal e mais completo, o próprio robô poderia fazer isso e é algo perfeitamente possível de ser desenvolvido.

Mas isso a gente vai ver na PARTE 2, que você confere neste link!

Curtiu o post? Que tal aprender mais sobre como criar aplicações incríveis usando Node.js? Então clica no banner abaixo e dá uma conferida no meu livro sobre programação web com Node.js!

TAGS: nodejs

Olá, tudo bem?

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