Dentre os players mundiais de criptomoedas, 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. Independente disso, você pode programar o monitoramento deste tutorial sem ter uma conta criada, pois usaremos dados públicos fornecidos por esta corretora.
Caso prefira outra exchange, leia este tutorial de robô para Mercado Bitcoin, este para PancakeSwap, Uniswap ou este para Biscoint. Importante frisar que não faço recomendações de investimento, ensino apenas programação, ok? A responsabilidade por estratégias, ganhos e perdas é completamente sua.
No final do tutorial você encontra um formulário para download dos fontes e abaixo tem um vídeo que você pode assistir com o mesmo conteúdo deste tutorial.
Configuração inicial do projeto
Começaremos com a tarefa de instalar na sua máquina o Node.js, que é a tecnologia que vamos usar para programar o monitoramento, caso ainda não tenha ele instalado. 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.
Agora crie uma pasta no seu computador com o nome de binance-monitor 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:
1 2 3 |
npm i dotenv ws |
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:
- STREAM_URL: o endereço base das streams da Binance que você vai utilizar, produção ou desenvolvimento;
- SYMBOL: o par de moedas que seu robô vai monitorar e negociar. Ex: btcusdt (sempre em minúsculas);
Seu arquivo deve ficar mais ou menos assim:
1 2 3 4 |
STREAM_URL=wss://stream.binance.com:9443/ws SYMBOL=btcusdt |
Para carregar estas configurações na sua aplicação, modifique o seu package.json para que no script de start ele carregue o .env:
1 2 3 4 5 |
"scripts": { "start": "node -r dotenv/config index" }, |
Note que este robô de monitoramento irá funcionar com um par de moedas, mas pode ser adaptado para vários pares ou pode replicar o projeto várias vezes na sua máquina.
Monitorando o mercado
Para a finalidade de monitoramento do mercado a Binance fornece o que eles chamam de streams ou fluxos de dados. Uma stream é um canal de comunicação que, uma vez aberto, passa a ser usado pela corretora para envio de informações para nossos robôs em tempo real ou próximo disso. Se você possui um background mais técnico talvez você conheça isso por outro nome: WebSockets, que eu explico e ensino melhor neste tutorial.
Existem várias streams existentes e uma muito popular é a de ticker que nos traz segundo a segundo informações atualizadas, incluindo o preço, para determinado par de moedas. Para nos conectarmos na referida stream, eu instalei o pacote ws no projeto, que usaremos em nosso index.js da seguinte forma:
1 2 3 4 5 6 7 8 9 10 11 |
const WebSocket = require('ws'); const ws = new WebSocket(`${process.env.STREAM_URL}/${process.env.SYMBOL}@ticker`); ws.onmessage = (event) => { console.clear(); const obj = JSON.parse(event.data); console.log(`Symbol: ${obj.s}`); console.log(`Ask Price: ${obj.a}`); } |
Nesta amostra de código eu carrego a classe WebSocket da biblioteca ws. Com esta classe eu posso iniciar uma nova conexão de websockets onde informo a URL da stream a qual quero me conectar. Essa string é entre crases pois usei Template Strings para ficar melhor de montar, sendo que a primeira parte é a STREAM_URL do .env, que acessamos através de process.env, uma barra, depois a segunda parte é a variável SYMBOL e por último o identificador da stream, @ticker.
A partir da linha de baixo o objeto ws estará conectado na Binance e para que a gente saiba toda vez que ela nos enviar algum dado novo (ela o fará uma vez por segundo), devemos configurar o evento onmessage do objeto ws através da passagem de uma função com um event por parâmetro. Toda vez que a Binance nos enviar uma informação sobre o par que estamos conectados vai disparar o conteúdo dessa função e é aí dentro que colocaremos nossa lógica de monitoramento e, mais tarde, a lógica de trade se assim o quiser.
Para este primeiro momento, eu estou limpando o texto do console e convertendo o event.data, que vem como string, em um objeto JavaScript. Mais tarde, imprimo no console o conteúdo de dois campos do referido objeto, sendo que na documentação oficial você confere todos existentes.
Experimente rodar o seu projeto com o comando npm start e terá o resultado abaixo no terminal depois de 1 segundo (não exatamente com este preço, mas esta estrutura).
Usando destes valores e comparando com seus objetivos de compra ou venda, é possível ao robô lhe avisar, por email de repente (ou ainda via SMS, WhatsApp ou Telegram) que é a hora certa de comprar ou vender. Claro, que em um cenário ideal e mais completo, o próprio robô poderia fazer essas operações e é algo perfeitamente possível de ser desenvolvido.
Mas isso a gente vê em outro tutorial aqui do blog, que você confere neste link!
Se quiser aprender a dominar a documentação das streams da Binance, o vídeo abaixo pode te ajudar.
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.