Ganhando sem risco no mercado mais volátil do século (ou: Como Aprendi a Parar de me Preocupar e Amar a Ineficiência)

Dois economistas, um de 20 e poucos e outro de 50 e tantos, andavam juntos por Wall Street. O economista mais jovem vê uma nota caída no chão e exclama: "Olha, $20 no chão!". O economista mais velho sequer olha pra baixo e responde: "Não seja tolo. Se realmente houvesse $20 no chão, alguém já teria pego há muito tempo!"

No longíquo ano de 2017, um dos meus principais interesses era o estudo de criptomoedas. Achava (e ainda acho) uma tecnologia revolucionária, mas o que tirei de maior proveito foi uma lição sobre como os mercados funcionam e como vale a pena prestar atenção ao que se tem no próprio quintal. Essa é a história que vou contar hoje, uma história de arbitragem e de como Satoshi me comprou minha primeira máquina de lavar, à vista.

Se você quiser comprar ou vender criptomoedas como o Bitcoin, tem basicamente duas opções: ir pra um site de compra e venda "sobre o balcão", que funciona como uma "loja" de moedas em que você compra e vende direto com a loja por um preço determinado por ela, ou ir pra uma exchange, e comprar e vender pra outras pessoas como você. Em geral, os melhores preços são conseguidos em exchanges: corretoras que funcionam mais ou menos como um home broker de uma corretora de valores.

Nesses sites, usuários anunciam ordens de venda ("quero vender um número X de Bitcoin, e quero tal preço") e ordens de compra ("quero comprar um número Y de Bitcoin, e estou disposto a pagar tal preço"). O conjunto de ordens de venda e ordens de compra de todos os usuários se chama livro de ofertas. Quando vai comprar, por exemplo, você pode escolher entre comprar imediatamente, pagando o preço (cobrindo) uma ordem de venda existente, ou botar sua ordem de compra e esperar que alguém a cubra.

Algumas exchanges oferecem a compra e venda somente de Bitcoin, a criptomoeda primogênita, e outras oferecem uma miríade de criptomoedas diferentes (Ethereum, Nano, Monero, por aí vai). Nesses casos, cada moeda tem ao menos um par de moeda para trocas - por exemplo, comprar ou vender Ethereum com reais (BRL) é o par ETH/BRL, comprar ou vender Bitcoin com reais é o par BTC/BRL, comprar ou vender Monero (XMR) com Bitcoin é o par XMR/BTC. Cada par de moedas tem seu próprio livro de ofertas.

Um livro de ofertas de outra exchange para o par BTC/USD

Anunciar uma ordem não quer dizer necessariamente que a operação vai se concretizar. A compra ou venda só acontece quando alguém aceita pagar o seu preço, e antes de chegar no seu preço, vão comprar o que estiver mais barato ou vender pro que pagar mais.

O fato de que os preços são definidos por usuários significa que os eles são naturalmente nivelados em todas as exchanges: se em uma o preço de Bitcoin for maior do que em outra, rapidamente alguém vai comprar na mais barata, transferir pra mais cara e vender com lucro, fazendo isso até que não haja mais a diferença de preço. Isso se chama arbitragem e é uma das causadoras da "eficiência dos mercados". Existem robôs fazendo isso em quase todas as exchanges, e por causa das taxas de saques, depósitos, compras e vendas de exchange e taxas de transferência e lentidão de Bitcoin ou outra criptomoeda, o processo é relativamente complicado, a margem é relativamente pequena e os players já estabelecidos em geral acabam ficando com o bolo todo.

Pois bem. Em uma exchange brasileira em particular, percebi um problema interessante. A exchange:

  • Possuía um par BTC/BRL
  • Possuía varias outras criptomoedas com pares tanto em BTC quanto em BRL: ETH/BTC e ETH/BRL, XMR/BTC e XMR/BRL, etc.

Assim, se eu tivesse qualquer criptomoeda diferente de Bitcoin (digamos, Ethereum) e quisesse esse saldo em reais na minha conta, tinha dois caminhos diferentes:

  • Vender Ethereum por reais no par ETH/BRL
  • Vender Ethereum por Bitcoin no par ETH/BTC, e depois trocar o Bitcoin por reais no par BTC/BRL

A questão é que o caminho ideal não era óbvio! Como a corretora tem taxas (em percentual) pra cada operação, o ideal na teoria seria a primeira opção, já que leva uma operação a menos. Acontece que o mercado não é totalmente eficiente, e por causa do spread (diferença de preço entre compra e venda) e flutuação dos preços, a segunda opção não tão raramente era mais eficiente e resultava em mais reais no final do caminho, mesmo pagando uma taxa a mais. A diferença entre os caminhos podia ser grande ou pequena, dependendo das condições atuais do mercado.

Isso me encucou com uma possibilidade: será que havia situações em que era possível comprar um par BTC, vender BRL, trocar de volta por BTC e terminar com mais do que se começou?

Na teoria, parecia plausível. Peguei um papel, rabisquei os cálculos de fórmulas que precisaria pra descobrir e fiz um teste: um programinha em Python que constantemente verificava os livros de ofertas de todos os pares e calculava se, mesmo após as taxas, ir de um lado pro outro (ou vice versa) e voltar podia dar lucro.

Em suma, o cálculo era algo até simples:

$$X = \frac{\text{ETH/BRL}}{\text{ETH/BTC} \times \text{BRL/BTC}}$$

(excluindo alguns cálculos de taxa da exchange, pra simplificar a apresentação).

Se $LX > 1$L, não há nada de interessante, perderíamos dinheiro fazendo a troca.

Mas se $LX < 1$L... Algo mágico aconteceria:

Máquinas de movimento perpétuo não existem na física, mas existem no maravilhoso mundo do mercado ineficiente

Compraríamos Ethereum com reais, venderíamos o Ethereum comprado por Bitcoin, venderíamos Bitcoin por reais e acabaríamos com mais reais do que quando começamos!

Terminei de escrever o programa, botei pra rodar continuamente num servidor da DigitalOcean e fiz com que ele registrasse o menor $LX$L encontrado, pra saber se seria realmente possível que uma situação assim acontecesse.

Primeiro dia, nada: $LX > 1$L. Segundo dia, nada: $LX > 1$L. Terceiro dia...

X = 0.973!

Era um ganho de menos de 3%, mas se eu não estivesse enganado, era isso: efetivamente tirar dinheiro do nada. Com a compra e venda instantâneos, era um investimento sem risco.

Animado mas ainda um pouco cético, dediquei tempo a escrever a parte do programa que não só verificava os preços pra procurar a oportunidade, mas que realmente agia e fazia as operações de compra e venda. A ideia gerava uma certa ansiedade, porque programar com dinheiro na linha é arriscado, e eu não podia me dar ao luxo de verificar as operações manualmente: a oportunidade podia surgir a qualquer momento e sumir antes que eu conseguisse olhar pra dar um sim ou não. Eu tive que escrever o robô e confiar no filho.

Fiz um depósito de R$50,00 na exchange pra começar a trocar. Primeiro dia, algumas operações, saldo final R$46,00. Pequena desanimação, algo de errado não está certo. Ajustei as taxas que levava em consideração e deixei rodando, não esperando mais muita coisa.

Segundo dia nada, terceiro dia, saldo final R$53,00. Opa... Alguma coisa aconteceu. Deu certo! Não era muita coisa, mas nesse ritmo ia dar pra comemorar comprando umas cervejas no final do mês. Mas o mais energizante é que eu tinha conseguido: eu derrotei o sistema! Um verdadeiro alquimista dos tempos modernos, transformei código em Bitcoin. Me senti muito orgulhoso e até hoje, é uma das melhores sensações que já tive.

Isso não é mágica: é o resultado de traders desatentos que lançam ordens de compra ou venda sem consultar o livro do outro par, de modo que não percebam que sua oferta foi boa demais. Voltando ao ponto dos dois caminhos possíveis, eles escolheram o caminho errado - com margem o suficiente pra que outra pessoa (eu!) pudesse ter lucro comprando deles e vendendo no outro livro. Pra quem lançou a ordem, tudo normal: só conseguiram um comprador pro preço que ofereceram.

Fiz alguns ajustes, parei de transformar necessariamente BTC em BRL ou vice-versa. Eu procurava por oportunidades em ambas as direções, e não tinha como saber em qual direção seria a próxima; se precisasse, eu transformava um em outro, e se não precisasse era uma operação e uma taxa a menos. Na maioria das trocas eu tinha que fazer o caminho várias vezes por não conseguir cobrir a ordem toda com uma compra só, mas não era grande problema, já que a taxa era sempre percentual.

Alguns dias depois, tendo ganhado no máximo R$15,00 e no mínimo nada por dia, uma coisa fantástica aconteceu: sentado no ponto de ônibus, esperando pra voltar pra casa depois do estágio na Dígitro da época, fui olhar o sistema e meu saldo era de R$768,00!

Quase não consegui acreditar nos meus olhos. Cresci meu investimento mais de 15x de modo praticamente passivo e sem risco! Imediatamente saquei a maior parte da conta na exchange pro banco, pra conseguir acreditar que era real, e pra garantir que nenhum bug ia limpar os meus lucros. Spoiler: era real, e nenhum bug limpou meus lucros.

Ao longo do mês ou dois seguintes, o padrão se repetiu: a maioria dos dias eram parados ou rendiam pouco, mas alguns poucos dias chegavam nesse patamar. R$700, R$1200 num dia. Em geral, quanto mais volatilidade no mercado de criptomoedas, mais oportunidades eram criadas pra mim pelo desespero dos investidores e especuladores desatentos. Meu "sabor" de arbitragem funcionava, e era eficiente porque o dinheiro só saía da exchange quando ia pro meu bolso.

Gosto de pensar que Satoshi Nakamoto, o mítico pai do Bitcoin e das criptomoedas em geral, me deu o dinheiro pra comprar sozinho e à vista minha primeira máquina de lavar roupa. Até então, estudante/estagiário com outras prioridades, lavava tudo no tanque.

Infelizmente, não vos escrevo hoje um cripto-multimilionário. Depois de alguns meses funcionando, meu programa subitamente parou de encontrar oportunidades, mesmo as pequenas que apareciam dia sim, dia não.

Tendo a exchange só uma API RESTful sem webhooks e nem websockets, a maior otimização possível (fora dos níveis dos traders quant tradicionais, usando FPGAs e ASICs dedicados a isso) seria ter um servidor fisicamente próximo ao da exchange pra minimizar a latência. Era difícil localizá-lo de propósito, porém, porque ele estava atrás do CloudFlare. Assim, é possível que um concorrente tenha feito um sistema tão melhor que o meu nunca mais viu nada, mas uma suspeita que tenho é que a exchange passou a fazer o que eu fazia internamente, evitando que as ordens mesmo que chegassem ao livro de ofertas, e com a vantagem de não ter que pagar taxas pra si mesma.

Procurei também outras exchanges em que o modelo seria possível, logo depois de perceber o potencial do negócio. Infelizmente, na maioria das exchanges ou não há pares com ambas as bases (BTC e BRL ou outro fiat), ou não consegui encontrar oportunidades. Não fico triste com isso porque a experiência de entender um pedacinho da economia, de acreditar na nota de $20 no chão (já que em geral sou um pouco cético) e de vencer o sistema foram extremamente valiosas.

E além do mais, até hoje recebo e-mails de exchanges russas pras quais me cadastrei quando estava procurando por mais ouro. Quem sabe no futuro eu não aprenda russo, de tanto excluir e-mail? :]

Show Comments

Get the latest posts delivered right to your inbox.