Algoritmo de negociação automatizada para Bitcoin - via Foxbit / Blinktrade.
❗ IMPORTANTE:
- A FoxBit não utiliza mais a plataforma Blinktrade portanto este projeto não será mais atualizado. Manterei o REPO ativo para pessoas que querem estudar a estrutura de um Robô de negociação e/ou a implementação da estratégia de Scalper implementada aqui.
- Não me responsabilizo por qualquer tipo de dano e/ou prejuizo causado durante e/ou decorrente do uso desta ferramenta.
- Lembre-se que este repositório está disponível sob uma licença do tipo Apache 2.0.
O robô executa a estratégia Scalper, visando a execução de um grande volume de ordens de compra e venda com pequenos lucros entre si. A materialização desta estratégia depende basicamente da forma com que você parametrizará a execução do robô, principalmente no que tange o % de lucro esperado em cada operação e os valores das ordens em si.
Baixe o zip com o fonte ou realize o fork+clone deste Repo e, em seguida, baixe as dependêcias do projeto por meio do comando:
npm install
Antes de executar o robô você precisa gerar suas credenciais de acesso na plataforma FoxBit. Você pode realizar isso clicando aqui.
Estes dados devem ser salvos em um arquivo chamado api.json
na raiz da biblioteca utilizando o seguinte formato:
{
"user": "",
"password": "",
"secret": ""
}
O robô está programado para enviar email - utilizando GMail - relatando o envio e execução de ordens.
Para que esta infra funcione você precisa apenas criar um arquivo chamado mail.json
na raiz da biblioteca utilizando o seguinte formato:
{
"email" : "seu endereço de email do Gmail",
"appPass" : "senha do gmail ou senha de app caso vc possua 2FA habilitado",
"destino" : "endereço de destino"
}
Você deve também parametrizar a execução considerando os limites e riscos que você está disposto a correr com a ferramenta. Os principais parâmetros que coordenam a proporção risco/lucro são os seguintes:
Os parâmetros abaixo limitam a operação do robô fazendo com que nada seja realizado se o mercado estiver acima do valorMaximoCompra
ou abaixo do valorMinimoCompra
.
/// Valor máximo para compra de BTC
valorMaximoCompra : 70000,
/// Valor mínimo para compra de BTC (base do túnel de negociação)
valorMinimoCompra : 30000,
Os valores definidos nas variáveis abaixo ditam como o robô investirá o capital disponível - if any.
O robô nunca gastará mais que o estipulado como o maximoGastos
e gerará ordens de no máximo valorMaximoOrdem
e, sempre que possível - veja detalhes abaixo - utilizará o valorOrdem
para estas operações.
Em uma situação onde for detectado que uma compra foi realizada em um valor superior ao disponível atualmente no mercado o valor da ordem poderá ser automaticamente ajustado utilizando o percentual de variação detectado: Diferença % entre o valor mais alto pago pela fração da crypto e o valor atual da mesma.
/// Valor máximo que o robô está autorizado a gastar
maximoGastos : 2000,
/// Valor das ordens de compra enviadas pelo robô
valorOrdem : 200,
/// Valor máximo de cada ordem de compra. Se este valor for diferente do valor informado para "valorORdem", o rob^
/// realizará um ajuste no valor pago, acrescentando o percentual de custo atual frente ao custo inicial por BTC até
/// o limite de gastos definido aqui.
valorMaximoOrdem : 12,
O robô considera também as informações de quanto você possuía em fiat na corretora antes de iniciar a operação (valorInicial
) para detectar possíveis prejuízos e ajustar a forma de operação e valores de ordens.
/// Valor inicialmente depositado na corretora em fiat
valorInicial : 7000,
Para realização de atualização de valor médio o robô trabalha com um túnel dinâmico secundário que é ajustado baeado no thresholdRecompraEmBRL
. Este túnel impede que sejam realizadas recompras se a flutuação do mercado não for considerada grande o suficiente - evitando operações sequenciais em valores muito próximos um ao outro.
/// Threshold que define o momento de rebalanceamento do valor de saída
/// - O robô faz uma média ponderada com os valores das compras e utiliza esta informação para
/// decidir a melhor hora para sair
thresholdRecompraEmBRL : 50,
Qual o lucro total esperado após a execução do robô.
/// Lucro % esperado
lucroEsperado : 0.01,
Na versão atual você precisa informar a data da sua última venda para que o robô consiga coletar as informações de sua carteira ativa. Para tanto, basta acessar sua conta na corretora encontrar qual a data/horário em que isto aconteceu.
Se for sua primeira operando em renda variável, você não deveria estar usando o robô. #ficaDica
Por exemplo, no seguinte caso:
A data seria 12/18/2017, 10:22:02 AM
, adicionados duas horas
do fuso horário.
//// Data da última venda realizada na plataforma ou, qualquer data no futuro caso vc
//// opte por iniciar vendido
dataBase : "2017-12-18 12:22:02"
Para ignorar a carteira atual na corretora basta informar true
como valor para iniciaComprado
.
/// Caso queira que o robô ignore o valor `dataBase` e inicie uma carteira nova, altere este valor para `true`
iniciaComprado: false
Para permitir a venda parcial de suas cryptos, altere o valor da variável vendaParcial
para true
.
/// Caso queira que o robô ignore o valor `dataBase` e inicie uma carteira nova, altere este valor para `true`
vendaParcial: false
Para executar, basta utilizar o seguinte comando:
node algodinha.js
Se você quiser acompanhar o status do robô enquanto estiver longe do seu servidor/computador basta acessar o endereço: http://ip_da_sua_maquina:1337/
(ou localmente em http://localhost:1337/
).
Os logs são salvos em disco no caminho ./log/algodinha.txt
. Recomendo o uso do Baretail free para acompanhar - inclusive disponibilizei no projeto um arquivo de preferências baretail.udm
com o highlight dos pricipais eventos do log.
Veja a lista com as issues aqui.
Os principais problemas, IMHO são os seguintes:
- Demora na inicialização: Em alguns momentos o snapshot do book pode demorar muito para chegar. É uma característica da infra da Blinktrade. Se isso acontecer com você (observável pela demora em iniciar o robô), basta reiniciar o robô.
- Reconexão: O processo de reconexão ainda é bem arcaico. No estado atual, não recomendo que você deixe o robô executando sem supervisão.
Contribuições em forma de Bitcoin e/ou PRs são muito bem vindas! Peço apenas que antes de trabalhar/enviar uma PR entre em contato comigo para alinharmos as expectativas e approach da implementação.
Gostou MUITO? Se quiser me fazer um agrado pagando um cafezinho, tá fácil:
- Carteira SegWit:
bc1qjfsqzmhu9na6ark3ldxxqfay8tjk72c67c9qhy
- Carteira BTC:
18BE5nYMmX91yu26Qh81UaNm7c89MmMj71