Independente de você acreditar ou não que as criptomoedas estão em uma bolha, a oscilação delas 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 moedas onde tem diversos dias com oportunidades superiores a 10%!!!
Para comprar e vender 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. Independente disso, você pode programar o robô deste tutorial sem ter uma conta real criada, usando apenas a conta de teste.
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. Importante frisar que este é um tutorial para Binance Spot. Se estiver procurando Binance Futures, use este tutorial.
Caso prefira outra exchange, leia este tutorial de robô para Mercado Bitcoin, este para PancakeSwap 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.
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.
Vamos lá!
#1 – Configuração inicial
Para conseguir fazer este tutorial você deve ter uma conta criada na Binance (clique no link), a maior exchange mundial e a 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 as centenas de moedas que eles possuem. O vídeo abaixo mostra todo o processo de criação de conta e obtenção das chaves, tanto de produção quando de desenvolvimento.
Caso não goste de assistir vídeos, neste link tem o tutorial da Binance para chave de produção, enquanto que neste link você pode criar as chaves de desenvolvimento/teste.
Certifique-se de anotar e guardar em segurança as suas chaves, precisará delas se quiser operar através de robôs e se alguém tiver acesso às mesmas poderá controlar a sua conta, então cuidado!
Com a conta aberta e as chaves em mãos, é hora de instalar na sua máquina o Node.js, que é a tecnologia que vamos usar para construir o bot. 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.
#2 – Criar o projeto Node.js
Crie uma pasta no seu computador com o nome de binance-spot 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 axios 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:
- 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, produção ou desenvolvimento;
- 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: BTDUSDT (sempre em maiúsculas);
- 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;
Seu arquivo deve ficar mais ou menos assim:
1 2 3 4 5 6 7 8 |
API_URL=https://testnet.binance.vision/api STREAM_URL=wss://stream.binance.com:9443/ws API_KEY=chave de api SECRET_KEY=segredo da chave PROFITABILITY=1.1 SYMBOL=BTCUSDT |
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 criptomoedas 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:
1 2 3 4 5 |
"scripts": { "start": "node -r dotenv/config index" }, |
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 criptomoedas, não na sua configuração.
#3 – Monitorando o mercado
Vamos começar pela primeira atividade, que é mais simples e é a base do robô: monitorar o mercado. Para essa finalidade 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. Importante frisar que no ambiente de desenvolvimento/testes o único par que funciona bem é o BTCUSDT (Bitcoin em Tether/dólar), os demais são bem bugados.
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.toLowerCase()}@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, que temos de garantir que esteja em minúsculo por exigência da Binance 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.
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 vai ver na PARTE 2, que você confere neste link!
Quer aprender tudo que é possível com as streams da Binance? Confere o vídeo abaixo.
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.
Criação de Robô pra Mercado Financeiro
Por favor, vocês poderiam implementar a minha ideia (abaixo) de “aliviar” perdas (loss) sucessivas pra não quebrar imediatamente minha banca?
Eu tenho assinatura do Sistema Loss Virtual, da RUBIBOT (como sou iniciante no mercado financeiro, eu acho que estes robôs trabalham no índice de volatilidade), no qual os robôs operam na conta virtual e, assim que surgir a quantidade (determinada por mim na configuração) de perdas (loss) na conta virtual, o robô entra na conta real; e, assim que surgir uma perda (loss) na conta real, ele volta pra conta virtual, saindo de uma possível sequência devastadora de perdas (loss) que quebra qualquer banca!
Minha ideia é simples: na conta real, sempre antes do robô entrar com o valor, ele determinaria este valor da seguinte maneira:
Se a operação imediatamente anterior na conta real deu ganho (gain)
Se total acumulado de perdas com o fator de Martin Gale (determinado por mim na configuração) = 0 (zero)
Ele entra com o valor inicial (determinado por mim na configuração)
Se esta operação der perda (loss)
Ele aplica a este valor o fator de Martin Gale (determinado por mim na configuração), acumulando-o no total acumulado de perdas com o fator de Martin Gale (determinado por mim na configuração)
Fim-Se
Senão
Ele entra com este total
Se esta operação der ganho (gain)
Ele zera este total
Senão
Ele aplica a este total o fator de Martin Gale (determinado por mim na configuração)
Fim-Se
Fim-Se
Senão
Ele entra com o valor inicial (determinado por mim na configuração)
Se esta operação der perda (loss)
Ele aplica a este valor o fator de Martin Gale (determinado por mim na configuração), acumulando-o no total acumulado de perdas com o fator de Martin Gale (determinado por mim na configuração)
Fim-Se
Fim-Se
Por favor, é possível esta implementação?
Se sim, qual seria o orçamento?
Muito obrigado e no aguardo.
Meu telefone: 21991377651
Meu e-mail: [email protected]
Atenciosamente,
José Joel Carvalho Moreira
Infelizmente não desenvolvo bots para terceiros José, somente os meus mesmo. Trabalho apenas ensinando programação. Deixo aqui seu comentário caso algum leitor queira ajudar com este freela, mas sinta-se livre para exclui-lo já que tem dados pessoais seus.
Olá Luiz, sou o criador da plataforma Sociedade de Investidores (https://sociedadedeinvestidores.com/) que automatiza investimentos por meio da plataforma Metatrader 5. Existe alguma forma de criar uma integração da Binance com essa plataforma, de modo que eu possa usar o meu robô para enviar as ordens para a Binance por meio da Metatrader 5?
Não sei dizer, não entendo quase nada de MetaTrader, sempre trabalhei diretamente com as APIs da Binance, já que não há necessidade de intermediários.