Como montar bot trader na nuvem com gekko
Me interessei recentemente sobre bots automatizados para efetuar trades de criptomoedas, vi ótimas opções pagas, mas precisa de um investimento grande para compensar as taxas do bot.
Por isso resolvi procurar por soluções gratuitas, algumas interessantes e promissoras, mas deixar meu capital em mãos de terceiros é muito arriscado, por isso iniciei buscas para robôs open-source.
Achei um projeto interessante, o Gekko, dei uma breve analisada no código fonte, li muitos reviews positivos e por fim, instalei no meu computador e já comecei a operar, mas como ele precisa estar ligado sempre para melhores resultados, resolvi instalar num servidor na nuvem para trabalhar 24/7.
O Gekko trabalha com várias exchanges, sendo as principais: Binance, Poloniex, Bitfinex e Kraken.
Segue o passo a passo:
No tutorial, utilizei a cloud da Vultr, mas pode ser utilizado outras (Digital Ocean, Amazon, Azure etc.).
Após a finalização do cadastro, use o código promo25b para ganhar $25 dólares de crédito na nova conta (testado em 10/04/18).
Criação do servidor virtual
Passo 1 - Selecionar a localidade mais próxima de você:
Passo 2 - Selecionar S.O. e capacidade do servidor:
Eu selecionei o sistema operacional Debian 9 x64 com 1 Gb de RAM, que custa $5 dólares por mês, mas o Gekko funciona com 512 Mb, escolhi com um pouco mais memória para fazer simulações de trading grandes e rodar algumas rotinas paralelamente. Se for usar o básico 512 Mb já resolve.
Passo 3 - Nomear e deploy:
No item 7, só colocar um nome para seu servidor e apertar deploy que a vultr vai criar um servidor para você.
Instalando e configurando Gekko
Servidor criado
O servidor já está em funcionamento, para acessa-lo é só clicar no icone de monitor abaixo da frase Welcome back ou caso use Linux acessando via ssh (ssh [email protected].......).
As informações de usuário, senha e IP estão na tela.
Após acesso ao shell da máquina, atualize o debian com os comandos:
apt-get update
apt-get upgrade -y
Instalar o Node JS
curl -sL https://deb.nodesource.com/setup_8.x |bash -
apt-get install -y nodejs
**Instalando outras aplicações que utilizaremos: **
apt-get install -y git nginx certbot
Instalando o Gekko
git clone git://github.com/askmike/gekko.git -b stable
cd gekko
npm install --only=production
Feito isso, seu servidor Gekko já estará funcionando, mas poderá ser acessado por qualquer pessoa na internet, por isso vamos adicionar algumas camadas de segurança para impedir o acesso indevido.
Registrando domínio e criando um certificado SSL assinado gratuitamente
Para registro de domínio, utilizei a Freenom que me dá algumas opções de domínio gratuito por 12 meses, mas se quiserem podem utilizar outros de sua preferência.
Configurando o domínio:
Após escolher o nome do domínio, escolha a opção Use DNS e insira o IP do seu servidor e por ultimo aumente o período para 12 meses grátis.
Com o domínio registrado já podemos criar um SSL assinado gratuitamente pela Certbot
systemctl stop nginx
certbot certonly --standalone -d gekkobot.ml
Substitua o gekkobot.ml com seu domínio.
Agora precisamos editar alguns parametros na configuração do Gekko e Nginx para trabalhar com o SSL.
Precisamos editar o arquivo UIconfig.js que está na pasta /gekko/web/vue
cd /gekko/web/vue
nano UIconfig.js
Altere seu arquivo com os parâmetros abaixo e mude o host para seu domínio:
const CONFIG = {
headless: true,
api: {
host: '0.0.0.0',
port: 3000,
},
ui: {
ssl: true,
host: 'gekkobot.ml',
port: 443,
path: '/'
},
adapter: 'sqlite'
}
Após feita as alterações no arquivo use Ctrl + o para salvar e depois Ctrl + x para sair do editor nano.
nano /etc/nginx/sites-enabled/default
server {
listen 80;
listen [::]:80;
server_name gekkobot.ml;
return 301 https://$server_name$request_uri;
}
upstream websocket {
server localhost:3000;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
root /var/www/html;
ssl_certificate /etc/letsencrypt/live/gekkobot.ml/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/gekkobot.ml/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000";
location / {
proxy_buffers 8 32k;
proxy_buffer_size 64k;
proxy_pass http://websocket;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
Substitua o gekkobot.ml com seu domínio.
Gerando usuário e senha para acesso:
printf "usuario:
openssl passwd -apr1
\n" >> /etc/nginx/.htpasswd
Substitua a palavra usuário com o usuário que deseja criar, após será requisitada a senha duas vezes para o usuário que será cadastrado para confirmação.
Agora já podemos subir o serviço do Nginx
systemctl start nginx
Seu servidor já está pronto, mas para uma camada adicional de segurança, irei habilitar o firewall para impedir acessos em portas não utilizados no servidor
apt-get install ufw
ufw allow 22
ufw allow 80
ufw allow 443
ufw enable
Liberei apenas a porta 22 (SSH e SFTP para acesso remoto e copia de arquivos), 80 (web) e 443 (webssl).
Feito isto já podemos iniciar o Gekko com o comando
node gekko --ui
Agora só acessar seu dominio e digitar usuário e senha para acessar o Gekko
Em breve postarei um tutorial de utilização e configuração de estratégias no Gekko
✅ @starsplash, congratulations on making your first post! I gave you a $.05 vote!
Will you give me a follow? I'll follow you back in return!
Congratulations @starsplash! You have received a personal award!
1 Year on Steemit
Click on the badge to view your Board of Honor.
I need help please!
PC exchange # node gekko --ui
internal/modules/cjs/loader.js:583
throw err;
^
Error: Cannot find module '/home/luvin/gekko/exchange/gekko'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:581:15)
at Function.Module._load (internal/modules/cjs/loader.js:507:25)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:279:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:696:3)
OS linux mint 64 bits
Congratulations @starsplash! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!