Arbitragem de criptografia com NetworkX e Python PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Arbitragem criptográfica com NetworkX e Python

Analisando dados criptográficos da API Coingecko para construir um scanner de arbitragem criptográfica em python

McKlayne Marshall

Em coautoria com Isaac Réia

Foto por Alina Grubnyak on Unsplash

Os mercados de moedas em todo o mundo são negociados 24 horas por dia em volumes significativamente superiores aos de títulos, ações ou futuros mercados. Os participantes nos mercados cambiais estão a cobrir riscos ou a especular sobre alterações futuras nos valores das moedas.

Outra fonte de lucros advém do aproveitamento dos desequilíbrios de curto prazo nas valorizações cambiais. Usando algoritmos extremamente rápidos, os traders de alta frequência identificam oportunidades de arbitragem e executam rapidamente uma série de trocas que resultam em um pequeno lucro. Veja isso artigo do Corporate Finance Institute para obter explicações e exemplos mais aprofundados.

Instituto de Finanças Corporativas

Devido à elevada concorrência e ao volume de negociação nos mercados cambiais, estas oportunidades são de curta duração e os lucros são minúsculos. Embora os ganhos através da arbitragem cambial possam acumular-se ao longo do tempo com um elevado número de negociações, existe uma oportunidade semelhante nos mercados de criptomoedas que podem ser ainda mais rentáveis.

Como existem muitas criptomoedas para negociar, existem muitas combinações possíveis para verificar oportunidades de arbitragem. A estrutura de dados Graph (Network) é ideal para acompanhar as diferentes taxas de câmbio entre moedas e identificar rapidamente casos de desequilíbrio dos quais podemos tirar vantagem. Para obter mais informações sobre gráficos/redes e pacotes Python para trabalhar com eles, confira isto livro no Programadores Pragmáticos série.

Para construir um gráfico para criptomoedas, aproveitaremos o pacote NetworkX. Esta é uma ferramenta poderosa que facilita a análise das moedas nas quais estamos interessados ​​e a localização de oportunidades de negociação. Primeiro, obteremos taxas de câmbio criptográficas da API CoinGecko. Em seguida, inicializaremos o gráfico e definiremos as relações (taxas de câmbio) entre cada uma das moedas de nosso interesse. Por fim, percorreremos todos os caminhos de uma moeda para outra e vice-versa para identificar oportunidades de arbitragem.

Se você tiver experiência com APIs JSON, o CoinGecko API é relativamente simples de usar. Com este trecho de código, extraí as taxas de câmbio atuais de cinco moedas diferentes (Bitcoin, Bitcoin Cash, Ethereum, Litecoin e EOS).

O URL para a chamada da API será mais ou menos assim, dependendo das moedas das quais você gostaria de extrair dados:

https://api.coingecko.com/api/v3/simple/price?ids=bitcoin-cash,ethereum,bitcoin,litecoin,eos&vs_currencies=bch,eth,btc,ltc,eos

Usando os pacotes Request e JSON para Python podemos carregar esses dados como um dicionário com chaves para cada criptografia que incluímos em nossa lista. O valor associado a cada uma dessas chaves é outro dicionário com entradas para as taxas de câmbio desse par de moedas. Por exemplo, para Bitcoin Cash obtemos o seguinte resultado:

Isso mostra que 0.25 Ethereum ou 0.16 Bitcoin podem ser comprados com 1 Bitcoin Cash. Com esses resultados para cada uma das criptomoedas estamos prontos para definir o Gráfico.

Cada uma das moedas representa um ‘vértice’ no gráfico e a taxa de câmbio entre duas moedas é uma ‘borda’. Após inicializar um objeto Graph vazio, definimos uma lista de tuplas para cada par de moedas e sua taxa de câmbio em ambas as direções.

A lista das arestas será mais ou menos assim:

Com as arestas adicionadas ao gráfico, estamos prontos para procurar oportunidades de arbitragem. Usando a função de combinações do pacote itertools definimos todos os pares de moedas possíveis. Em seguida, usamos a função all_simple_paths do NetworkX para definir todos os caminhos possíveis da primeira moeda para a segunda.

Por exemplo, se olharmos para Litecoin e Bitcoin Cash, existem muitos caminhos possíveis, dadas as moedas que estamos considerando. Podemos simplesmente comprar Bitcoin Cash com Litecoin ou podemos comprar Bitcoin com Litecoin e depois usar Bitcoin para comprar Bitcoin Cash.

Percorremos cada caminho e realizamos os seguintes cálculos em cada etapa. Primeiro, assumimos que começamos com uma das moedas iniciais. Multiplicamos isso pela taxa de câmbio de uma moeda para outra até chegarmos ao final do caminho.

Por exemplo, se começarmos com um Bitcoin Cash podemos comprar 0.24 Ethereum, então multiplicamos 1 x 0.24197529 = 0.24197529. A taxa de câmbio de Ethereum para Bitcoin é 0.06, então multiplicamos 0.24197529 x 0.06484324 = 0.0156904618035396. Este valor é muito próximo da taxa de câmbio entre Bitcoin Cash e Bitcoin, mas não exatamente igual.

Neste ponto, verificamos o inverso do caminho, ou seja, Bitcoin para Ethereum para Bitcoin Cash multiplicando 1 x 15.414849 x 4.132739 = 63.705547641411. Multiplicamos esses dois resultados para nossa avaliação final do caminho (0.0156904618035396 x 63.705547641411 = 0.9995694619411315). Que eu saiba, não existe um prazo definido para esse valor. Podemos chamá-lo de Fator de Arbitragem.

Se as taxas de câmbio estivessem sincronizadas, o Fator de Arbitragem teria sido exatamente um. Um valor menor que um sugere que passamos por uma série de trocas e terminamos com menos do que começamos. Então, buscamos que esse valor seja maior que um, pois fazer as trocas resultaria em lucro. Se tivéssemos descoberto que o Fator de Arbitragem era 1.005 em nosso exemplo anterior, isso teria indicado que, seguindo esse caminho de trocas de uma criptomoeda para outra e vice-versa, poderíamos ter ganho 0.005 Bitcoin Cash (no valor de cerca de US$ 3).

As oportunidades de arbitragem vêm e vão para diferentes criptomoedas ao longo do dia e é possível verificar todas as combinações para diversas moedas sem encontrar um Fator de Arbitragem significativamente acima de um. No entanto, vi Fatores de Arbitragem acima de 1.01, indicando que um retorno de 1% poderia ser obtido em questão de momentos através de simples trocas de criptomoedas.

Trazendo as três funções explicadas acima, conseguimos criar um scanner de criptografia de arbitragem.

A arbitragem cambial é um método de negociação bem estabelecido e de baixo risco, mas o mercado de moedas tradicionais é muito eficiente e competitivo. Existe uma oportunidade maior em criptomoedas e algumas ferramentas Python simples podem ajudar a facilitar a estratégia. NetworkX pode ser usado para construir um gráfico e pesquisar rapidamente oportunidades de arbitragem.

No entanto, ainda existem desafios a superar. Primeiro, as taxas para negociar criptomoedas podem ser muito altas. Isto significa que quaisquer desequilíbrios entre criptomoedas devem ser significativos para serem lucrativos. Ao mesmo tempo, a estratégia será mais eficaz se for automatizada e configurada para ser executada periodicamente ou 2 horas por dia. Fique atento a artigos futuros sobre a implementação de estratégias de negociação de criptografia com instâncias AWS ECXNUMX ou funções Lambda.

Mais conteúdo em plainenglish.io

Fonte: https://python.plainenglish.io/crypto-arbitrage-with-networkx-and-python-638166e5a947?source=rss——-8—————–criptomoeda

Carimbo de hora:

Mais de Médio