Você está na página 1de 18

30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.

js - Parte 2 - LuizTools

Como criar um bot de compra e venda de


Bitcoin usando Node.js – Parte 2
Atualizado em 28/12/17!

Desde que escrevi a primeira parte deste tutorial de criação de um bot para comprar
e vender Bitcoins e outras criptomoedas usando a API do Mercado Bitcoin a
valorização da moeda atingiu níveis históricos, ultrapassando a marca de U$15.000
em apenas 1 BTC!!!

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. Agora faremos a codificação do nosso bot para que ele consiga comprar
e vender criptomoedas.

Ajustando a API

Abra novamente o seu projeto (sugiro estar utilizando o Visual Studio Code) e vá até
o seu arquivo api.js, que é nosso REST client para a API do Mercado Bitcoin. Caso não
tenha feito a primeira parte do tutorial, você pode baixá-la no post anterior, no
formulário ao fim do mesmo.

Logo no início do arquivo api.js, vamos modificar o original para adicionar dois
novos módulos que serão necessários, o crypto e o querystring (o unirest é do
tutorial anterior):

1 //MERCADO BITCOIN
2 const unirest = require('unirest')
3 const crypto  = require('crypto')
4 const qs      = require('querystring')

O primeiro serve para criptografar mensagens e o segundo para concatenar


variáveis no formato de querystring do HTTP. Precisaremos de ambos pois o
endpoint que vamos acessar para efetuar transações exige criptografia e para
algumas operações devemos enviar dados no body de um POST.

Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 1/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Para que estes módulos funcionem corretamente precisamos instalá-los no projeto


usando o NPM via console:

1 npm install -S crypto querystring

Ainda no arquivo api.js, logo abaixo dos requires, vamos definir duas novas
constantes para o path da Trade API e para o endpoint da mesma (o outro endpoint é
o de consulta de informações):

1 const ENDPOINT_API = 'https://www.mercadobitcoin.com.br/api/'


2 const ENDPOINT_TRADE_PATH = "/tapi/v3/"
3 const ENDPOINT_TRADE_API = 'https://www.mercadobitcoin.net' + ENDPOINT_TRADE_PATH

E por fim, logo abaixo do prototype da API de informações, vamos adicionar o


construir de um novo objeto que representa a inicialização da API de trading:

1 var MercadoBitcoinTrade = function (config) {


2     this.config = {
3         KEY: config.key,
4         SECRET: config.secret,
5         PIN: config.pin,
6         CURRENCY: config.currency
7     }
8 }

As configurações passadas por parâmetro são a chave da API, o segredo da API, o


PIN da sua conta e a moeda que vai negociar com esse bot (BTC, BCH e LTC no caso
do Mercado Bitcoin). Note que KEY, SECRET e PIN eu lhe ensinei como obter no post
anterior, dentro da sua área de trader da exchange.

Logo abaixo desta função construtora, vamos adicionar o prototype da API de


trading, como segue:

1 MercadoBitcoinTrade.prototype = {
2     
3     getAccountInfo: function(success, error) {
4         this.call('get_account_info', {}, success, error)
5     },
6  
7     listMyOrders: function (parameters, success, error) {
8         this.call('list_orders', parameters, success, error)
9     },
10  
11     placeBuyOrder: function(qty, limit_price, success, error){
12         this.call('place_buy_order', {coin_pair: `BRL${this.config.CURRENCY}`, q
13     },
14  
15     placeSellOrder: function(qty, limit_price, success, error){
16         this.call('place_sell_order', {coin_pair: `BRL${this.config.CURRENCY}`,
17     },
18  
19     cancelOrder: function (orderId, success, error) {
20         this.call('cancel_order', {coin_pair: `BRL${this.config.CURRENCY}`, orde
21     },
22  
23     call: function (method, parameters, success, error) {
24         //implementar
25     } Privacidade - Termos

26 }
https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 2/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Aqui estou definindo diversas operações que a API nos permite realizar, apenas
configurando as chamadas e passando-as para uma função call que não está
implementada. Vale citar o que cada operação realiza:

getAccountInfo: pega informações da sua conta, especialmente o seu saldo atual


em cada moeda, incluindo BRL;
listMyOrders: traz as suas últimas ordens no mercado, tanto de compra quanto
de venda e incluindo as que estão pendentes e canceladas, sendo que você pode
filtrar livremente pelos parâmetros que discutirei mais tarde;
placeBuyOrder: criar uma nova ordem de compra no livro de negociações. Caso
haja disponibilidade (tem moedas sendo vendidas ao preço que deseja pagar), a
ordem será executada imediatamente. Caso contrário, ela vai pro livro e seu saldo
fica bloqueado para honrar a compra;
placeSellOrder: cria uma nova ordem de venda no livro de negociações. Caso
haja disponibilidade (tem ordens de compra ao preço que você deseja vender), a
ordem será executada imediatamente. Caso contrário, ela vai pro livro e seu saldo
na criptomoeda fica bloqueado para honrar a venda;
cancelOrder: cancela uma ordem sua no livro de negociações;

Você deve ter notado que diversas chamadas concatenam ‘BRL’ à sigla da
criptomoeda que vamos negociar, gerando strings como BRLBTC, que é o que
chamamos de ‘coin pair’ ou ‘par de moedas’, o que indica que você está negociando
Reais por Bitcoins.

Também deve ter notado que em algumas ocasiões eu concateno variáveis


numéricas com strings vazias, para forçá-las a serem strings, que é o formato que a
API pede em diversos casos.

Para lidar com a assincronicidade inerente às chamadas de rede do Node, a maioria


das functions espera um callback de success e outro de error.

E a função call?

Ela é um pouquinho complexa, mas segue abaixo:

1 call: function (method, parameters, success, error) {


2  
3    var now = Math.round(new Date().getTime() / 1000)
4    var queryString = qs.stringify({'tapi_method': method, 'tapi_nonce': now})
5    if(parameters) queryString += '&' + qs.stringify(parameters)
6  
7    var signature = crypto.createHmac('sha512', this.config.SECRET)
8                          .update(ENDPOINT_TRADE_PATH + '?' + queryString)
9                          .digest('hex')
10  
11    unirest.post(ENDPOINT_TRADE_API)
12           .headers({'TAPI-ID': this.config.KEY})
Privacidade - Termos
13           .headers({'TAPI-MAC': signature})

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 3/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

14           .send(queryString)
15           .end(function (response) {
16               if(response.body){
17                  if (response.body.status_code === 100 && success)
18                      success(response.body.response_data)
19                  else if(error)
20                      error(response.body.error_message)
21                  else
22                      console.log(response.body)
23               }
24               else console.log(response)
25           })
26 }

A Trade API opera somente com requisições POST, cujos parâmetros da requisição
devem estar no formato querystring no body. Para montar este body, conto com a
ajuda do módulo querystring, concatenando os parâmetros, o nome da ação que esta
request fará e um número único que identifica esta request, que aqui apenas estou
pegando o timestamp atual, que sabemos que nunca se repetirá.

A Trade API também exige que cada requisição seja enviada com um cabeçalho
TAPI-ID com a chave de API e um header TAPI-MAC, que é um hash HMAC-SHA512
que montamos usando o path completo desta requisição e o API secret como chave
de criptografia. De acordo com o response da API, executamos o callback de success
ou de error.

Para finalizar a nossa API, vamos apenas modificar o module.exports no final para
expor ambas APIs neste módulo api.js:

1 module.exports = {
2     MercadoBitcoin,
3     MercadoBitcoinTrade
4 }

Comprando Bitcoins em Node.js

Uma vez que seu bot esteja monitorando o mercado e você tenha implementado a
APIs de trading, você deverá definir a lógica de compra e venda de criptomoedas.
Não há uma regra aqui, exceto que você deve procurar comprar em baixa e vender
em alta, para lucrar com a oscilação da moeda.

Para começar, vamos criar uma regra bem simples, baseada em uma observação do
gráfico candlestick do Bitcoin no momento que escrevo este post:

Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 4/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Gráfico Bitcoin

Podemos observar neste gráfico que o Bitcoin está valorizado em R$51.800 por
unidade, o que é um valor mediano considerando a máxima e mínima dos últimos
dias. Por exemplo, vamos modificar nosso index.js para ordenar uma compra
quando o Bitcoin cair abaixo de R$50.000 a unidade:

1 //index.js
2 require("dotenv-safe").load()
3 const MercadoBitcoin = require("./api").MercadoBitcoin
4 const MercadoBitcoinTrade = require("./api").MercadoBitcoinTrade
5 var infoApi = new MercadoBitcoin({ currency: 'BTC' })
6 var tradeApi = new MercadoBitcoinTrade({
7     currency: 'BTC',
8     key: process.env.KEY,
9     secret: process.env.SECRET,
10     pin: process.env.PIN
11 })
12  
13 setInterval(() =>
14    infoApi.ticker((response) => {
15        console.log(response.ticker)
16        if(response.ticker.sell <= 50000){
17             tradeApi.placeBuyOrder(1, 50000,
18                 (data) => console.log('Ordem de compra inserida no livro. ' + da
19                 (data) => console.log('Erro ao inserir ordem de compra no livro.
20        }
21        else
22             console.log('Ainda muito alto, vamos esperar pra comprar depois.')
23    }),
24    process.env.CRAWLER_INTERVAL
25 )

Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 5/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Neste código eu inicializo a trade API logo no topo, usando diversas variáveis de
ambiente presentes no seu arquivo .env que criamos na parte 1 deste tutorial.

Agora após realizar o ticker para pegar as informações atuais do mercado, eu


verifico o preço de venda mais barato do Bitcoin atualmente. Se ele for menor que o
número que eu defini como bom para compra (50000), eu mando comprar. Note que
você pode criar todo tipo de inteligência para calcular este número, como verificar o
spread das últimas 24h para inferir variação, verificar volume de vendas e compras
realizadas para inferir tendências de alta ou baixa, etc.

Uma vez que o preço esteja dentro do seu patamar considerado aceitável, é hora de
criar a ordem de compra no livro de negociações. O primeiro parâmetro é quantos
bitcoins você deseja comprar (1, mas podem ser frações com até 5 casas decimais) e
o segundo parâmetro é o preço máximo que deseja pagar por uma unidade de
bitcoin (50000). Diversas coisas podem acontecer neste momento.

Caso você não tenha saldo suficiente, você terá um erro como retorno. Já no caso de
que não exista nenhuma ordem de venda compatível com o preço que deseja pagar,
sua compra não será efetuada imediatamente. Ela vai parar no livro, seu saldo será
bloqueado, e ela será executada assim que alguém estiver vendendo pelo valor que
você deseja comprar (ou mais barato). Nestes casos de execução futura, você está
sendo executado, e geralmente paga uma taxa de comissão menor para a exchange.

Caso você tenha saldo e exista uma ordem de venda no mercado compatível com a
sua ordem de compra, ela será executada imediatamente. O seu saldo em BRL (R$)
será liquidado, você receberá saldo em BTC e pagará a comissão de executador, que
geralmente é mais alta do que a taxa de quem foi executado (o vendedor cuja ordem
já estava no livro antes da sua).

Curso Node.js e MongoDB


Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 6/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Vendendo Bitcoins em Node.js

Da mesma forma que realizamos a compra, podemos criar uma condição de venda
de criptomoedas em nosso robô. Aqui existem dois cenários: operar em STOP ou
buscar a lucratividade máxima. Obviamente o risco da segunda alternativa é muito
maior e não existe um algoritmo 100% eficiente.

Se optar por operar em STOP, você pode definir uma lucratividade padrão que deseja
atingir em cada trade, como 3% por exemplo, e assim que realizar uma compra, você
já emite uma ordem de venda com o ágio correspondente, como abaixo (substitua o
código de compra por este):

1        if(response.ticker.sell <= 50000){


2             tradeApi.placeBuyOrder(1, 50000,
3                 (data) => {
4                     console.log('Ordem de compra inserida no livro. ' + data)
5                     //operando em STOP de 3%
6                     tradeApi.placeSellOrder(1, 51500,
7                         (data) => console.log('Ordem de venda inserida no livro.
8                         (data) => console.log('Erro ao inserir ordem de venda no
9                 },
10                 (data) => console.log('Erro ao inserir ordem de compra no livro.
11        }

Com isso, você garante que venderá a um valor mínimo que lhe renda o lucro
desejado (neste caso, vender a 51500 lhe renderá 2% líquido, por causa das
comissões de compra e venda da exchange), tão logo o mercado atinja esse patamar.
Eu gosto de operar assim, pois é uma forma de investimento de renda fixa com
Bitcoin. Essa porcentagem deve ser relativa ao spread atual (diferença entre mínima
e máxima dentro de um período) e deve ser sempre superior a 1% (por causa das
comissões).

Note que esta venda está sendo posicionada no livro de negociações no mesmo
instante que você está comprando a moeda. Ela não vai ser executada
instantaneamente, mas assim que o mercado atingir aquele patamar, o que pode
levar alguns minutos em dias de alta volatilidade, ou até mesmo semanas, em
períodos de baixa volatilidade (ou caso tenha escolhido um valor muito alto).

Ordens de compra e de venda não executadas podem ser canceladas a qualquer


momento usando a function apropriada e seu dinheiro é devolvido (seja ele BTC ou
BRL).

Se optar por operar com lucratividade máxima, você não deverá posicionar sua
ordem de venda imediatamente após a ordem de compra e sim, deverá continuar
monitorando o mercado para entender qual o melhor momento de vender. Esse
desafio eu deixo para você bolar.

Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 7/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Otimizando Compra e Venda de Bitcoin

Usei números fixos nos exemplos anteriores, mas é óbvio que essa estratégia não é lá
muito boa pois cria um bot muito burro. O que sugiro é que você sempre realize
uma consulta à sua conta para saber quanto possui de saldo da moeda que vai
utilizar, para poder calcular quanto pode comprar/vender, evitando erros na API.

Para fazer isso, vamos criar uma function na index.js chamada getQuantity:

1 function getQuantity(coin, price, isBuy, callback){


2     price = parseFloat(price)
3     coin = isBuy ? 'brl' : coin.toLowerCase()
4  
5     tradeApi.getAccountInfo((response_data) => {
6         var balance = parseFloat(response_data.balance[coin].available).toFixed(
7 balance = parseFloat(balance)
8         if(isBuy && balance < 50) return console.log('Sem saldo disponível para
9         console.log(`Saldo disponível de ${coin}: ${balance}`)
10         
11         if(isBuy) balance = parseFloat((balance / price).toFixed(5))
12         callback(parseFloat(balance) - 0.00001)//tira a diferença que se ganha n
13     },
14     (data) => console.log(data))
15 }

Esta function espera a moeda que estamos negociando, o preço de uma unidade
dela, se é uma compra ou venda (true/false) e um callback.

Após algumas conversões usamos a Trade API para pegar informações da conta do
indivíduo e descobrir o saldo dele da moeda que vamos criar a ordem. Se for uma
compra (isBuy === true), estaremos operando em BRL e temos de ter no mínimo
R$50 na conta para poder gastar, comprando uma quantidade igual a saldo /
preço. Se for uma venda de criptomoeda, o próprio saldo (balance) da criptomoeda é
a quantidade que queremos negociar.

Aqui considero que você sempre deseja usar todo o seu saldo na transação o que, em
volumes altos, pode ser muito arriscado.

Agora vamos usar esta getQuantity nas nossas chamadas de compra, para deixá-las
dinâmicas, adaptadas ao saldo atual na sua conta do Mercado Bitcoin:

1 if(response.ticker.sell <= 50000){


2     getQuantity('BRL', response.ticker.sell, true, (qty) => {
3          tradeApi.placeBuyOrder(qty, response.ticker.sell,
4              (data) => {
5                  console.log('Ordem de compra inserida no livro. ' + data)
6                  //operando em STOP
7                  tradeApi.placeSellOrder(data.quantity, response.ticker.sell * p
8                      (data) => console.log('Ordem de venda inserida no livro. '
9                      (data) => console.log('Erro ao inserir ordem de venda no li
10              },
11              (data) => console.log('Erro ao inserir ordem de compra no livro. '
12     })
13 }
Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 8/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Também usei a quantidade retornada pelo response da compra para passar ao


request de venda, evitando chamadas desnecessárias à API. E por fim, usei o valor
de venda do mercado (tick.sell) e multipliquei pela rentabilidade desejada que eu
deixei configurada no arquivo .env na primeira parte do tutorial, lembra? Assim,
fica fácil de mudar isso depois conforme a sua análise do mercado, até que tenha
capacidade para montar uma fórmula em cima do spread corrente.

A única otimização que eu não tenho como lhe ajudar é a de determinar quando é o
melhor momento para compra, deixei o 50000 chumbado ali no código e depois você
deve mudar conforme o mercado. Parece um problema simples, mas não é, é tão
complicado descobrir a mínima de compra quanto a máxima de venda e se eu
tivesse essa fórmula já estaria rico.

Espero que tenham gostado deste tutorial e tendo qualquer dúvida, deixe nos
comentários!

Curtiu o post? Que tal aprender mais sobre como criar aplicações incríveis
usando Node.js? Então clica no banner abaixo e dá uma conferida no meu
livro sobre programação web com Node.js!

O que achou desse artigo?

[Total: 22 Média: 4.4]

PUBLICADO POR

Luiz Duarte Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 9/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Pós-graduado em computação, professor, empreendedor, autor, Agile Coach e programador nas


horas vagas. Ver todos os posts de Luiz Duarte 

 11/12/2017  Luiz Duarte  Desenvolvimento, Node.js  nodejs


68 COMENTÁRIOS LuizTools 
1 Iniciar sessão

 Recomendar t Tweet f Partilhar

Mostrar primeiro os mais votados

Escreva o seu comentário...

INICIE SESSÃO COM O


OU REGISTE-SE NO DISQUS ?

Nome

João Paulo Hildebrand • há um ano


Olá Luiz!

Estou desenvolvendo uma interface (front-end mesmo) para


consumir as APIs e estou usando seu código como base.
Fiz as adaptações do seu script e consegui com sucesso obter o
MercadoBitcoin, porém, quando vou consumir o
MercadoBitcoinTrade, minha request dá um erro de Access-Control-
Allow-Origin.

Você saberia me dizer se há algum bloqueio que não permita uma


requisição por localhost ou algo assim?
1△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > João Paulo Hildebrand


• há um ano
CORS, dê uma pesquisada sobre isso, provavelmente é o que
você precisa pra resolver esse problema.
△ ▽ • Responder • Partilhar ›

Evandro Junior • há 2 anos


Luiz,

Criei uma adaptação do seu bot e coloquei aqui:


https://github.com/evandroj...
Fiz referência ao seu artigo, obviamente. Falta colocar um stop loss.

Muito obrigado pelos ensinamentos!


1△ ▽ • Responder • Partilhar ›

Nilton de Oliveira > Evandro Junior • há um ano


Luiz, andei realizando uns testes com a sua adapitacao e esta Privacidade - Termos

retornando o seguinte erro ao executar um trader


https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 10/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools
retornando o seguinte erro ao executar um trader

Erro ao inserir ordem de venda no livro. Valor do


*tapi_nonce* inválido, valor deve ser maior do que o último
utilizado: 1531870361624.

Deixei o numero como exemplo


△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Nilton de Oliveira


• há um ano
Às vezes dava esse problema, não lembro agora como
resolvi, mas era algo como espaçar mais as chamadas
ou algo assim.
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Evandro Junior • há 2 anos


Excelente recomendação no Readme, hehehe
△ ▽ • Responder • Partilhar ›

André Fiacador • há um ano • edited


Excelente tutorial.
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > André Fiacador • há um ano

Fico feliz que tenha gostado!


△ ▽ • Responder • Partilhar ›

Fernando Oberdorfer • há um ano


Olá amigo... acho que encontrei um erro no código... não tenho muito
conhecimento em javascript, mas sim em visual.

Na parte abaixo... tem um if... " se for menor ou igual que 50000 "....
então, se for maior, ele buscará um else ou elseif, neste caso parece
que executará a ordem de compra seguido pela de venda, porém a
segunda só será executada se atingir o valor mínimo informado. Mas
não se o valor for >= (50000 + x%)

if(response.ticker.sell <= 50000){


getQuantity('BRL', response.ticker.sell, true, (qty) => {
tradeApi.placeBuyOrder(qty, response.ticker.sell,
(data) => {
console.log('Ordem de compra inserida no livro. ' + data)
//operando em STOP
tradeApi.placeSellOrder(data.quantity, response.ticker.sell *
parseFloat(process.env.PROFITABILITY),
(data) => console.log('Ordem de venda inserida no livro. ' + data),
(data) => console.log('Erro ao inserir ordem de venda no livro. ' +
data))
}, Privacidade - Termos

(data) => console.log('Erro ao inserir ordem de compra no livro. ' +


https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 11/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

data))
})
}
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Fernando Oberdorfer • há um ano

Bom dia Fernando. A ideia é essa mesmo, que cada um ajuste


a lógica conforme as regras que quiser criar para sue robô.
Meu intuito era fornecer o esqueleto com a parte de
comunicação pronta para comprar e vender, o resto é com
vocês. :)
1△ ▽ • Responder • Partilhar ›

Fernando Oberdorfer • há um ano • edited


Boa noite!!
Estou tendo o erro abaixo (linha 78)... revisei o código e não
encontrei o problema. Todos ( ) e { } abriam e fechavam.

/home/....../...../....../mercadobitcoin/api.js:78
call: function (method, parameters, success, error) {
.....................^

SyntaxError: Unexpected token (


at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:616:28)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Module.require (module.js:596:17)
at require (internal/module.js:11:18)
at Object.<anonymous>
(/home/....../...../....../mercadobitcoin/index.js:3:24)
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Fernando Oberdorfer • há um ano

A mensagem é exatamente um abre-parântese no lugar


errado. Pode ser algo antes dele que está fazendo com que o
mesmo não seja reconhecido, nem sempre é problema depois
ou na mesma linha.
1△ ▽ • Responder • Partilhar ›

Fernando Oberdorfer > Luiz Fernando Jr • há um ano


Realmente, tinha uma } a mais, antes do parêntese...
exclui ela, e funcionou.
Só quanto atingiu o valou mínimo, ele não executou a
compra... vou revisar.
Privacidade - Termos

Muito obrigado.
https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 12/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Fernando


Oberdorfer • há um ano

As vezes não há volume de venda suficiente


para concretizar todas as compras, é uma
questão de mercado. Uma dica é sempre
colocar alguns centavos a mais na compra para
garantir que você será contemplado antes dos
demais.
1△ ▽ • Responder • Partilhar ›

Fernando Oberdorfer > Luiz Fernando Jr


• há um ano
Muito obrigado, mesmo, por ajudar... é chato
ficar olhando para o gráfico a cada minuto,
esperando subir ou cair drasticamente. kkkk

Vlw.
1△ ▽ • Responder • Partilhar ›

Kirano • há um ano
Boa noite Luiz,

Fui fazer um teste agora e ele me deu o erro:

Ordem de compra inserida no livro. [object Object]


Erro ao inserir ordem de venda no livro. Valor de *quantity* deve
representar um
decimal.

Ele comprou, mas não vendeu.


△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Kirano • há um ano

Deu algum erro de conversão pois o valor de quantity deve ser


um decimal. Nada que um pequeno ajuste de JavaScript não
resolva.
△ ▽ • Responder • Partilhar ›

Kirano > Luiz Fernando Jr • há um ano • edited


E como eu faço isso? Entendo um pouco de codigo,
mas não tanto.
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Kirano


• há um ano
Esse tutorial é para programadores Node.js,
você tem de saber um mínimo de JavaScript
pra conseguir usar esses códigos, coisa bem Privacidade - Termos

básica mesmo. Você baixou o meu zip a partir


https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 13/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools
p p
do formulário ou fez o tutorial para montar o
bot? O ideal é fazer o tutorial pra ir
acompanhando o raciocínio e entendendo como
o bot é construído, o zip eu disponibilizo apenas
para consulta, não é pra usar ele sozinho.
△ ▽ • Responder • Partilhar ›

Adriano Dbaoracle • há um ano


Bom dia Luiz ,tudo bem?
Qual o é o caminho dessa aplicação via Navegador mesmo ?
Para que possa testar..
No aguardo e grato .
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Adriano Dbaoracle • há um ano

Boa tarde Adriano. Não tem versão de navegador, é via


console que você tem de executar ela. Caso não tenha
experiência com Node.js, sugiro olhar os posts mais iniciantes
aqui do blog ou meu livro na amazon.
△ ▽ • Responder • Partilhar ›

Marcos Martinelli • há um ano


Olá Luiz, boa tarde!
Obrigado pelo tutorial, estava buscando isso há um bom tempo. Só
que estou tendo um problema: eu fiz o cadastro a baixei os arquivos,
enquanto não tinha dinheiro na corretora, apareciam os índices e a
mensagem de saldo insuficiente, depois que coloquei dinheiro na
corretora, aparece o seguinte erro repetidamente:

"[SyntaxError: Unexpected token u]"

O que pode ser?


Obrigado,
Marcos
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Marcos Martinelli • há um ano

No erro deve dizer o arquivo e a linha onde está o problema.


Lá deve ter um 'u' perdido, que está quebrando o código. É
problema de código errado mesmo.
△ ▽ • Responder • Partilhar ›

Iago Nunes • há 2 anos


Olá luiz Fernando, Agradeço pelo Tutorial, é um ótimo ponto de
partida para outras construções. Teria como você enviara para e-mail
o codigo fonte iago-lucas@hotmail.com
△ ▽ • Responder • Partilhar ›
Privacidade - Termos

868686 • há 2 anos
https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 14/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Olá Luiz, parabéns pelo trabalho e obrigado pelo post.

Você conhece algum bot para arbitragem de cryptomoedas em


NodeJS? Já pensou em criar um?

Existem algumas opções open source, como o Balckbird, mas são


escritas em outras linguagens e não suportam exchanges brasileiras.
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > 868686 • há 2 anos

Desculpe minha ignorância em trading, mas o que seria


arbitragem? Meu bot em Node.js analisa mercado, compra em
baixa, vende em alta, etc. Seria isso?
1△ ▽ • Responder • Partilhar ›

868686 > Luiz Fernando Jr • há 2 anos • edited


É basicamente a mesma coisa só que entre exchanges.

O bot monitora o mercado em duas ou mais exchanges,


compra na que está mais barato e vende na que está
com a cotação mais cara.

As estratégia varia de bot para bot, o Blackbird, por


exemplo, utiliza uma abordagem que torna as
operações imunes às variações do mercado, portanto,
oferece um risco menor.

Existem empresas que oferecem este serviço, no Brasil


eu conheço a Atlas: https://quantum.atlasproj.com/
Porém, suspeita-se que eles fiquem com metade dos
lucros (!!!). :/

Encontrei este aqui feito em NodeJS, mas não é


atualizado há 4 anos, nem suporta exchanges
brasileiras. Tem também o Gekko que é focado em
trading mas tem algum suporte para arbitragem,
porém, também não suporta exchanges brasileiras.
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > 868686


• há 2 anos
Ah entendi, eu comecei a fazer isso entre Foxbit
e Mercado Bitcoin, mas é para uso pessoal
mesmo e não tive bons resultados ainda por
causa das altas taxas de transferência e de
mineradores (talvez com altcoins seja mais
viável). Se eu fizesse para mercado faria o
mesmo que a Atlas, hehehehe.
1△ ▽ • Responder • Partilhar ›
Privacidade - Termos
Jean Kovaleski > Luiz Fernando Jr
• há um ano
https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 15/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools
há um ano

Boa tarde Luiz, pesquisou mais a respeito do


bot para arbitragens? Conseguiu criar algum?
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Jean Kovaleski


• há um ano
Boa noite Jean. Infelizmente não tenho mais
trabalhado neste projeto. Um abraço.
△ ▽ • Responder • Partilhar ›

868686 > Luiz Fernando Jr • há 2 anos • edited


Então, depois quando tiver um tempo dê uma
lida na documentação do Blackbird.

Na abordagem deles o trader divide o montante


que tem entre as exchanges que deseja operar e
o bot faz a arbitragem sem transferir os valores
entre as exchanges em toda operação.

Isso evita perder muito dinheiro com as taxas.


△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > 868686


• há 2 anos
Vou dar uma olhada sim.
1△ ▽ • Responder • Partilhar ›

Luiz Felipe • há 2 anos


Bom dia Luiz,
Parabéns pelo Post, ótimo para iniciantes ( meu caso ) !
Fiz todo o procedimento.... teve alguns erros meus por falta de
experiência mesmo, mas analisando com calma, voltando e
corrigindo.... acho que agora esta igual ao seu Post..... mesmo assim
não estou conseguindo fazer rodar o Bot...... vc teria ele na versão
final ( sem os APIs, é claro, rs ) para me encaminhar e ver onde estou
errando ?
Já refiz o seu post e não estou conseguindo finalizar !
Agradeco se alguém me enviar o arquivo final no email para eu poder
ver onde estou errando !
( felipe@suporteshop.com.br )

Obrigado e Parabéns mais uma vez !


△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Luiz Felipe • há 2 anos

Coloca seu email no formulário ao final do post que você


recebe a versão completa. Se ela não funcionar me avise.
△ ▽ • Responder • Partilhar ›
Privacidade - Termos

Geovane Aguiar • há 2 anos


https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 16/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Muito bom mesmo, sou leigo em programaçao, seus posts sao super
didaticos, otimos pra quem esta iniciando,
meu Interesse e especisalmente em programaçao mobile, mas estes
posts sobre node.js estao otimos... vou ficar aguardando
aquela implementaçao que vai deixar a gente rico. ;) vlew
△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Geovane Aguiar • há 2 anos

Fico feliz que goste dos conteúdos que escrevo. Tendo


qualquer sugestão de tema, pode mandar!
△ ▽ • Responder • Partilhar ›

Evandro Junior • há 2 anos


Bugfix:

Faltava o this do this.config.CURRENCY nesses métodos:

placeBuyOrder: function(qty, limit_price, success, error){


this.call('place_buy_order', {coin_pair:
`BRL${this.config.CURRENCY}`, quantity: (''+qty).substr(0,10),
limit_price: ''+limit_price}, success, error)
},

placeSellOrder: function(qty, limit_price, success, error){


this.call('place_sell_order', {coin_pair:
`BRL${this.config.CURRENCY}`, quantity: (''+qty).substr(0,10),
limit_price: ''+limit_price}, success, error)
},

Parabéns pelo artigo!


△ ▽ • Responder • Partilhar ›

Luiz Fernando Jr LuizTools > Evandro Junior • há 2 anos

Não estava funcionando sem o this? Porque eu nunca uso this


e estava funcionando aqui.
△ ▽ • Responder • Partilhar ›

Evandro Junior > Luiz Fernando Jr • há 2 anos


Para mim não estava funcionando sem o this. Tem
outro lugar mais abaixou que você usou this.

var signature = crypto.createHmac('sha512',


this.config.SECRET)
.update(ENDPOINT_TRADE_PATH + '?' +
queryString)
.digest('hex')
△ ▽ • Responder • Partilhar ›

Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 17/18
30/07/2019 Como criar um bot de compra e venda de Bitcoin usando Node.js - Parte 2 - LuizTools

Orgulhosamente mantido com WordPress

Privacidade - Termos

https://www.luiztools.com.br/post/como-criar-um-bot-de-compra-e-venda-de-bitcoin-usando-nodejs-2/ 18/18

Você também pode gostar