Como montar bot trader na nuvem com gekko

in #gekko6 years ago (edited)

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 1

Passo 2 - Selecionar S.O. e capacidade do servidor: Passo 2

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: Passo 3

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 criadoServidor

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: Registro de 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

Gekko

Em breve postarei um tutorial de utilização e configuração de estratégias no Gekko

Sort:  

@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.

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

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!

Happy Birthday! - You are on the Steem blockchain for 2 years!

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!

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.029
BTC 58447.77
ETH 3173.14
USDT 1.00
SBD 2.43