Como criar um bot para copy trade na Binance Spot com Node.js - Parte 2

Cripto

Como criar um bot para copy trade na Binance Spot com Node.js - Parte 2

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

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

Na primeira parte deste tutorial, que é obrigatório você ter realizado para que consiga avançar para esta (link aqui), nós preparamos o ambiente de desenvolvimento, estruturamos nosso projeto, aprendemos a carregar as contas dos copy traders e a nos conectarmos na stream do trader mestre, a fim de que possamos monitorá-la. E conseguimos, ao término da primeira parte o seu bot já está monitorando a conta mestra e imprimindo no console os trades, aliás, sem repetição.

Agora nesta segunda e última parte, vamos replicar o trade a partir das informações da atualização de conta e vamos enviá-la para a Binance, uma vez em nome de cada copy trader.

Vamos lá!

Curso Node.js e MongoDB

#1 – Replicando o Trade

Nossa primeira missão é, dadas as informações que vem no execution report da user data stream (basicamente os dados do trade realizado), temos de montar um objeto de order para ser enviado na API de new order da Binance. Conforme a documentação da Binance, o que recebemos de informações do trade é documentado aqui. E também conforme a documentação da Binance, o que devemos enviar de informações na ordem é documentado aqui. Olhando as duas documentações verá que precisaremos fazer uma “conversão” de um objeto de trade para um objeto de ordem. Faço uma proposta de nova função para seu index.js abaixo.

Nesta função copyTrade nós recebemos um objeto de trade e pegamos imediatamente algumas informações dele: as propriedades s (symbol), S (side) e o (order type). Depois fazemos alguns testes para saber quais outras informações podemos/devemos pegar, como a q (quantity), a p (price), a f (time in force), P (stop price) e Q (quote order quantity). Essa verificação consiste em nos certificarmos que a propriedade está presente e seu valor não é zero ou default. Isso porque a API de ordem dá erro se enviarmos zero em algum parâmetro.

Essa função copy trade deve ser usado na sua função de start do index.js, dentro do if de processamento do execution report, como abaixo.

Com isso, recomendo que faça novos testes e veja se a conversão de trade para order está acontecendo como deveria antes de avançar.

Curso Web3 para Iniciantes

#2 – Copiando os Trades

Agora que já temos o objeto no padrão de ordem da Binance, é hora de enviá-lo para a API new order a fim de efetivar novos trades para os copy traders. Para isso, teremos de primeiro ir no api.js e criar a função que envia a ordem para a Binance, como abaixo.

Aqui nós começamos carregando um pacote nativo do Node.js para criptografia (não requer instalação) e declaramos a assinatura da nossa função newOrder que vai esperar os dados da ordem e as chaves da conta que vai executá-la. É importante que as chaves sejam passadas aqui pois chamaremos esta função de maneira repetida, mas para contas diferentes.

Uma vez na função, pegamos a hora do sistema (seu relógio precisa estar precisamente ajustado ou terá erros) e definimos a janela de tolerância para execução da ordem após envio dos dados para a Binance (quanto mais lenta a Internet, maior deve ser esse valor). Na sequência nós criamos a assinatura criptográfica dessa ordem usando o pacote crypto, os dados da ordem e a api secret da conta. A próxima etapa é montar a query string com os dados da ordem mais a assinatura criptográfica e enviar isso para a Binance conforme a documentação exige. O resultado desse envio é devolvido para o requisitante.

Agora essa função deve ser usada no index.js, após a construção do objeto com os dados da ordem (primeira linha do código abaixo) e uma vez para cada trader carregado inicialmente.

Essa iteração por todas contas eu optei por fazer com um map, chamando uma vez a api.newOrder para cada conta carregada e usando os respectivos pares de chaves delas. Ao término desse laço, teremos um array de promises já que cada chamada à API retorna uma promise ao invés do resultado final. Usando Promise.allSettled nós aguardamos na linha de baixo pela execução de todas chamadas e devolvemos todos os seus resultados no console.

Apenas para testes que envolvam a mesma conta sendo a mestre e a cópia, incluí uma linha adicional que derruba o bot após um copy trade, caso contrário ele entraria em loop. Essa linha final é desnecessária caso você esteja testando com contas mestre e copy diferentes.

Agora você pode testar finalmente o seu bot com a funcionalidade final. Se fizer um trade na conta mestre, por qualquer que seja o meio, o bot receberá a atualização e vai enviar uma ordem idêntica para cada uma das contas copy configuradas.

Indo além do que mostrei aqui, você pode fazer modificações, como por exemplo cada copy trader fazer a mesma ordem, mas com quantidades diferentes, por exemplo. Ou o bot verificar se tem saldo para conseguir fazer a mesma ordem por exemplo. Ou ainda construir uma interface gráfica para este bot e um banco de dados, a fim de que ele possa ser usado e configurado mais facilmente por você. Ou ainda plugar ele no Telegram ou no WhatsApp, para avisar os copy traders, podendo ser também via email ou SMS.

Enfim, o céu é o limite em termos de melhorias futuras.

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 *