• Nenhum resultado encontrado

Desenvolvimento de um BOT de negociação para Criptomoedas

N/A
N/A
Protected

Academic year: 2021

Share "Desenvolvimento de um BOT de negociação para Criptomoedas"

Copied!
72
0
0

Texto

(1)

DESENVOLVIMENTO DE UM BOT DE NEGOCIAÇÃO PARA CRIPTOMOEDAS

Florianópolis,SC 2020

(2)

DESENVOLVIMENTO DE UM BOT DE NEGOCIAÇÃO PARA CRIPTOMOEDAS

Trabalho de Conclusão de Curso apresentado ao Curso de Graduação em Sistemas de Informação da Universidade do Sul de Santa Catarina, como requisito parcial à obtenção do título de Bacharel em Sistemas de Informação.

Orientador: Prof. Saulo Popov Zambiasi, Dr.

Florianópolis,SC 2020

(3)

DESENVOLVIMENTO DE UM BOT DE NEGOCIAÇÃO PARA CRIPTOMOEDAS

Este Trabalho de Conclusão de Curso foi julgado adequado à obtenção do título de Bacharel em sistemas de Informação e aprovado em sua forma final pelo Curso de sistemas de Informação da Computação da Universidade do Sul de Santa Catarina.

Florianópolis, 16 de Julho de 2020.

______________________________________________________ Professor e orientador Saulo Popov Zambiasi, Dr.

Universidade do Sul de Santa Catarina

______________________________________________________ Prof. Alexandre Vitoreti Oliveira, Msc.

Universidade do Sul de Santa Catarina

______________________________________________________ Prof. Theo Augustos Luz, Msc.

(4)

Primeiramente agradeço a minha família pelo apoio dado durante esta fase;

Ao professor e orientador Saulo Popov, e as professoras Vera Schuhmacher e Maria Inês pelo apoio e orientação dados durante o desenvolvimento deste TCC;

Aos demais professores da instituição pelo apoio dado e conhecimentos repassados durante o curso;

(5)

O mercado de criptomoedas é dinâmico e considerado por muitos análogo a um “velho oeste” pois cada exchange implementa diferentes interfaces e funcionalidades. Isso acarreta problemas para que sistemas de negociação se comuniquem com elas, pois não se sabe quais funcionalidades estão disponíveis e nem qual interface utilizar. Dessa forma, esse trabalho visa a criação de um bot capaz de receber sinais de trade em um formato unificado e operacionalizá-los em exchanges como forma de resolver, mesmo que em partes, essa problemática. Através de uma pesquisa aplicada, realizou-se uma revisão bibliográfica da atual situação do mercado de criptomoedas e o desenvolvimento de um bot que utiliza tecnologias amplamente aceitas no mercado e uma arquitetura extensível e modular, em atendimento as demandas reais de uma empresa do ramo financeiro. Os objetivos do projeto foram alcançados através da realização da pesquisa bibliográfica, modelagem de uma arquitetura extensível para resolução do problema, e implementação do bot com as funcionalidades esperadas. Contudo, ainda existe muito espaço para melhorias e novas funcionalidades, tais como o suporte a operações mais complexas e uma interface web para monitoramento do desempenho.

(6)

The cryptocurrency market is incredibly dynamic and considered by many a “wild-west” since every exchange implements different interfaces and functionality. That causes problems when an automated system needs to operate, since functionalities available are unknown. This project’s objective is to provide a software capable of receiving trading signals in a unified format and operate them in exchanges which will solve, at least partially, this problem. Through applied research we have performed a literature review of the current cryptocurrency market, developing a software with modern technologies as well as a modular and extensible architecture, meeting the real demands of a financial company. The project’s objectives were reached through a literature review, the modeling of an extensible architecture and implementation of the software, which has the expected functionalities. Although the project’s objectives were reached, there is still much room for improvement and new functionalities, such as supporting more complex operations and the creation of a web interface for monitoring performance.

(7)

Figura 1: Etapas da pesquisa...33

Figura 2: Arquitetura da solução...35

Figura 3: Arquitetura do Executor de Ordens...36

Figura 4: Ator que é um script ou sistema automatizado Fonte: Autor...38

Figura 5: Tecnologias e Ferramentas utilizadas para elaboração do projeto. Fonte: Autor...45

Figura 6: Exemplo de requisição que entra no Gerenciador de Risco...51

Figura 7: requisição enviada do Gerenciador de Riscos para o Executor de Ordens...52

Figura 8: Criação de nova posição...55

Figura 9: Atualização de posição existente...56

Figura 10: Fechamento de posição...57

Figura 11: Mensagem enviada ao Gerenciador de Risco durante validação...58

Figura 12: Saída de texto do Executor de Ordens demonstrando ordens enviadas...59

Figura 13: Gerenciador de Portfólio demonstrando posição em aberto...59

Figura 14: Ordem de venda enviada ao Gerenciador de Riscos...60

Figura 15: Processamento da mensagem de venda pelo Gerenciador de Ordens...60

Figura 16: Gerenciador de Portfólio ao ser informado que a posição foi fechada...61

Figura 17: Website da corretora Binance demonstrando as ordens executadas durante o teste61 Figura 18: Envio de mensagem indicando uma operação de simulação...62

Figura 19: Recebimento de mensagem pelo Gerenciador de Riscos...63

Figura 20: Recebimento de mensagem pelo Gerenciador de Portfólio...63

Figura 21: Consulta sinais simulados ao Gerenciador de Portfólio...63

Figura 22: Sugestão de tela para autenticação...66

Figura 23: Sugestão de tela principal...66

(8)

Quadro 1: Estrutura do bloco na rede Bitcoin...21

Quadro 2: A estrutura do cabeçalho do bloco...22

Quadro 3: APIs das cinco maiores exchanges de criptomoedas...29

Quadro 4: Maneira de acesso a APIs para obter dados de mercado (ticker)...30

Quadro 5: Ator Script...39

Quadro 6: Regras de negócio...41

Quadro 7: Caso de uso para iniciar trade...42

Quadro 8: Caso de uso – operação a mercado...43

Quadro 9: Caso de uso para simulação...44

Quadro 10: Rotas da API do Executor de Ordens...52

Quadro 11: Rotas da API do Gerenciador de Portfólio...53

(9)

API – Application Programming Interface BTC – Bitcoin

BAT – Basic Attention Token BUSD – Binance USD

ETH – Ethereum

HFT – High Frequency Trading HTTP – Hypertext Transfer Protocol REST – Representational State Transfer USDT – Tether

JSON – Javascript Object Notation P&L ou PnL – Profit and Loss SHA – Secure Hash Algorithm

(10)

1 INTRODUÇÃO...12 1.1 PROBLEMÁTICA...13 1.2 OBJETIVOS...14 1.2.1 OBJETIVO GERAL...14 1.2.2 OBJETIVOS ESPECÍFICOS...14 1.3 JUSTIFICATIVA...15 1.4 ESTRUTURA DO TRABALHO...15 2 REVISÃO BIBLIOGRÁFICA...16 2.1 CRIPTOMOEDA...16 2.2 BITCOIN...19 2.2.1 A Blockchain do Bitcoin...21

2.2.2 Críticas ao Bitcoin, e soluções propostas...24

2.3 ALTCOINS...24

2.3.1 Monero...24

2.3.2 Ethereum...25

2.3.3 Moedas “estáveis” (stablecoins)...25

2.3.3.1 Tether...25 2.3.3.2 MakerDao...25 2.3.3.3 Basecoin...26 2.4 CONCEITOS DE TRADING...26 2.4.1 Tipos de trading...26 2.5 ANÁLISE FUNDAMENTALISTA...26 2.6 ANÁLISE TÉCNICA/GRÁFICA...27 2.6.1 Indicadores de tendência...27

2.7 O QUE É UMA EXCHANGE...28

2.7.1 Funcionamento Básico...28 2.7.2 Livro de ordens...28 2.7.3 APIs...28 2.8 BOTS DE TRADING...31 3 METODOLOGIA...32 3.1 TIPO DE PESQUISA...32 3.2 ETAPAS DA PESQUISA...33 3.3 DELIMITAÇÕES...34

3.4 ARQUITETURA DA SOLUÇÃO PROPOSTA...35

4 MODELAGEM DO SISTEMA...38 4.1 ATORES...38 4.2 REQUISITOS...39 4.3 REGRAS DE NEGÓCIO...41 4.4 CASOS DE USO...42 5 DESENVOLVIMENTO...45 5.1 FERRAMENTAS E TECNOLOGIAS...45 5.1.1 Python...46 5.1.2 Flask...46 5.1.3 Json...47 5.1.4 PostgreSQL...47

(11)

5.1.8 Quadency...49 5.2 HISTÓRICO DE DESENVOLVIMENTO...49 5.3 SISTEMA DESENVOLVIDO...50 5.3.1 Gerenciador de Risco...51 5.3.2 Executor de ordens...52 5.3.3 Gerenciador de portfólio...53 5.4 VERIFICAÇÃO DO SISTEMA...58 5.4.1 Operação Real...58 5.4.2 Operação de simulação...62

6 CONCLUSÕES E TRABALHOS FUTUROS...64

6.1 SUGESTÕES DE TRABALHOS FUTUROS...65

6.1.1 Sugestão de Interface WEB...65

7 REFERÊNCIAS...67

APÊNDICES...71

(12)

1 INTRODUÇÃO

O Bitcoin, criado em 2008, foi a primeira criptomoeda que teve sucesso e adoção no mundo real. Sua popularidade aumentou muito, porém ele ainda possui a mesma estrutura básica que tinha em sua criação. A mudança nos mercados mundiais não somente abraçou o Bitcoin, como também criou a necessidade de outros tipos de criptomoeda (DeVRIES,2008,p.1).

Segundo DeVRIES (2008, tradução nossa) “Ao usar uma criptomoeda, os usuários são capazes de trocar valor digitalmente sem aprovação de terceiros.”. O Bitcoin possui um alto valor porque é escasso e porque os usuários acreditam que vão conseguir usar o bitcoin para comprar outros produtos ou moedas posteriormente (DeVRIES,2008).

Para entender a negociação de criptomoedas, é necessário primeiro entender alguns conceitos sobre negociação em mercado financeiro, tais como os conceitos de Bear e Bull Market definidos por Voigt e O’Shea (2019), que são os mercados “Urso” e “Touro”. Um Bear Market significa que os preços estão caindo, geralmente 20% ou mais. Um mercado Bull significa que os preços das ações estão subindo. Enquanto os preços subirem, pode-se afirmar que estamos em uma “Bull Run” (Corrida de touros). Segundo Voigt e O’Shea (tra-dução nossa): “Bull markets são seguidos por Bear markets, e vice versa, e ambos geralmente sinalizam o início de padrões econômicos maiores”.

Considerando que todo mercado tem altas e baixas, Elder (2015) dá alguns avisos sobre o trading (negociação em bolsa de valores) (tradução nossa, p. 7):

O trading nos atrai com a promessa de dinheiro e liberdade, desafio e empolgação. Iniciantes rapidamente descobrem o quão difícil é ter lu-cros com o mercado. Lembrem-se, a única coisa fácil do trading é per-der dinheiro!

As recompensas do trading assim como seus perigos são ambos muito reais e você precisa pesar eles antes de pular com os dois pés. Se deci-dir fazer parte do trading, você terá uma estrada fascinante em seu fu-turo. Se você decidir que trading não é para você, não é nem um pou-co vergonhoso dizer “Deixe-me ficar fora dos mercados por enquan-to”.

Também é necessário que aqueles interessados na negociação em bolsa de valores conheçam a automatização da negociação eletrônica, cada vez mais presente no mercado pelo uso de “robôs”. Segundo Vellego (2011, p. 3):

Uma bolsa de valores não é mais um lugar físico. Pelo contrário, é um sistema de computador sobre o qual as ordens são inseridas, roteadas,

(13)

executadas e apuradas eletronicamente com pouca ou nenhuma inter-venção humana.

Testemunhamos o abandono dos pregões viva voz e o surgimento de sistemas de negociação eletrônica aumentando a velocidade das tran-sações, facilitando o acesso a mercados do mundo inteiro e barateando o seu custo operacional.

Vellego explica alguns conceitos de trading automatizado, tais como o trading de alta frequência (do inglês High-frequency trading), que são sistemas que analisam dados do mercado e capturam onde estão as oportunidades de negociação, enviando ordens de compra e venda para os Brokers em frações de segundo. São utilizadas ferramentas tecnológicas de alta sofisticação, que são compostas de algoritmos específicos para analisar os dados de mercado, e tomar decisões a partir destas informações. Uma característica do HFT( High frequency tra-ding) é que a compra e venda são realizadas em períodos muito curtos de tempo, onde o in-vestidor entra e sai do mercado milhares de vezes por dia. Não se mantém ações compradas sem vendê-las por mais de alguns segundos (Vellego, p.32,2011).

1.1 PROBLEMÁTICA

O objetivo de uma Exchange de criptomoedas é permitir a conversão entre moeda fiduciária e criptomoedas, e vice-versa. Existe uma enorme variação de exchanges que possuem uma gama diversas de funções e objetivos (Erogova,2018).

As 5 exchanges com o maior volume de criptomoedas negociado diariamente são (de maior para menor): Binance, Upbit, Huobi,Bittrex e Bithumb (Russo,2018).

Deve-se considerar também que confiar a posse de seus fundos a terceiros acarreta em alto risco de perda, já que deixa os recursos da empresa expostos a fraudes e golpes financeiros (Lielacher,2018).

Considerando a enorme variação das funcionalidades disponíveis em exchanges e o risco inerente em permitir a terceiros o controle de seu capital, como possibilitar que um bot automatizado interaja com todas estas exchanges através de uma interface unificada e extensível?

(14)

1.2 OBJETIVOS

São abordados aqui os objetivos desta pesquisa.

1.2.1 OBJETIVO GERAL

O trabalho tem como objetivo o desenvolvimento de um bot que atende as necessidades de uma empresa real do ramo financeiro, integra-se a programas que geram mensagens de compra e venda de ativos, e a demanda de gerenciamento do portfólio de investimentos.

1.2.2 OBJETIVOS ESPECÍFICOS

Como objetivos específicos, têm-se:

• Efetuar pesquisa bibliográfica sobre criptomoedas e trading

• Efetuar a modelagem da arquitetura do software a ser desenvolvido • Definir requisitos para o software

• Desenvolver o software dentro dos requisitos definidos • Testar o software e avaliar os resultados obtidos

(15)

1.3 JUSTIFICATIVA

No ano de 2018, as dez maiores corretoras de criptomoedas estavam movimentando mais de 3 milhões de dólares por dia somente em taxas de corretagem. A receita das maiores corretoras chega a bilhões de dólares americanos por ano. As corretoras OKEx e Binance tem os maiores volumes de negociação, chegando a 1,7 bilhão de dólares americanos por dia. As maiores exchanges em 2018 eram: Binance, Upbit, Huobi, Bittrex, Bithumb, OKEx, Bitfinex, Coinbase, Bitstamp, Kraken (Russo,2018).

Os robôs de trading são software específico que permite a execução de operações financeiras em corretoras. São muito usados tanto no mercado de ações, quanto nos mercados de moedas estrangeiras e criptomoedas. Quando o investidor confia seu dinheiro a terceiros(pouco importa se é um gerente de fundos ou um software automatizado), ele está correndo um alto risco de perda por fraudes financeiras e golpes (Lielacher, 2018).

Sendo assim, justifica-se a criação de um software de trading que permite ao usuário interagir com diversas corretoras do mercado, de forma que não precise confiar suas moedas a terceiros, mitigando assim o risco de golpes e fraudes.

1.4 ESTRUTURA DO TRABALHO

O primeiro capítulo possui a introdução, problemática, justificativa e objetivos. A fundamentação teórica da pesquisa está no segundo capítulo. O terceiro capítulo trata do método científico escolhido. O quarto capítulo aborda os requisitos do software a ser desenvolvido. O quinto capítulo demonstra o software construído e os resultados alcançados. O sexto capítulo apresentará conclusões e recomendações para trabalhos posteriores.

(16)

2 REVISÃO BIBLIOGRÁFICA

Este capítulo contém a revisão bibliográfica. Dentro do tema “criptomoeda”, primeiramente é abordada a história das criptomoedas, e posteriormente quais as criptomoedas mais relevantes no mercado atualmente. São abordados também os conceitos sobre trading e os diferentes tipos de análise de mercado (fundamentalista e técnica). Também é abordado o funcionamento das exchanges, e o que são os robôs de trading.

2.1 CRIPTOMOEDA

Conforme explica DeVRIES (2008,p.1,tradução nossa):

Criptomoeda, uma rede criptografada ponto a ponto para facilitar o es-cambo digital, é uma tecnologia desenvolvida oito anos atrás.(…) Ao usar uma criptomoeda, os usuários podem trocar valor digitalmen-te sem a supervisão de digitalmen-terceiros.

A maneira que as criptomoedas permitem isto, segundo DeVRIES (2008,p.1,tradução nossa) é:

As criptomoedas funcionam na teoria de resolver algoritmos de criptografia para criar hashes únicos que são finitos em número. Combinados com uma rede de computadores que verificam transações, os usuários podem trocar seus hashes assim como se estivessem trocando moeda física. Existe um número finito de bitcoin que será gerado, o que previne uma abundância exagerada e garante sua raridade.

DeVRIES considera como primeira criptomoeda o Bitcoin, ao dizer que esta é uma tecnologia desenvolvida oito anos atŕas. No entanto, esta não foi a primeira vez que esta ideia de criptomoeda foi desenvolvida. Em 1982 foi proposto por David Chaum a moeda e-Cash, que era apenas um conceito em que era aplicado o sistema de assinaturas cegas (blind signature) com o propósito de permitir pagamentos não rastreáveis. Este sistema foi proposto também por Chaum em um artigo chamado “Assinaturas cegas para pagamentos não rastreáveis”. A primeira vez que houve uma tentativa de colocar o sistema em prática foi em 1990, com a criação do DigiCash. A reputação de Chaum até atraiu investidores e empregados, mas o projeto não obteve sucesso e a empresa por trás da moeda (também chamada “DigiCash”) faliu ao final dos anos 90. Mesmo sendo um fracasso, esta tentativa construiu as bases para que em 1997 Adam Back inventasse o HashCash, que possuia um sistema bastante semelhante ao que o Bitcoin possui (Bastiani,2019).

(17)

Sobre o HashCash, sua origem deu-se desta maneira:

“[ANÚNCIO] post de implementação do Hashcash”

A data é 28 de março de 1997. Naquela sexta-feira, 2 mil assinantes da lista de discussão Cypherpunks receberam, em suas caixas de en-trada, um e-mail com o cabeçalho acima. O remetente é um britânico de 26 anos com pós-doutorado na Universidade de Exeter, um jovem criptógrafo e colaborador prolífico da lista de discussão. Seu nome: Dr. Adam Back. (Rocha,2019)

Este e-mail continha uma descrição e implementação iniciais da moeda HashCash, que era baseada na colisão parcial de hash. E segundo Back(1997, apud Rocha,2018) “A ideia de usar hashes parciais é que eles podem ser arbitrariamente caros para serem computados”. Adam Back é um renomado criptógrafo especialista em criptografia aplicada, e atualmente é o CEO da Blockstream. Esta é a empresa líder global no desenvolvimento de tecnologia baseada em Blockchain e Bitcoin. Fundada em 2014 por Back e outros notáveis contribuidores ao código do Bitcoin, ela tem a missão de construir uma infraestrutura financeira global baseada em Bitcoin. Ficou conhecida no início de 2019 quando disponibilizou uma interface para que pessoas possam transmitir transações de Bitcoin sem internet, através de um Satélite (Blockstream).

No entanto, a ideia de utilizar uma prova de trabalho computacional para evitar abusos na internet é ainda mais antiga. No início dos anos 90, dois pesquisadores da IBM (Cynthia Dwork e Moni Naor) publicaram um artigo chamado “Preços via processamento ou combate ao lixo eletrônico”. Neste artigo, os pesquisadores reconheciam que o custo de enviar um e-mail era muito baixo, e a maneira que o sistema funciona facilitava muito o envio da mesma mensagem para várias pessoas, em massa. Como solução ao problema, era proposto um sistema em que cada remetente seria obrigado a anexar ao e-mail dados que seriam uma solução a um problema matemático conhecido e exclusivo ao e-mail sendo enviado. O problema em si consiste de três enigmas baseados em criptografia de chave pública e assinaturas criptográficas. A ideia era que apenas alguns segundos de processamento fossem ocupados para o cálculo dos dados de um e-mail vindo de um computador comum, tornando o custo irrisório para pessoas comuns querendo enviar e-mails manualmente, mas proibitivamente alto a pessoas buscando envio de e-mails em massa (spam). Nas palavras dos pesquisadores, “A ideia principal é exigir que um usuário calcule uma função de dificuldade moderada, mas que não seja indecifrável, para obter acesso ao recurso, evitando assim o uso banal do e-mail”(Dwork e Naor,1992, apud Rocha,2018). Embora não tenham inventado o termo “prova de trabalho”, esta de fato foi a primeira situação conhecida em que este tipo de

(18)

solução é proposta. Hoje o termo “prova de trabalho” é extremamente conhecido por conta de seu papel na rede descentralizada do Bitcoin. No início dos anos 90 a ideia despertou o interesse de um pequeno grupo de cientistas da computação, mas não teve adoção em geral (Rocha,2018).

Na mesma época também foi divulgado um artigo chamado “b-money” escrito por Wei Dai em 1998, e este possuia muitas características semelhantes ao Bitcoin. O ano de 1998 também foi marcado pela proposta chamada “Bit Gold” escrita por Nick Szabo, que tinha por objetivo criar um meio de pagamento sem dependência ou aprovação de terceiros (tais como um banco central), e também usava a “prova de trabalho”. Contudo, nenhum destes projetos se concretizou (Bastiani,2019).

Na mesma época da publicação do artigo de Dwork e Naor sobre o uso da “prova de trabalho” para o combate ao spam, um grupo de ativistas focados em privacidade na internet começaram a se organizar. Segundo Rocha(2018), “Essa multidão ideologicamente motivada começou a se organizar por meio de uma lista de discussão centrada em tecnologias que melhoram a privacidade.”. Eles vieram a ser conhecidos como “Cypherpunks”, e buscam utilizar a criptografia como ferramenta para atingir seus objetivos. Um dos mais ativos participantes nessa lista era Adam Back, o autor da HashCash (Rocha,2018).

Fica muito claro esta filosofia pró-liberdade quando é consultado o próprio artigo “b-money”, escrito por Wei Dai. Segundo Dai:

Eu estou fascinado pelo manifesto criptoanarquista de Tim May. Ao contrário das comunidades tradicionalmente associadas com a palavra “anarquia”, na criptoanarquia o governo não é temporariamente des-truído, mas permanentemente proibido e permanentemente desneces-sário. É uma comunidade onde a ameaça de violência é impotente por-que a violência é impossível, e a violência é impossível porpor-que os par-ticipantes não podem ser ligados a seus nomes reais ou localizações físicas (Dai,1998).

O manifesto criptoanarquista citado acima por Dai, foi escrito em 1992 por Tim May. É uma das mais notórias obras que expressam os objetivos, filosofia e meios dos Cypherpunks. O manifesto demonstra que a ciência da computação naquela época estava prestes a dar um poder a grupos e indivíduos que antes não era viável, que é o poder de interagir e se comunicar de maneira totalmente anônima. Não somente a anonimidade é garantida, como também a integridade das mensagens é facilmente garantida por protocolos criptográficos. É destacada a importância de um sistema de reputações que seria mais importante que as atuais análises de crédito, e também ressalta que a capacidade de controlar

(19)

e taxar interações econômicas seria pesadamente afetada. As ferramentas para esta revolução seriam a criptografia de chave pública, os sistemas de assinaturas cegas, e softwares para autenticar e verificar mensagens. May previa que nos dez anos seguintes a 1992 a velocidade dos computadores tornaria viável economicamente a implementação destas ideias. Além disso, também previa que estes avanços sofreriam ataques do governo que os justificaria como preocupação com a segurança nacional, combate ao tráfico de drogas e sonegação. May encerra o seu manifesto afirmando que os protocolos criptográficos alterariam a natureza da sociedade tanto quanto a tecnologia de impressão, e traria um mercado líquido para a transferência de todo e qualquer material através de imagens e mensagens. Ele compara a criptografia com o arame farpado, que apesar de em um primeiro momento parecer uma invenção insignificante, tornou possível delimitar enormes territórios e alterou permanentemente os conceitos de direito de propriedade no ocidente. Assim, um ramo que na época era pequeno na matemática, desmontaria o arame farpado em volta da propriedade intelectual (May,1992).

2.2 BITCOIN

O Bitcoin é a criptomoeda mais comum e conhecida. Em Outubro de 2008, foi publicado no website oficial da bitcoin1 , o Whitepaper do Bitcoin. O autor deste documento

utilizou um pseudônimo chamado de Satoshi Nakamoto, e descreveu as razões, fundamentação, e como o Bitcoin seria capaz de se tornar um sistema de dinheiro eletrônico. Conforme Nakamoto (2008, p.1,tradução nossa):

Uma versão puramente ponto a ponto de dinheiro digital poderia per-mitir pagamentos online serem enviados diretamente de uma parte para a outro sem passar por uma instituição financeira. Assinaturas di-gitais fornecem parte da solução, mas os principais benefícios são per-didos se um terceiro confiável ainda é necessário para evitar gastos duplos.

Nós propomos uma solução ao problema de gasto duplo utilizando uma rede ponto a ponto.

A rede gera o timestamp das transações ao gerar o hash delas em uma cadeia de proof-of-work baseado em hash, formando um registro que não pode ser mudado sem que se faça novamente o proof-of-work.(…) Desde que a maioria do poder de CPU for controlado por nós que não estão cooperando para atacar a rede, eles irão gerar a mais longa ca-deia e não darão espaço aos atacantes.

Torna-se claro que uma das principais preocupações do Bitcoin é o de evitar o chamado problema de gasto duplo, onde uma pessoa pode enviar o mesmo dinheiro a duas pessoas distintas, o que permite que ela gaste mais dinheiro do que tem em sua posse. Também é claro que o intuito do Bitcoin desde sua concepção foi de criar um sistema de 1 http://www.bitcoin.org

(20)

pagamentos, de dinheiro digital, onde pessoas tivessem o poder de enviar pagamentos diretamente entre si, sem a necessidade de uma instituição financeira monitorando e autorizando (ou não) suas transações.

O comércio na internet confia quase exclusivamente em instituições financeiras que servem como terceiros confiáveis para processar paga-mentos eletrônicos. Enquanto este sistema funciona bem o suficiente para a maioria das transações, ele ainda sofre das fraquezas inerentes de um sistema baseado em confiança. Transações completamente não-reversíveis não são uma possibilidade, já que instituições financeiras não podem evitar mediar disputas. O custo da mediação aumenta os custos da transação, limitando o tamanho mínimo da transação e cor-tando a possibilidade de pequenas transações casuais, e existe um cus-to mais amplo na perda da habilidade de criar pagamencus-tos não-reversí-veis para serviços não-reversínão-reversí-veis. Com a possibilidade de reversão, a necessidade de confiança se espalha. Os comerciantes precisam ter medo de seus clientes, os importunando a dar mais informações do que seria necessário, e uma porcentagem de fraude é aceitada como inevitável.

Estes riscos podem ser evitados quando é utilizado dinheiro físico pes-soalmente, mas não existe um mecanismo para fazer pagamentos sob um canal de comunicação sem um terceiro confiável. (NAKAMOTO,2008, p.1-2, tradução nossa)

Nakamoto continua demonstrando que a solução é um sistema baseado em prova criptográfica ao invés de confiança. O uso de transações que não poderiam ser revertidas sem um alto custo computacional protegeria os comerciantes de fraudes, e mecanismos de escrow poderiam ser implementados facilmente para proteger os compradores. Mais uma vez, Nakamoto reafirma que um dos pontos centrais do Bitcoin é resolver o problema do gasto duplo, e que o sistema é seguro enquanto os nós (participantes da rede) honestos detiverem um poder computacional maior que a soma do poder computacional de grupos de atacantes. Uma das fundações do bitcoin é o proof-of-work (prova de trabalho). Nakamoto explica o funcionamento do sistema na quarta página. O proof-of-work é um sistema baseado na moeda Hashcash criada por Adam Back, onde é procurado por um valor que quando hasheado começa com um número determinado de bits zero. A dificuldade em encontrar um valor que satisfaça esse requerimento aumenta exponencialmente a cada bit zero a mais que é requerido. Isto ganhou o nome de prova de trabalho, pois encontrar estes valores cujo hash começa com X bits zero, prova que foi executado um trabalho (esforço) computacional considerável (Nakamoto, 2008, p.4).

Uma crítica ao proof-of-work é o consumo desnecessário de energia elétrica, e o impacto disto ao meio ambiente. As redes do Bitcoin e Ethereum consomem, anualmente mais energia que 69 países de maneira individual, e é esperado que em 2020 o Bitcoin consuma mais energia que a Dinamarca (Saleh,2018, p.1-2).

(21)

2.2.1 A Blockchain do Bitcoin

Blockchain é um termo em inglês que junta duas palavras, block(bloco) e chain(corrente). Numa tradução literal, uma blockchain é uma cadeia de blocos. Neste contexto o bloco é um conjunto de informações que é guardado em um banco de dados público, onde um bloco é ligado ao seu bloco anterior e posterior. Em uma analogia a compras em uma loja como a Amazon, um “bloco” de uma “Blockchain” genérica teria três partes distintas: A primeira parte engloba data, horário, e quantia da sua compra mais recente. A segunda parte conteria as transações feitas, assim como quem está envolvido nelas (porém em vez de nomes, utilizaria uma assinatura digital). E a terceira parte teria um hash (resumo) do bloco que o identifica. (Reiff,2020)

Em termos mais técnicos, uma blockchain é um tipo de estrutura de dados, que é constituído por uma lista ligada onde cada elemento é um bloco contendo transações. É uma lista ligada para trás, pois um bloco é sempre ligado ao bloco anterior. O que identifica os blocos é um hash único para cada bloco que é gerado com o algoritmo SHA256, que resulta em um resumo do cabeçalho do bloco. Enquanto o exemplo de Reiff(2020) fala genericamente de uma blockchain teórica, os blocos do Bitcoin são estruturados de maneira diferente, conforme demonstrado no Quadro 1. (ANTONOPOULOS,2020,p.163)

Quadro 1: Estrutura do bloco na rede Bitcoin

Fonte: ANTONOPOULOS,2010, p.164, tradução nossa

Campo Descrição Tamanho

Tamanho do Bloco Número de bytes deste ponto até o final do bloco

4 bytes

Cabeçalho do Bloco Formado por diversos campos 80 bytes

Contador de transações Quantas transações estão no bloco

1 – 9 bytes

Transações A lista de transações gravadas

(22)

Antonopoulos explica a estrutura de bloco demonstrada no Quadro 1:

Um bloco é uma estrutura de dados em contêiner que agrega transa-ções para a inclusão na o livro-razão público, a blockchain. O bloco é composto pelo cabeçalho, que contém meta-dados, seguido por uma longa lista de transações que ocupam a maioria do tamanho de bloco. O cabeçalho tem o tamanho de 80 bytes, enquanto uma transação em média possui 250 bytes e o bloco em geral possui mais de 500 transa-ções. Um bloco completo, com todas as transações é mil vezes maior que apenas o cabeçalho. (ANTONOPOULOS,2020,p.164,tradução nossa).

Quadro 2: A estrutura do cabeçalho do bloco

Fonte: ANTONOPOULOS,2010, p.165, tradução nossa

Campo Descrição Tamanho

Versão Número de versão do

software

4 bytes

Hash do bloco anterior Uma referência ao hash do

bloco anterior, chamado de pai

32 bytes

Raiz Merkle O hash da raiz da Árvore de Merkle das transações deste

bloco.

32 bytes

Timestamp Horário e data aproximados

da criação do bloco, expressos no padrão Unix Epoch, que conta quantos segundos passaram desde 1 de janeiro de 1970 às 00:00

4 bytes

Alvo de dificuldade A dificuldade para este bloco 4 bytes

Nonce Um contador utilizado pelo

algoritmo de prova de trabalho

4 bytes

No Quadro 2 demonstra-se os campos que compõem o cabeçalho do bloco, que co-meça com uma referência ao hash do bloco anterior. A Raiz de Merkle é uma estrutura de da-dos usada para estruturar as transações do bloco, e seu hash está no cabeçalho. A dificuldade, nonce e timestamp estão relacionados ao algoritmo de mineração do Bitcoin. (Antonopoulos,2020,p.164)

Nakamoto explica as etapas para a mineração e validação de um bloco na rede Bit-coin:

As etapas para rodar a rede são as seguintes:

1. Novas transações são transmitidas a todos os nós da rede. 2. Cada nó insere novas transações em um bloco local.

3. Cada nó trabalha tentando encontrar a prova de trabalho para seu bloco.

(23)

4. Quando um nó encontra uma prova de trabalho, ele transmite a to-dos os nós.

5. Os nós aceitam o bloco somente se todas as transações dentro dele forem válidas e ainda não forem gastas.

6. Os nós demonstram sua aceitação do bloco ao trabalhar em criar um próximo bloco na corrente de blocos, usando o hash do bloco aceito como “hash do bloco anterior”.

(NAKAMOTO,2008, p.3, tradução nossa)

Os nós da rede sempre consideram a chain mais longa como correta, mas podem existir conflitos quando dois nós transmitem para a rede blocos que simultaneamente. Supon-do que o nó A e o nó B façam a transmissão de seus blocos em um intervalo de tempo quase imperceptível: Alguns nós receberão primeiro o bloco do nó A e o considerarão como correto, enquanto outros farão o mesmo com o bloco do nó B. Isso causa a existência de dois “galhos” na blockchain, onde existem duas versões possíveis. A maneira que os nós resolvem o confli-to é guardando ambos os blocos, e quando a nova prova de trabalho for encontrada e um dos dois “galhos” se tornar maior que o outro, os nós que estavam trabalhando no “galho” errado passam a trabalhar no correto.(Nakamoto,2008,p.3)

(24)

2.2.2 Críticas ao Bitcoin, e soluções propostas

Na conclusão, Nakamoto conclui que foi proposto um sistema para transações eletrônicas sem depender de confiança em terceiros, utilizando moedas feitas a partir de assinaturas digitais com um histórico público de transações, onde a rede está segura enquanto os nós bem-intencionados tiverem mais poder computacional que os mal intencionados. (Nakamoto, 2008, p.8)

Um problema que o Bitcoin possui hoje é a escalabilidade, ou seja, lidar com o grande número de transações que estão sendo processadas pela rede. Na época em que foi introduzido como um sistema de pagamento digital as transações eram rápidas e baratas, já que a quantidade de transações era menor. Porém, atualmente ocorrem mais de 300,000 transações por dia (em média), o que resulta em taxas maiores e transações mais lentas (Madison,2019).

Uma solução proposta é a Lighthing Network, proposta em 2015 por Thaddeus Dryja, que é uma camada extra acima da blockchain do Bitcoin. Ela funciona permitindo que pequenas transações aconteçam fora da blockchain, através de canais de pagamento bidirecionais. Isto reduz o custo das transações entre duas (ou mais) partes que fazem várias pequenas transações entre si, pois é salvo na blockchain apenas o saldo final de todas as partes, e não cada pequena transação (Madison,2019).

2.3 ALTCOINS

Com exceção do bitcoin, todas as demais criptomoedas são denominadas altcoins, ou alternative coins. São abordadas apenas algumas altcoins relevantes para o escopo da pesquisa.

2.3.1 Monero

A altcoin denominada Monero é uma criptomoeda com foco em transações privadas e resistentes a censura. Criptomoedas como Bitcoin e Ethereum tem o histórico de transações

(25)

abertos para consulta, o que possibilita o rastreamento de transações e até mesmo ligar um endereço de carteira com uma identidade no mundo real. Isso causa problemas de fungibilidade, pois um bitcoin é distinguível de outro. Já no Monero, as transações são confidenciais e não rastreáveis, onde dados como destinatário, remetente e quantia não são consultáveis. Logo, existe a garantia de que 1 Monero sempre será idêntico a todos os demais (GetMonero,2019).

2.3.2 Ethereum

Ethereum é uma altcoin cuja rede serve como uma plataforma para aplicações descentralizadas, onde existe a garantia de que o código fonte exposto é realmente o que foi executado, trazendo transparência e confiança a aplicações críticas (Ethereum,2019).

2.3.3 Moedas “estáveis” (stablecoins)

Devido a alta volatilidade das criptomoedas, nasceu a necessidade de criptomoedas com seu valor ‘travado’ em outro ativo, tal como dólar ou ouro. Estas moedas são globais, mas não estão ligadas a nenhum banco central. O fato de ter o valor fixado em dólares americanos, por exemplo, facilita a adoção como moeda (Lee, 2018).

2.3.3.1 Tether

Os tethers existem na rede Ethereum como tokens do protocolo ERC20 (da rede Ethereum) e também utilizando o protocolo Omni (da rede Bitcoin). A empresa Tether garante que tem em suas contas bancárias um número de dólares americanos maior ou igual ao número de Tethers em circulação. Atualmente existem duas ‘criptomoedas’ da empresa Tether, que são o USDT e EURT. O primeiro possui equivalência de 1 para 1 com o dólar americano, e o segundo com o Euro (Tether,2018).

Enquanto é uma opção válida, possui problemas como a centralização, necessidade de confiança em terceiros, e a empresa Tether nega auditorias das contas onde estão os dólares americanos (Lee, 2018).

2.3.3.2 MakerDao

A Maker é uma organização autônoma descentralizada que fornece uma criptomoeda estável de sigla DAI, que tem seu valor atrelado ao dólar americano, mas é lastreada em Ethereum (ETH). A estabilidade de preço é mantida utilizando um sistema autônomo de

(26)

contratos inteligentes. Uma desvantagem é que ela é lastreada em Ethereum, que é uma rede transparente, onde todas as transações são visíveis publicamente (Lee, 2018).

2.3.3.3 Basecoin

Com seu preço também igual ao dólar americano, usa consenso dos participantes para contrair e expandir a oferta de moedas. Quando as moedas estão abaixo de um dólar, a oferta é reduzida permitindo que quem tem a moeda comprem títulos. As moedas utilizadas para comprar títulos são destruídas. O mecanismo oposto é acionado para aumentar o preço (Lee, 2018).

2.4 CONCEITOS DE TRADING

São abordados os tipos de trading, desde curto prazo até longo prazo, e conceitos básicos.

2.4.1 Tipos de trading

Existem diferentes tipos de trading, que possuem diferenças em sua abordagem e tempo de operação.

Um tipo de trading conhecido é o Day Trading, que é um termo que veio do mercado financeiro, e representa a prática de comprar e vender o ativo durante o mesmo dia, antes dos mercados fecharem. No caso das criptomoedas geralmente se considera negociações abertas e fechadas durante o mesmo dia, já que as exchanges costumam funcionar 24 horas por dia. Um investidor que pratica o day trading, é chamado de day trader ou active trader. (SYKES, 2019). Enquanto o day trade é aberto e fechado no mesmo dia, o Swing Trade é a prática de ter operações de curto e médio prazo. Tem foco em tendências de mercado de efeito mais prolongado, podendo utilizar também o histórico de movimentação das ações. Geralmente dura de três dias até algumas semanas. (BTGPactual,2018). Os investimentos de

longo prazo são diferentes dos utilizados em day trading e swing trading porque geralmente

não são vendidos por anos, e em alguns casos, nunca são vendidos. Um investidor de longo prazo deve aceitar um determinado risco em esperar por longos períodos de tempo para obter retornos potencialmente maiores (Twin,2019).

2.5 ANÁLISE FUNDAMENTALISTA

Geralmente usada no investimento de longo prazo, a análise fundamentalista consiste em analisar o “valor real” de um ativo. São analisados tanto fatores macroeconômicos, tais

(27)

como o estado econômico do país onde se encontra o ativo, quanto fatores específicos ao ativo, tal como a eficiência da gestão da empresa que se está considerando comprar ações. O objetivo é determinar se o valor atual do ativo está abaixo ou acima do valor que “deveria valer”, e efetuar a compra caso esteja abaixo deste valor. Não é algo fácil de ser determinado objetivamente, já que não utiliza somente indicadores matemáticos como a análise gráfica. O processo para a análise fundamentalista geralmente consiste de analisar primeiramente fatores macroeconômicos, tais como as taxas de juros da economia nacional, incentivos a um setor específico de indústria, etc. Após isto, geralmente se analisa fatores específicos do ativo. No caso de uma ação, pode ser analisado os lucros, rendimentos, o retorno de equidade, etc. Conclui-se que a análise fundamentalista é de certa forma oposta a análise técnica, pois não está tentando prever a movimentação de preços baseada nos volumes e tendências passadas (GANTI e SEGAL,2019).

2.6 ANÁLISE TÉCNICA/GRÁFICA

A análise técnica consiste no uso de dados de mercado para identificar padrões e tomar decisões de investimento. Geralmente se tenta identificar tendências de mercado, e agir conforme a atual tendência para um determinado ativo ou ação (Corporate Finance Institute).

A análise técnica tenta encontrar tendências, e níveis de suporte e resistência. Uma tendência nada mais é que a direção em que o valor de um ativo está se dirigindo. O suporte é um nível de valoração do ativo em que, quando há quedas, o ativo sempre atinge, mas não cai a um valor menor que este nível. Já a resistência é o oposto, sendo o nível que o ativo não consegue romper durante sua alta. Suportes e resistências sempre são delimitados em um certo período de tempo, logo, um ativo pode ter um suporte quando se analisa o gráfico de um mês, e outro suporte muito distante quando o gráfico analisado é o de um ano (Liu,2019).

2.6.1 Indicadores de tendência

Um dos principais indicadores de tendência são as médias móveis. Uma média móvel nada mais é que o preço médio do ativo durante um número de períodos (tempo). Uma média móvel de períodos maiores, como 200 dias, pode servir para identificação de tendências no longo prazo, enquanto uma média mais curta, como a de 24 dias, pode indicar tendências no curto prazo (Liu,2019).

Outro indicador de tendência são os pontos de pivô e os números de Fibonacci. Pontos de pivô são números calculados através dos dados de mercado do dia anterior (alta,

(28)

baixa, abertura e fechamento), e junto deles são calculados os pontos de suporte e resistência. Os números ou proporções de Fibonacci são utilizados para identificar se um ativo seguirá com a tendência atual, ou se terá uma chance maior de reverter a atual tendência. As principais proporções são as de 24%, 38%,62% e 76% (Corporate Finance Institute).

2.7 O QUE É UMA EXCHANGE

Abordaremos o que é, conceitualmente, uma Exchange neste tópico.

2.7.1 Funcionamento Básico

O objetivo de uma Exchange de criptomoedas é permitir a troca de uma criptomoeda por outra moeda, seja ela uma moeda digital ou uma moeda fiduciária. Existe uma variação muito grande de opções e funções nas exchanges, assim como variação no objetivo delas. Enquanto algumas são feitas para negociação constante entre diferente criptomoedas, outras são feitas para a troca entre criptomoeda e moeda fiduciária. As focadas em negociação constante geralmente possuem taxas de transferência mais baixas que as demais (Erogova,2018).

As 5 exchanges com o maior volume de criptomoedas negociado diariamente são(de maior para menor): Binance, Upbit, Huobi,Bittrex e Bithumb (Russo,2018).

2.7.2 Livro de ordens

Segundo Watts(2018, tradução nossa), “Um livro de ordens é uma lista em tempo real que a exchange usa para representar os interesses de compradores e vendedores, oferecendo uma janela para observar a dinâmica de oferta e demanda de um dado mercado.”

O livro de ordens é dividido entre o lado comprador e lado vendedor. Quando alguém quer vender, coloca uma oferta no lado vendedor, e vice-versa. Assim que exista uma compatibilidade entre uma oferta de venda e outra de compra, a exchange consolida a operação, e remove as ordens referentes de ambos os lados do livro de ordens. Existem diferentes tipos de ordens, mas os principais são as ordens passivas (aquelas que ficam paradas até que alguém as complete) e ordens ativas, que são aquelas lançadas para completar uma ordem passiva (Watts,2018).

2.7.3 APIs

(29)

Uma API, ou Application Programming Interface (Interface de pro-gramação de aplicações), especifica quais rotinas devem ser chama-das, e em qual sequência, para usar as funcionalidades de um compo-nente específico de um programa. Usualmente, uma API descreve a interface para uma biblioteca de programa. Definições de objetos tam-bém especificam uma API, que descreve como construir instâncias, quais métodos podem ser chamados, e com quais argumentos

As exchanges de criptomoeda geralmente irão expor APIs HTTP para que possam ser feitas operações de maneira programática. As cinco maiores exchanges de criptomoedas tem APIs HTTP, cada uma com documentação e especificações diferentes.

O Quadro 3 contém o link base para onde devem ser feitas requisições, e o link de documentação para cada uma das 5 maiores exchanges:

Quadro 3: APIs das cinco maiores exchanges de criptomoedas Fonte: Autor

Exchange Link Base Documentação

Binance https://api.binance.com/ https://github.com/binance-

exchange/binance-official- api-docs/blob/master/rest-api.md#

Upbit https://api.upbit.com/ https://docs.upbit.com/v1.0.6/ reference

Huobi https://api.huobi.pro/ https://huobius.readme.io/

reference Bittrex https://api.bittrex.com/api/

v1.1

https://bittrex.github.io/api/ v1-1

(30)

O Quadro 4 é um comparativo entre a API das exchanges, demonstrando as diferenças entre elas para alguns dos dados de mercado e ações disponíveis.

Quadro 4: Maneira de acesso a APIs para obter dados de mercado (ticker) Fonte: Autor

URL Parâmetros Parâmetros de Resposta

Binance /api/v3/ticker/price symbol Symbol,price

Upbit /v1/ticker markets

(ex.KRW-BTC) Market,trade_date,trade_ time,trade_date_kst,trad e_time_kst,opening_price ,high_price,low_price,tr ade_price,prev_closing_p rice,change,change_price ,change_rate,signed_chan ge_rate,signed_change_pr ice,trade_volume,acc_tra de_price,acc_trade_price _24h,acc_trade_volume,ac c_trade_volume_24h,highe st_52_week_price,highest _52_week_date,lowest_52_ week_price,lowest_52_wee k_date,timestamp

Huobi /market/detail/merged symbol Status,ts,ch,tick

(tick.id,tick.version,tick.amou nt,tick.count,tick.open,tick.clo se,tick.low,tick.high,tick.vol,ti

ck.bid,tick.ask)

Bittrex /public/getticker markets Success,message,result(B id,Ask,Last)

Bithumb /public/ticker/{currency} currency opening_price,closing_price, min_price,max_price,units_tr aded,acc_trade_value,prev_cl osing_price,units_traded_24H ,acc_trade_value_24H,fluctate _24H,fluctate_rate_24H,date

Para pegar os dados ticker (que simbolizam a mudança de preço de uma criptomoeda), por exemplo, existem diferenças grandes entre as APIs. Pode-se observar diferenças no tipo de URL, nos parâmetros enviados, e no tipo de resposta recebida para todas as exchanges analisadas. Algumas APIs retornam inclusive objetos JSON, que estão representados na tabela no formato chave(valor1,valor2,valor3).

(31)

Portanto, constata-se que as APIs não possuem nenhum tipo de padronização na ordem e tipo dos parâmetros, o que justifica uma camada de integração que ofereça uma interface unificada.

2.8 BOTS DE TRADING

Bots de negociação nada mais são do que software altamente especializado, que

reconhece padrões e executa operações financeiras. Este tipo de “robô” não é novidade no mercado financeiro, já sendo utilizado para fundos de cobertura nos mercados de equidade, commodities e moedas fiduciárias. Estes robôs apareceram primeiro no mercado internacional de moedas, mas rapidamente ganharam espaço no meio de criptomoedas

(Lielacher, 2018).

Existem bots de negociação de diversos tipos, desde software aberto que pode ser utilizado e auditado por todos, até software de alto custo, pago em modelo de assinatura, utilizado por day traders de criptomoedas. Alguns exemplos de bots são o 3Commas2, que é

um bot que possui valor de assinatura variando de $30-$100 por usuário, e suporta as exchanges Bittrex, BitFinex, Binance, Bitstamp, KuCoin, Poloniex, GDAX, Cryptopia, Huobi, e YoBiT. Outro bot é o Autonio3, cujo grande diferencial é que este é um bot

descentralizado que custa 50 dólares americanos por mês, e o pagamento é feito utilizando a sua própria criptomoeda NIO. Algoritmos de negociação podem ser vendidos no mercado interno do website deste bot. O Gecko4 é um robô de código aberto e livre que possui

funcionalidades limitadas comparado aos robôs pagos, mas é uma boa opção para iniciantes. O mais popular robô de negociação atualmente é o Haasbot5, que oferece reconhecimento de

tendências dentro do robô, e permite o trader combinar inúmeros diferentes indicadores. Uma licença de um ano custa entre 0.073-0.127 Bitcoin (Lielacher, 2018).

2 https://3commas.io 3 https://auton.io 4 https://gekko.wizb.it/ 5 https://www.haasonline.com/

(32)

3 METODOLOGIA

Este capítulo define o tipo de pesquisa do trabalho, as etapas para a realização da pesquisa, a arquitetura da solução proposta e as delimitações da pesquisa.

3.1 TIPO DE PESQUISA

O conceito de pesquisa é definido por Minayo(1993,p.23,apud Silva,2005,p.19): Atividade básica das ciências na sua indagação e descoberta da realidade. É uma atitude e uma prática teórica de constante busca que define um processo intrinsecamente inacabado e permanente. É uma atividade de aproximação sucessiva da realidade que nunca se esgota, fazendo uma combinação particular entre teoria e dados. Uma pesquisa aplicada é aquela cujo objetivo é gerar conhecimento que será aplicado para solucionar problemas específicos, envolvendo interesses locais. Já a pesquisa básica gera conhecimentos que não se sabe quando serão aplicados. A abordagem do problema pode ser quantitativa ou qualitativa. A quantitativa possui o uso de técnicas estatísticas e busca expressar tudo em números, enquanto a qualitativa pressupõe uma ligação entre o mundo real e o sujeito da pesquisa, o que inviabiliza que se expresse os resultados e métodos de maneira numérica e estatística (SILVA,2005,p.19-23).

Esta pesquisa é considerada aplicada, pois tem como objetivo gerar conhecimento que será aplicado para a resolução de um problema prático. Já em relação a abordagem do problema a pesquisa é qualitativa, pois analisa fatores do mundo real e a verificação é baseada nas funcionalidades observadas, sem medidas quantificáveis.

(33)

3.2 ETAPAS DA PESQUISA

A Figura 1 representa as etapas para a conclusão do projeto.

• Na revisão bibliográfica, é feita uma revisão dos conceitos relevantes ao tema, e das soluções já existentes para a problemática.

• Na Definição do método, é definido qual tipo de pesquisa e metodologia será adotada. • A Análise dos requisitos consiste em delimitar quais funcionalidades deverão ser

implementadas.

• A modelagem é a etapa para definição de classe e arquitetura do software.

• O desenvolvimento engloba a implementação das funcionalidades definidas, assim como a criação de testes unitários destas funcionalidades.

• Os testes de aceitação consistem em testar a funcionalidade do software como um todo, com foco em cumprir o objetivo definido.

• A análise de resultados consiste em avaliar se o software cumpriu o objetivo inicial, e definir quais pontos podem ser melhorados futuramente.

Figura 1: Etapas da pesquisa Fonte: Autor

(34)

3.3 DELIMITAÇÕES

Não faz parte do escopo do trabalho criar a “inteligência de negócio” do bot de negociação, ou seja, não é parte do objetivo do software determinar qual o momento para realizar operações em moedas digitais. Os “sinais” de compra e venda são originados por outras aplicações de lado servidor, se comunicando por APIs HTTP.

Também não faz parte dos objetivos a criação de um sistema robusto de autenticação com múltiplos usuários. A autenticação da será feita por um usuário e uma senha, definidos por variáveis de ambiente no servidor onde a aplicação roda.

A criação de uma interface gráfica não faz parte também do escopo do projeto, pois o foco é a comunicação com outras aplicações de lado servidor.

(35)

3.4 ARQUITETURA DA SOLUÇÃO PROPOSTA

A solução proposta utiliza um sistema cliente-servidor (web), utilizando o protocolo HTTP. A aplicação do lado “servidor” é responsável pela comunicação com as exchanges via API HTTP, e recebe comandos via API HTTP. A solução proposta é separada em três sistemas distintos, que são demonstrados na Figura 2.

Figura 2: Arquitetura da solução. Fonte: Autor

(36)

A “aplicação externa” representa quaisquer aplicações que se comuniquem com o bot desenvolvido, desde que sigam os padrões e protocolos de mensagens definidos.

O “Gerenciador de Riscos” é responsável por analisar a mensagem e aplicar as alterações adequadas para que fique em conformidade com o risco aceitável para o tipo de operação. Já o “Executor de Ordens” é responsável pela comunicação com as corretoras, fazendo o envio e monitoramento das mesmas de acordo com o tipo de operação. Quando existem alterações no portfólio de investimentos, o “Executor de Ordens” informa o “Gerenciador de Portfólio”, sendo este responsável por guardar o estado atual do portfólio.

Figura 3: Arquitetura do Executor de Ordens Fonte:Autor

O “Executor de Ordens” possui uma arquitetura mais complexa que os demais serviços, pois utiliza diversas threads para operacionalizar as mensagens recebidas. A thread da API instancia uma nova thread do “Gerenciador de Ordens”, que instancia uma nova thread para cada operação. O “Gerenciador de Ordens” é responsável por verificar se novas mensagens recebidas são parte de operações já existentes, ou se devem ser criadas novas operações. Outra responsabilidade dele é verificar se as ordens já enviadas a corretora foram

(37)

completadas, e em caso de completude, informar a operação respectiva a esta ordem.(Figura 3)

(38)

4 MODELAGEM DO SISTEMA

Esse capítulo aborda a modelagem do bot com base na UML, incluindo os diagramas de atores, além dos requisitos funcionais e não-funcionais, regras de negócio, casos de uso e protótipos das telas.

4.1 ATORES

O papel do “Ator” é definir o papel exercido por um usuário ou qualquer outro sistema externo que interage com o bot, através de sinais e dados. É importante deixar claro que o Ator é um papel exercido por uma entidade externa ao bot. (OMG,p.586-587,2007).

Figura 4: Ator que é um script ou sistema automatizado

(39)

O ator que interage com o bot é um script ou sistema automatizado, que gera “sinais” para negociação(Figura 4). Os sinais são uma nomenclatura adotada pelo autor para “mensagem indicando momento para compra ou venda”.

Quadro 5: Ator Script Fonte: Autor

Ator Script/software externo

Definição Script que indica os momentos em que deve

ocorrer negociação. Indica compra/venda, limite aceitável de perda,etc. Frequência do uso A interação via API por outros softwares é

necessária para cada nova negociação. Conhecimentos específicos A inteligência que permite as decisões sobre

compra e venda estão dentro deste subsistema, ou então são repassadas a este

sistema

Permissão de acesso Acesso total ao sistema

Nota-se no Quadro 5 a definição do ator demonstrado, que é um software cujo funcionamento está fora do escopo deste trabalho.

4.2 REQUISITOS

Neste capítulo são abordados os requisitos funcionais e não funcionais do bot.

Requisito funcional é aquele que se refere a uma funcionalidade do sistema, enquanto o requisito não-funcional é relacionado a qualidade do software (tais como segurança,

disponibilidade, integridade e desempenho). (Teixeira,2018)

Os requisitos funcionais serão representados pela sigla RF, e os não-funcionais pela sigla RNF. Abaixo estão os requisitos do software.

• RF01 – Permitir ao Script/software externo que informe o valor de entrada, exchange, par de moedas e limite de perda aceitável para a execução de uma operação.

• RF02 – Permitir operações a mercado, onde se negocia pelos valores já ofertados no livro de ordens.

• RF03 – Permitir a compra em Breakout, onde o bot esperará o ativo chegar em um determinado valor antes de fazer a compra.

(40)

• RF05 – Deve ser possível definir a quantia a ser comprada para cada moeda no Gerenciador de Riscos.

• RNF01 – Autenticação por login e senha na API REST.

• RNF02 – O login e senha serão informados por variável de ambiente.

• RNF03 – A API aceitará o login/senha cadastrados por autenticação HTTP BASIC. • RNF04 – Utilização do banco de dados Postgres.

• RNF05 – Armazenamento de log de todas as ordens em tabela apropriada, para fins de auditoria.

(41)

4.3 REGRAS DE NEGÓCIO

Regras de negócio são diretivas que restringem e definem as atividades do negócio. No contexto da computação, são feitos para auxiliar com que a organização atinja seus objetivos. (Techopedia,2017)

O Quadro 6 exibe as regras de negócio referentes ao trabalho proposto.

Quadro 6: Regras de negócio Fonte: Autor

Identificação Nome Descrição

RN01 Limite de perda aceitável O limite de perda aceitável deve ser informado para a operação, sendo expressado em porcentagem. Quando o valor do ativo atinge este

limite, é vendida toda a quantia disponível.

RN02 Compra por Breakout A compra por Breakout

significa somente que o bot aguardará o preço do ativo

chegar em um valor específico antes de informar a corretora que deseja comprar.

Isto acontece pois se ele informar que deseja comprar um ativo a uma cotação mais alta que a atual, a compra será

feita naquela cotação enquanto o valor de mercado

é muito mais baixo. RN03 Operação de long a mercado Na modalidade de operação a

mercado, tanto a compra quanto a venda são executadas no preço que o ativo estiver sendo cotado no

mercado. Ou seja, não se define uma cotação específica

que se deseja pagar ou receber pelo ativo, e o controle da cotação é feito

(42)

pelo sistema externo que inicia a operação enquanto monitora o valor de mercado.

RN04 Operação de long limite É uma operação onde a

compra e a venda são feitas em um preço fixo, informado

pelo sistema externo.

RN05 Cancelamento do limite de

perda antes da venda

A ordem de limite de perda (stop-limit) deve ser cancelada antes dos ativos comprados serem vendidos,

pois caso contrário a exchange poderá vender ativos relacionados a outra negociação, mesmo após a finalização da operação.

4.4 CASOS DE USO

Um caso de uso é um termo usado para descrever como o usuário de um sistema vai utilizar o sistema. Geralmente inclui também como será feita resolução de erros. (Techopedia,2017)

O Quadro 7 demonstra como iniciar uma negociação, e o fluxo é o mesmo independente do tipo de operação.

Quadro 7: Caso de uso para iniciar trade

Fonte: Autor

Identificação C1

Título Enviar trade

Descrição do caso de uso Envia uma mensagem com os dados

necessários para completar uma operação.

Atores Sistema Externo

Requisitos Correlacionados

Fluxo básico

Pré-Condições 1) possuir credenciais de acesso

2) possuir conexão ativa com a internet

(43)

código de status 200. Fluxo Principal

1) Sistema externo gera requisição HTTP e anexa os dados em formato adequado 2) Sistema externo envia a requisição ao gerenciador de risco

3) É verificada a formatação dos dados, e retornada uma resposta HTTP. Tratamento de exceções

1) Dados em formato de conteúdo incorreto:

a) É retornada uma resposta HTTP com código de status 415 (tipo de mídia não suportado). 2) Dados não informados:

a) É retornada uma resposta HTTP com código de status 422 (entidade não processável) b) Retorna ao fluxo 1.

Já no Quadro 8 observa-se o fluxo de comportamento específico para uma negociação a mercado, desde sua iniciação até sua finalização (com venda).

Quadro 8: Caso de uso – operação a mercado Fonte: Autor

Identificação C2

Título Operação real

Descrição do caso de uso Efetua uma operação de trade, com envio de

duas mensagens do usuário ao bot (compra e venda).

Atores Sistema Externo

Requisitos Correlacionados

Fluxo básico

Pré-Condições 1) possuir credenciais de acesso

2) possuir conexão ativa com a internet

Pós-Condições 1) É recebida uma resposta HTTP com

código de status 200.

2) É observável que o histórico de ordens e saldo na corretora de criptoativos sofre alterações.

Fluxo Principal

1) Sistema Externo envia requisição de compra ao Executor de Ordens. 2) É retornada uma resposta HTTP indicando que a solicitação foi aceita. 3) Executor de ordens cria uma ordem de compra na corretora.

4) Executor de ordens cria uma ordem de limite de perdas na corretora, que será acionada quando a cotação do ativo for igual ou menor que a especificada.

5) Após um período arbitrário, o Sistema Externo envia uma solicitação de venda ao Executor de Ordens.

6) Executor de Ordens envia ordem de venda, e o ativo é vendido. Tratamento de exceções

(44)

1) Dados em formato de conteúdo incorreto:

a) É retornada uma resposta HTTP com código de status 415 (tipo de mídia não suportado). 2) Dados não informados:

a) É retornada uma resposta HTTP com código de status 422 (entidade não processável) b) Retorna ao fluxo 1.

Quadro 9: Caso de uso para simulação

Identificação C3

Título Operação simulada

Descrição do caso de uso Envia uma mensagem ao gerenciador de risco

representando um sinal que deve ser apenas simulado, mas não operado na corretora.

Atores Sistema Externo

Requisitos Correlacionados

Fluxo básico

Pré-Condições 1) possuir credenciais de acesso

2) possuir conexão ativa com a internet

Pós-Condições 1) É recebida uma resposta HTTP com

código de status 200. Fluxo Principal

1) Sistema externo gera requisição HTTP e anexa os dados em formato adequado 2) Sistema externo envia a requisição ao gerenciador de risco

3) É verificada a formatação dos dados, e retornada uma resposta HTTP.

4) Gerenciador de Riscos informa diretamente Gerenciador de Portfólio que uma nova mensagem do tipo “simulação” foi recebida

Tratamento de exceções 1) Dados em formato de conteúdo incorreto:

a) É retornada uma resposta HTTP com código de status 415 (tipo de mídia não suportado). 2) Dados não informados:

a) É retornada uma resposta HTTP com código de status 422 (entidade não processável) b) Retorna ao fluxo 1.

No Quadro 9 é demonstrado o fluxo para o uso do paper trading, que é executado quando um sistema externo detecta oportunidades de operação, mas não se deseja de fato operacionalizar estas mensagens e sim guardá-las para posterior análise. Usualmente esta funcionalidade é utilizada para testar estratégias de trading.

(45)

5 DESENVOLVIMENTO

Nesta seção são demonstradas as ferramentas e tecnologias utilizadas para o desenvolvimento do bot, assim como o histórico do desenvolvimento e a validação dos resultados obtidos.

5.1 FERRAMENTAS E TECNOLOGIAS

Foram escolhidas as ferramentas que atendem as necessidades para o desenvolvimento e operação do bot, levando também em consideração as ferramentas já disponíveis e em uso pela empresa.

Figura 5: Tecnologias e Ferramentas utilizadas para elaboração do projeto. Fonte: Autor.

(46)

5.1.1 Python

Python6 é uma linguagem de programação rápida e poderosa de código aberto,

podendo ser executada em várias plataformas e tem como diferencial sua rapidez para aprendizado e facilidade de desenvolver aplicações de vários tipos. É utilizada para desenvolvimento web, aplicações gráficas, científicas, jogos, dentre outros.

Foi escolhida esta linguagem pois ela permite um desenvolvimento rápido de aplicações, é totalmente aberta e livre para uso comercial, e já está em uso na empresa em outros sistemas.

5.1.2 Flask

Flask7 é um framework para desenvolvimento de aplicações web que segue a

especificação Web Server Gateway Interface. Ele foi desenvolvido com objetivo de ter um aprendizado fácil e tornar o desenvolvimento de aplicações rápido e escalável. O desenvolvedor tem liberdade total para escolher quais ferramentas adicionais quer usar e a comunidade é muito ativa, produzindo muitas extensões.

6 https://www.python.org/about/ 7 https://palletsprojects.com/p/flask/

(47)

5.1.3 Json

JSON8 (Notação de Objetos Javascript) é uma sintaxe de texto definida pela ECMA

International, que tem como objetivo permitir a troca de dados entre sistemas em várias linguagens de programação. A fundação ECMA deixa claro que o JSON não é de fato uma especificação completa para troca de dados, e que os sistemas que se comunicam devem definir seus padrões enquanto respeitam a sintaxe JSON.

Foi escolhida esta sintaxe pois ela é muito flexível, e facilita a transmissão de dados através de objetos com chave e valor.

5.1.4 PostgreSQL

PostgreSQL9 é um banco de dados relacional de código aberto e livre, que possui

mais de 3 décadas de desenvolvimento ativo e possui grande reputação no mercado por sua confiabilidade e desempenho. É um banco de dados escalável e compatível com diversos sistemas operacionais tais como Linux, Windows, MacOS, BSD, etc.

5.1.5 Git

Segundo Sridhar(2018)10, o Git é um sistema para controle de versões distribuido e

de código aberto. Ele serve para rastrear mudanças em código durante diferentes versões, e é distribuído pois existem cópias desse controle de versões tanto em servidores centrais quanto

8 https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf 9 https://www.postgresql.org/about/

10 Sridhar,Aditya(2018). An introduction to Git: what it is, and how to use it. Disponível em: <https://www.freecodecamp.org/news/what-is-git-and-how-to-use-it-c341b049ae61/>. Acesso em 15 abr 2020.

Referências

Documentos relacionados