Como criar um bot de arbitragem de criptomoedas na BityPreço com Node.js

Cripto

Como criar um bot de arbitragem de criptomoedas na BityPreço com Node.js

Luiz Duarte
Escrito por Luiz Duarte em 24/10/2023
Junte-se a mais de 34 mil devs

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

O mercado de criptomoedas é extremamente volátil e todo mundo sabe disso. O que nem todo mundo parou para reparar é que o preço de um ativo, como por exemplo o Bitcoin, pode variar bastante no mesmo minuto em corretoras diferentes. Com isso em mente, será que é possível criar um bot que compra onde o BTC está mais barato e vende onde ele está mais caro?

Em 2018 eu me fiz esta pergunta pela primeira vez e lembro que criei um bot que faz exatamente isso, uma técnica chamada de arbitragem de criptomoedas ou arbitragem entre corretoras. Na época, eu monitorava Mercado Bitcoin e FoxBit, mas como as taxas são relativamente altas e eu precisava ficar movimentando dinheiro entre elas o tempo todo para fazer as operações, fora o tempo de execução entre elas, acabou não indo pra frente, me deu só prejuízo, motivo pelo qual acabei me dedicando a outras estratégias que me trouxeram muito mais resultado.

Se preferir, você pode assistir ao vídeo abaixo ao invés de ler o tutorial.

Então não vale a pena fazer arbitragem?

No entanto, outro dia eu conversava com um aluno do meu curso de bot de criptomoedas e ele me contava que estava fazendo arbitragem usando uma tal de Biscoint. Pra ser mais específico, o aluno era o Enio Almeida, que entrevistei no vídeo abaixo.

Pelo que entendi a Biscoint (que aliás era investida pelo Primo Rico, Thiago Nigro) não tinha foco em ser apenas uma corretora, mas sim um marketplace de corretoras. Apesar disso, eles mantinham carteiras nas principais corretoras do país e algumas globais para oferecer um serviço centralizado de compra e venda. Ou seja, você transferia dinheiro para sua conta na Biscoint e depois usava os serviços deles para encontrar e comprar a sua criptomoeda pelo melhor preço. Algo como um Busca Acelerada das criptomoedas.

Mas porque estou falando da Biscoint no passado? Porque ela foi comprada pela BityPreço em julho de 2022. E depois de um tempo sem termos acesso às antigas APIs da Biscoint, agora a BityPreço está disponibilizando APIs novamente que permitem comprar através do marketplace de corretoras deles.

Para nós que somos devs, isso diminui drasticamente a quantidade de desenvolvimento necessário para fazer um bot de arbitragem pois normalmente teríamos que nos integrar e monitorar diversas exchanges diferentes, mas com as APIs da BityPreço, podemos fazer tudo diretamente por ela!

Curso Node.js e MongoDB

Setup da Conta

As APIs originais da Biscoint foram desenvolvidas por outro de meus alunos, o Gustavo Toledo, que trabalha lá. Outro dia entrevistei ele no meu canal, caso queira conhecer mais sobre a carreira de um dev de smart contracts.

Mas antes de você sair metendo a mão na API da BityPreço para fazer este tutorial, é preciso que você tenha conta lá, certo?

Errado. Para fazer a primeira parte deste tutorial não é necessário ter conta, pois iniciaremos com os endpoints públicos.

Mas, recomendo já abrir a conta pois como tem um processo de validação que pode demorar um pouco, você não vai querer ficar trancado com isso depois.

Então abra sua conta na BityPreço agora, faça as verificações de segurança (enviar selfie com documento, enviar foto de carta assinada à mão, etc), ative o 2FA e só depois volte aqui, quando eles tiverem aprovado tudo na sua conta. Como eu já tinha conta na antiga Biscoint, acabei não precisando passar por tudo isso de novo na BityPreço.

O próximo passo é você ter saldo na sua carteira (se quiser de fato rodar o bot para testar em produção), então recomendo fazer um depósito pela própria plataforma, sendo que o mínimo permitido é R$50 e recomendo fazê-lo via PIX, para cair mais rápido na sua conta. Aqui a principal dica é fazer a partir de uma conta que esteja no mesmo CPF da conta da BityPreço ou sua grana vai se perder. Aqui pra mim o PIX foi confirmado em questão de minutos, super rápido. Mais um ponto pra BityPreço.

Agora com tudo ok na sua conta e saldo carregado, podemos avançar. Claro, pode avançar com o setup mais à frente, sem qualquer problema.

Você vai precisar de credenciais para usar a API da BityPreço. Para isso, você vai na sua conta, no ícone do seu usuário > Perfil > Conta > Segurança > Solicitar API. Sim, repare que a própria BityPreço sabe e não se importa que você crie robôs e integrações, a API é justamente pra automatizar o processo de monitoramento, compra e venda de ativos.

Uma vez que solicite as credenciais você as receberá por email um par com uma assinatura e uma chave de API. Guarde os dois em segredo porque quem tiver eles está autorizado em seu nome para fazer automações na sua conta. Se no futuro você perder esta informação ou desconfiar que mais alguém sabe, procure o suporte deles imediatamente.

Agora que está tudo 100% configurado e validado na sua conta da BityPreço, é hora de criarmos nosso robô.

Setup do Projeto

Recomendo que você crie uma pasta específica para este bot, vou chamar a minha de bitypreco-arbitrage.

Dentro desta pasta, rode o seguinte comando no seu terminal para inicializar o projeto Node.js.

Agora vamos instalar as dependências que precisaremos pro bot funcionar. Como vamos fazer chamadas HTTP precisaremos de um cliente, vou usar o Axios que é o mais popular para JavaScript. E como vamos nos conectar na stream de dados deles, vamos precisar também de um cliente para streams do tipo Phoenix Channels, uma abstração em cima de WebSockets. Abaixo instalo os dois mais o pacote DotEnv para carregamento das variáveis de ambiente:

Agora crie um arquivo .env na raiz do seu projeto e coloque dentro dele as seguintes variáveis de ambiente e seus respectivos valores (algumas farão mais sentido quando chegar no código que usa elas):

  • SIGNATURE=<sua assinatura da BityPreço>
  • API_KEY=<sua chave de API da BityPreço>
  • BUY_TRIGGER=<o gatilho de preço para efetuar uma compra>
  • BUY_AMOUNT=<quantos reais você quer usar na primeira compra>
  • PROFITABILITY=<qual a rentabilidade que seu bot deve buscar nas vendas, no formato de multiplicador (1.1 para 10%)>
  • COINPAIR=<o par de moedas que vai negociar, no formato BTC-BRL>

Agora vá no seu package.json e vamos ajustar o script de inicialização deste projeto, como abaixo:

Esse arquivo index.js deve ser criado também, na raiz do projeto e será o coração do nosso bot. Experimente colocar um console.log(“Hello World”) nele e executar o projeto com um npm start para se certificar que está tudo funcionando como deveria.

Agora que temos toda a estrutura do projeto pronta, podemos implementar a primeira funcionalidade: monitoramento!

Criando o monitoramento

O primeiro passo quando o assunto é trade automatizado é fazer o monitoramento automatizado. No caso da BityPreço o monitoramento é feito via Phoenix Channels, que é bem parecido com WebSockets padrão, ou seja, a gente realiza a conexão, assina um tópico que quer receber atualizações e assim sempre que houverem, nossa aplicação é notificada.

Sendo assim, nosso alvo aqui é o canal de ticker, que traz as várias informações dos mercados que a BityPreço trabalha. Para nos conectarmos a ele, vá no seu index.js (crie ele agora caso não tenha feito ainda) e adicione o seguinte código (explico a seguir):

Começamos carregando a biblioteca phoenix-channels, para estabelecer uma conexão socket com o servidor da BityPreço. O endereço informado no código serve tanto para pegar informações do book quanto de ticker, o que definiremos mais à frente. Na sequência, fazemos a conexão de fato.

Uma vez conectados, temos de programar o evento de abertura da conexão (onOpen), de erro (onError) e a conexão com o canal de ticker para recebermos as informações. Enquanto que o tratamento dos dois primeiros eventos é apenas uma impressão no console para avisar o usuário, a programação da inscrição no canal é diferente, exigindo informar qual o canal (ticker:ALL-BRL, ou seja, todos pares com Real) e depois configurar o tratamento do evento receive do canal, que pode ser um ‘ok’ ou um ‘error’. Dependendo da resposta, imprimimos no console o resultado do join.

Uma vez com a conexão estabelecida e configurada corretamente, recomendo que teste essa primeira etapa rodando o projeto com ‘npm start’. Se tudo deu certo, você já verá no console as mensagens de conexão com sucesso.

Agora para iniciarmos o monitoramento, precisamos tratar o evento price que será disparado pela BityPreço toda vez que tiverem novidades nos mercados BRL, o que fazemos abaixo:

Aqui começamos carregando a variável de ambiente que decide qual par de moedas você deseja monitorar, no formato BTC-BRL (cripto-fiat). Depois, configuramos o evento price no canal usando a função ‘on’. Toda vez que esse evento for disparado, vai executar a função de callback dele, que recebe um payload JSON por parâmetro. É neste payload que teremos a informação de todos mercados trabalhados pela BityPreço, sendo que o que nos interessa aqui é apenas um, definido em COINPAIR.

Por enquanto, esse monitoramento apenas observará o coinpair especificado, mas no futuro, poderá comprar e vender quando os respectivos gatilhos forem alcançados. Execute o projeto com ‘npm start’ e o resultado deve ser como abaixo (variando o par e os valores, claro).

Agora nossa próxima missão é avançar para as negociações de fato. Mas como este tutorial está ficando muito grande, vou dividir ele em duas partes e a segunda parte você encontra aqui.

Qualquer dúvida, deixe nos comentários.

Um abraço e sucesso!

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 *