Atenção: este post está desatualizado e usa a API da Mercado Bitcoin v3, descontinuada em outubro de 2023. Acesse a versão para API v4 neste link.
Estamos em 2021 e jamais as criptomoedas estiveram tão em alta. Com o Bitcoin batendo recordes de valorização superiores a U$60.000 e centenas de milhares de brasileiros comprando e vendendo a moeda todos os dias é difícil ficar apenas olhando. E eu não sou o tipo de empreendedor que fica apenas olhando.
Independente de você acreditar ou não que o Bitcoin está em uma bolha (todos acreditavam que ela estava em 2018, quando chegou a U$15 mil), a oscilação da moeda 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 Bitcoin, considerando que nas últimas semanas tivemos diversos dias com spread (diferença entre mínima e máxima) superior a 10%!!!
Para comprar e vender Bitcoin e demais criptomoedas (considerando que minerar não é mais tão lucrativo quanto foi no passado) você deve ter conta em algum exchange. Dentre os brasileiros eu confio apenas um: Mercado Bitcoin, tendo 2 milhões de brasileiros operando nele. O processo é bem burocrático para que seu cadastro seja aprovado, necessitando o envio de selfies, documentos, etc. Uma vez com a conta aberta (o que pode demorar de um a dois dias), você deve fazer um depósito bancário na conta bancária do exchange para que sua conta tenha saldo para operar.
Caso você prefira uma exchange estrangeira, confere este tutorial de robô para Binance e este para PancakeSwap.
A operação tradicional é muito simples: você usa reais para comprar Bitcoins (a preço atual ou futuro) e usa Bitcoins para vender e ganhar reais, que ficam na sua conta do exchange até ser sacado de volta para sua conta bancária. Sim, você deve ter uma conta bancária para realizar essas transações.
Como o preço oscila bastante, um trader experiente pode fazer muita grana comprando em baixa e vendendo nas altas da moeda. Um colega de serviço fez R$4 mil em um único dia com essa estratégia em uma oscilação de 20% que a moeda teve e eu mesmo consegui fazer 50% de rentabilidade em 3 meses operando de forma amadora.
Como eu não sou um trader, sequer experiente, 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. Não, eu não vou revelar meus ganhos com Bitcoin para não me responsabilizar caso você perca dinheiro e não lhe incentivar a colocar muita grana, mas sim, estou ganhando mais do que na renda fixa. Trading de bitcoin é algo muito arriscado e não recomendo colocar mais do que 20% da sua carteira de investimentos nele.
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?
O mesmo conteúdo deste tutorial pode ser visto no aulão abaixo:
Primeiro passo: criar uma conta no exchange
Para conseguir fazer este tutorial você deve ter uma conta criada na Mercado Bitcoin, o maior exchange brasileiro e o 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 outras criptos que eles possuem.
Como esse processo de criação de conta pode mudar com o tempo, não vou entrar em detalhes aqui. Crie sua conta e faça todo o processo de validação, com selfie e tudo mais. Após o cadastro, você precisa depositar dinheiro na sua conta Mercado Bitcoin. Esse depósito inicial possui taxa, esteja ciente disso. Na verdade, com exceção de depósito, tudo que você for fazer possui taxa: comprar, vender e sacar. Como essas taxas variam ao longo do tempo, consulte a página oficial, mas devido ao risco de day trade com BTC, recomendo apenas operar quando o spread estiver acima de 6%, para você conseguir no mínimo 1% ao dia.
Após estar com a sua conta 100% aprovada, habilite todos os mecanismos de segurança (na área de configurações da sua conta) como uma senha forte, Two Factor Authentication, palavra-segura e PIN. Nem todos estes itens são necessários para fazer este tutorial, mas sugiro que faça todos eles pois estes exchanges são atacados por hackers o tempo todo e você não vai querer facilitar, não é mesmo?
Após criar o seu PIN, você pode criar uma chave de segurança que será utilizada depois para se autenticar na API de negociações do Mercado Bitcoin. O link para criação da chave é esse, mas caso não funcione, procure as instruções neste artigo deles.
Segundo passo: criar o projeto Node.js
Crie uma pasta no seu computador com o nome de nodejs-bitcoin 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-safe axios querystring |
O módulo dotenv-safe serve para carregar automaticamente variáveis de ambiente na sua aplicação Node.js. Usaremos estes variáveis de ambiente para colocar as configurações do nosso bot.
Crie um arquivo “.env.example” na raiz do seu projeto com o seguinte conteúdo dentro, representando o modelo de arquivo de configuração que vamos precisar:
1 2 3 4 5 6 7 8 9 10 11 |
# .env.example, committed to repo CRAWLER_INTERVAL= # Exchange Configs KEY= SECRET= PIN= #1.01 se perdem com taxas PROFITABILITY= |
Agora crie um arquivo “.env” na raiz do seu projeto usando o mesmo conteúdo do .env.example como base, mas colocando os seus valores de verdade ao lado do sinal de igualdade de cada uma das variáveis de ambiente. Uma rápida explicação de cada variável:
- CRAWLER_INTERVAL: milissegundos entre cada execução do bot, sendo que o Mercado Bitcoin não tolera mais de 60 chamadas por minuto e pode lhe bloquear se tentar usar mais a API deles do que isso;
- KEY: sua API Key (alfanumérico), criada no Mercado Bitcoin;
- SECRET: o seu API Secret (alfanumérico), criado no Mercado Bitcoin;
- PIN: o seu PIN (quatro números), criado nas configurações do Mercado Bitcoin;
- 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;
Tenha em mente que as informações de KEY, SECRET e PIN são secretas e você não deve compartilhar com ninguém, caso contrário quem descobri-las poderá comprar e vender bitcoins 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ê gasta isso com as taxas do Mercado Bitcoin para compra e venda da moeda, fora a taxa que vai ter de pagar quando for sacar o dinheiro.
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, dentro do seu index.js na raiz do seu projeto adicione a seguinte linha de código:
1 2 3 |
require("dotenv-safe").config() |
Caso você tenha se esquecido de alguma variável ou o arquivo .env não esteja presente na raiz do projeto, ao chamar esta função config do dotenv-safe, sua aplicação não iniciará.
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 bitcoins, não na sua configuração.
Terceiro passo: consumindo a API de dados
Existem duas APIs na maioria dos exchanges: uma de dados (somente leitura, aberta) e outra de trading (leitura e escrita, exige credenciais mais específicas). Vamos começar pela primeira, que é mais simples e é a base do monitoramento do robô.
A documentação completa e atualizada da API de dados do Mercado Bitcoin pode ser encontrada aqui. Para organizar melhor nosso código, crie um arquivo api.js na raiz do seu projeto e dentro dele vamos colocar a classe do nosso objeto da API de dados (falo mais de classes em JS aqui):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
//MERCADO BITCOIN const axios = require('axios'); const ENDPOINT_API = 'https://www.mercadobitcoin.com.br/api/'; class MercadoBitcoin { constructor(config) { this.config = { CURRENCY: config.currency } } ticker() { return this.call('ticker'); } async call(method) { let config = { headers: { 'Accept': 'application/json', } } try { const response = await axios.get(`${ENDPOINT_API}${this.config.CURRENCY}/${method}`, config); return response.data; } catch (error) { console.error(error); return false; } } } module.exports = { MercadoBitcoin } |
Nesta amostra de código eu carrego a biblioteca axios para fazer as chamadas à API REST do Mercado Bitcoin e crio uma constante para armazenar o endereço da API. Crio uma classe com constructor que recebe um objeto de configurações por parâmetro que neste primeiro momento coloquei apenas uma variável currency que determina a moeda que estou operando no mercado, uma vez que esta informação deve ir na URL da chamada, usando a notação:
- BTC: Bitcoin
- BCH: Bitcoin Cash
- LTC: Litecoin
Ainda na classe do objeto Mercado Bitcoin eu tenho as funções ticker e a função genérica call que é a base para as demais. A função call é assíncrona e como eu usei await nela você deverá cuidar com isso na index.js onde chamará as funções (leia este artigo caso tenha problemas com programação assíncrona):
- ticker: retorna um objeto com o estado atual do mercado, incluindo o menor valor de venda da moeda no livro (sell), o maior valor de compra no livro (buy), o valor da última transação (last), o maior valor da moeda nas últimas 24h (high) e menor no mesmo período (low), além do timestamp desta informação. Estas informações são a base do monitoramento, para tomar decisões de compra e venda.
Com esse arquivo de API pronto, podemos voltar ao nosso index.js para criar uma rotina básica de monitoramento em nosso bot, como abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//index.js require("dotenv-safe").config(); const { MercadoBitcoin } = require("./api"); var infoApi = new MercadoBitcoin({ currency: 'BTC' }); setInterval(async () => { const tick = await infoApi.ticker() console.log(tick.ticker); }, process.env.CRAWLER_INTERVAL ) |
Aqui eu carreguei nossa classe MercadoBitcoin dentro do módulo de api e criei um objeto para monitorar a moeda BTC (bitcoin), que vai rodar a cada x segundos, definidos pela variável de ambiente CRAWLER_INTERVAL (sugiro começar com 5000).
Se você rodar agora este arquivo usando o comando ‘node index’ (ou configure o package.json para ele rodar com npm start), ele já deve estar funcionando e o seu bot vai estar monitorando o mercado continuamente (até ser encerrado), embora ainda não esteja tomando ação alguma.
Na próxima parte deste tutorial, vamos lidar com a segunda API, a de trading. Até lá espero que você já tenha sua conta criada e aprovada e este monitoramento 100%. Confira a parte 2 aqui.
Um abraço!
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!
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.
Olá Luiz, obrigado por compartilhar. Fiquei com uma dúvida: onde inserir o CRAWLER_INTERVAL de 5000 lá no código.
E outra coisa também: se nesta parte do tutorial estamos criando o monitoramento (API de dados), eu deviria ter inserido a Key e Secret no arquivo “.env.example” da API de Dados primeiramente neste arquivo? Ou vão ser as mesmas informações?
Boa tarde Denis. o CRAWLER_INTERVAL é definido no .env e usado no setInterval, lá no final do arquivo JS. As chamadas de API para monitoramento são abertas e públicas, não precisam de API Key e Secret. Na segunda parte do tutorial você vai precisar delas, pois a API de transações exige autenticação.
Vamos fazer um BOT para um exchange com taxas menores!!
O mercado btc é uma das mas caras!
https://www.criptomoedasfacil.com/comparativo-de-taxas-entre-exchanges-brasileiras/
Eu comecei a fazer um para FoxBit também, mas acabei não terminando. Não é difícil adaptar estes códigos para outros exchanges, visto que a estrutura da API deles é muito semelhante.
ENOENT: no such file or directory, open ‘C:Users”Usuario”Documentsmercadobitcoin.env.example’
Amigo, estou com esse erro, pode me ajudar a entende-lo?
Esse arquivo não foi encontrado “.env.example”, ele tem de ser criado com o “esqueleto” das variáveis de ambiente. Está lá no segundo passo do tutorial.
ele esta lá….
.env.example
.env
api,js
index.js
copiei os codigos de vc…. apenas substituir a key, o pin e o secret…… (e salvei como .env)
Veja o erro completo:
Error: ENOENT: no such file or directory, open ‘C:Users’usuario’Documentsmercadobitcoin.env.example’
at Object.fs.openSync (fs.js:646:18)
at Object.fs.readFileSync (fs.js:551:33)
at Object.config (C:Users’usuario’node_modulesdotenv-safeindex.js:31:42)
at Object. (C:Users’usuario’Documentsmercadobitcoinindex.js:1:86)
at Module._compile (module.js:643:30)
at Object.Module._extensions..js (module.js:654:10)
at Module.load (module.js:556:32)
at tryModuleLoad (module.js:499:12)
at Function.Module._load (module.js:491:3)
at Function.Module.runMain (module.js:684:10)
Olha o caminho que ele está tentando acessar. Faz sentido esse caminho na sua máquina?
Sim, a pasta raiz do bot esta nesse caminho mesmo
Com aquelas aspas mesmo no nome da pasta usuario? Esse erro é claramente impossibilidade de acessar o arquivo .env.example. Copie o caminho completo apresentando pelo erro, abra uma janela do Windows Explorer e cole o caminho na barra de endereço da janela e dê um ENTER. Se não funcionar é porque este caminho não está correto e você deve corrigi-lo.
Fui eu quem coloquei as aspas para não mostrar o nome do usuario….
Você copiou e colou o endereço completo no Windows Explorer e o arquivo abriu normalmente?
Ola estou em duvida sobre essas chaves,
KEY: sua API Key (alfanumérico), criada no Mercado Bitcoin;
SECRET: o seu API Secret (alfanumérico), criado no Mercado Bitcoin;
o Mercado Bitcoin só tem onde criar uma chave API e eu não sei se é a KEY ou a SECRET, mas sempre vai faltar uma delas. Obrigado.
Informações completas de criação do par chave/secret na documentação da Mercado Bitcoin: https://www.mercadobitcoin.com.br/trade-api/#acesso-%C3%A0-api-de-negocia%C3%A7%C3%B5es