Como criar robô trader da Binance em Node.js - Parte 3

Node.js

Como criar robô trader da Binance em Node.js - Parte 3

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

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

Inscreva-se na lista de espera da segunda turma do meu curso de traderbot multi-moedas neste link!

Desde a primeira vez que escrevi a primeira parte deste tutorial de criação de um bot para comprar e vender Bitcoins e outras criptomoedas usando a API da Binance, a valorização da moeda tem sofrido uma grande correção, o que permite a novos entrantes aproveitarem a próxima onda de valorização.

Na primeira parte foquei nos conceitos fundamentais, criação e configuração da conta na exchange, criação do projeto e codificação do algoritmo de monitoramento do mercado. Na segunda parte, mostrei como utilizar o ambiente de testes da Binance e a fazer requisições seguras, usando como exemplo o monitoramento da sua carteira de criptos. Agora faremos a codificação do nosso bot para que ele consiga comprar e vender criptomoedas.

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

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?

Curso Node.js e MongoDB

#1 – Comprando criptomoedas

Claro, não é apenas porque eu tenho dinheiro que devo comprar, então, você pode adicionar antes da decisão de compra alguma lógica sua de compra, como por exemplo algum preço-alvo ou alguma análise mais rebuscada que eu não sou a pessoa mais indicada para lhe sugerir.

Mas antes de fazer esta lógica simples que vou propor, vamos criar nossa função de compra no módulo api.js, usando da nossa privateCall que deixamos pronta na seção anterior.

Nesta função newOrder, esperamos o symbol (coinpair), a quantidade que será comprada, o preço que será pago (estou arredondando para inteiro pois float sempre dá rolo), o side da ordem (BUY ou SELL) e o tipo de ordem (MARKET, LIMIT, etc). Em uma ordem do tipo MARKET, nós vamos comprar ou vender a preço de mercado, com foco em concretizar o negócio agora, sem esperar. Já uma ordem LIMIT, você que define o preço alvo e, se a ordem não for concretizada agora, ela ficará no livro com este preço aguardando o “match”. Existem outros tipos de ordens, mas estes é o que vamos usar aqui.

Ignore aquela linha LIMIT, falarei dela mais pra frente.

Agora voltando ao index.js, você pode adicionar alguma lógica para comprar ou não. No exemplo abaixo, eu testo contra um preço alvo para decidir se compro ou não, e apesar de eu estar comprando apenas 1 BNB, você pode calcular com base no seu saldo atual em BUSD e o preço à venda no mercado. Dividindo um pelo outro você terá a quantidade (quantity) que pode ser comprada.

Repare que a novidade aqui é somente a partir da linha ‘const sellPrice’ e que deixei também uma linha comentada, caso queira calcular a quantidade a se comprar usando sellPrice e carteiraBUSD. No meu exemplo, a quantity em api.newOrder está fixa em 1, mas você pode colocar algum valor calculada ali.

Como resultado desta função newOrder teremos o ID da ordem e o status. Um status de FILLED indica que ela foi completamente executada e que agora os BNBs comprados são seus. Na próxima execução do programa, na hora que ele pega accountInfo, você vai notar que na sua carteira a quantidade de BNB aumentou a de BUSD diminuiu.

Possíveis problemas

A API da Binance é RESTful, o que significa que eles seguem uma série de padrões de desenvolvimento, muitos deles definidos pela especificação do protocolo HTTP, como o uso dos status code corretos. Baseado no status code retornado, você terá algumas pistas do que fez errado no caso de não retornar a sua carteira mas sim uma exceção.

Um 404 indica que você montou a URL errada, revise esta informação.

Um 401 indica que a sua API_KEY ou SECRET_KEY estão erradas, revise estas duas variáveis e/ou recrie-as no seu painel da TestNet.

Um 400 é o mais cretino de todos, pois pode ser várias coisas diferentes mas, geralmente, será informações erradas passadas na querystring (ou ausentes). Então revise a querystring da sua requisição.

Estes problemas citados acima são os mais comuns de acontecer com a API da Binance e se aplicam a todas funções.

Curso FullStack

#2 – Vendendo Criptomoedas

Se você quer apenas comprar criptomoedas para criar uma carteira bacana, fazer o que chamam de ‘buy & hold’ pensando no futuro, o código acima encerra o tutorial para você.

Agora, se você quer fazer swing trade ou até day trade, você vai querer código e alguma lógica para vendas.

Volte rapidamente a função newOrder para eu lhe explicar uma coisa. Lembra que tinha um if verificando se o type da order era LIMIT? Pois é, a propriedade timeInForce, que é o tempo que esta ordem podem existir no livro, deve ser setada neste tipo de order. Eu defini o valor fixo como ‘GTC’, que significa “Good ’till Cancelled” ou na prática “válida até cancelar”, “sem expiração”.

Com isso entendido, agora você tem duas opções basicamente: ou você posiciona a sua ordem com uma lucratividade desejada (LIMIT) ou você fica monitorando o mercado e quando entender que está em um pico de valorização, fazer a venda à mercado (MARKET).

Em ambos os casos, o código necessário será bem parecido com o abaixo, sendo que neste exemplo eu estou posicionando uma venda imediatamente após realizar a compra, imaginando que comprei em baixa e quero vender tão rápido quanto a próxima alta de 10%.

Repare que a variável PROFITABILITY deve estar definida no seu .env e .env.example com um número decimal acima de 1. Assim, 1.1 simboliza 10% de lucratividade, por exemplo.

Aqui novamente eu coloquei à venda um valor arbitrário de 1 BNB, que você pode substituir por um valor calculado conforme alguma regra sua. A imagem abaixo mostra um ciclo completo de mercado, carteira, compra e venda, para você entender como tudo vai ficar.

Outra estratégia possível é não posicionar à venda imediatamente, mas sim ficar monitorando o mercado. Se você entende de candles, você pode obtê-los na API da Binance também e somente fazer a venda em MARKET quando for mais interessante para você. Outras estratégias incluem usar os types STOP, para evitar vender rápido ou devagar demais e perder boas oportunidades.

Mas isso já entra na categoria de dicas que não quero entrar para me isentar em relação a como você usa o SEU dinheiro.

Uma última sugestão técnica é transformar o symbol/coinpair em uma variável de ambiente também (SYMBOL), para que você possa mudar para outra moeda quando estiver rodando este robô com suas chaves reais de produção.

Para obter a última versão do código com esta alteração, use o formulário ao final deste tutorial.

Se estiver tendo problemas, o vídeo abaixo endereça os principais deles, com explicações mais detalhadas de alguns pontos também!

Espero que tenha gostado e acompanhe a parte 4 neste link!

Curtiu o post? Que tal aprender a construir um robô multi-moedas profissional para a maior exchange do mundo? Clique no banner abaixo e saiba mais!

TAGS: nodejs

Olá, tudo bem?

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