Scripts de arbitragem para bots de negociação de criptografia

>

A volatilidade do mercado de criptomoedas o torna um local atraente para negociações de arbitragem. No entanto, a dificuldade de construir uma infraestrutura de arbitragem torna um processo complicado.

Conectar-se a várias bolsas, acessar websockets em tempo real e executar a estratégia de arbitragem, tudo isso exige conectividade com várias bolsas. Cada troca é diferente na forma como fornecem suas APIs, o que impede integrações simples.

Neste artigo, você receberá um script para se conectar automaticamente a qualquer uma das trocas mais populares do mercado de criptografia. Com essas conexões, você terá acesso a fluxos de preços ao vivo que nos permitirão construir o início de uma estratégia de arbitragem.

Embora não abordemos a execução de ordens neste artigo, uma vez que a oportunidade é identificada, executar uma negociação é simples.

Você pode encontrar tutoriais sobre como executar negociações, coletar informações de saldo de portfólio e muito mais em nossas postagens recentes do blog aqui:

  • Scripts Python para bots de troca de criptografia [Tutorial de troca de API]

  • Verificando o valor do seu portfólio de criptografia

  • Um script Python para tabelas de preços de criptomoedas

  • Automatizando Crypto Portfolios com Trading Scripts

Não vamos esperar mais – é hora de arbitrar!

O que é arbitragem?

Não cobriremos os detalhes de arbitragem neste artigo. Para saber mais sobre o que é arbitragem, visite nosso artigo anterior aqui.

Configurar

Mergulhando direto no script, vamos começar configurando nosso ambiente.

Instalar Bibliotecas

Tudo o que precisamos é fornecido pelo Biblioteca de API de desenvolvedor Shrimpy. Para instalar a biblioteca Python, execute o seguinte comando:

pip install shrimpy-python

Obtenha chaves de API

Assim que a biblioteca for instalada, precisaremos nos inscrever para um Conta da API Shrimpy Developer para obter nossas chaves de API.

Depois de se inscrever, gere seu Chaves de API mestre selecionando o botão para gerar novas chaves de API. Depois que essas chaves forem criadas, certifique-se de habilitar o “Dados”Permissão nas chaves, caso contrário, não poderemos acessar os websockets nas etapas posteriores. Se você deseja negociar com essas chaves, você deve habilitar TODO permissões nas chaves.

Salve suas chaves para etapas posteriores.

Obtenha a codificação

A configuração agora está feita, então vamos começar a codificar!

Importações

Comece importando a biblioteca Shrimpy. Esta será a única biblioteca que precisaremos importar para este tutorial de script.

importar camarão

Defina seus gerenciadores de mensagens

Quando uma mensagem é recebida através do websocket, precisaremos de um manipulador que determinará como os dados serão processados.

Antes de entrar no divertido processamento de mensagens do websocket, vamos criar um gerenciador que irá gerenciar os erros que voltam através do websocket. Isso simplificará a maneira como gerenciamos nossos erros.

def error_handler (err):

imprimir (errar)

Em seguida, é hora de criar nosso gerenciador de mensagens principal. Este manipulador receberá as atualizações do websocket e então as processará. Como ainda não percorremos todo o script, cada um desses valores pode não fazer sentido, mas aqui está um exemplo de manipulador.

intercâmbios_bbo = {}

manipulador de def (msg):

bid_price = msg [‘conteúdo’] [‘lances’] [0] [‘preço’]

ask_price = msg [‘content’] [‘pede’] [0] [‘preço’]

exchangeges_bbo [msg [‘exchange’]] = {‘bid’: float (bid_price), ‘ask’: float (ask_price)}

best_bid = 0,0

best_ask = 10000000.0

best_bid_exchange = ”

best_ask_exchange = ”

para chave, valor em exchangeges_bbo.items ():

se valor [‘lance’] > best_bid:

best_bid = valor [‘lance’]

best_bid_exchange = key

if value [‘ask’] < best_ask:

best_ask = value [‘perguntar’]

best_ask_exchange = chave

se best_bid > best_ask:

imprimir("vender em " + best_bid_exchange + " pra " + str (best_bid))

imprimir("comprar em " + best_ask_exchange + " pra " + str (best_ask))

outro:

imprimir("Sem Arbitragem Disponível")

Embora pareça muito, tudo o que este manipulador está fazendo é coletar as atualizações do websocket, armazenar o melhor lance e preço de venda para cada troca e, em seguida, comparar os preços entre as bolsas para ver se há oportunidades de arbitragem para aquele par de negociação.

“Exchangeges_bbo” é onde armazenamos o melhor lance e preço pedido para cada troca. Quando recebemos cada mensagem de tick do websocket, os valores nesse dicionário são atualizados para incluir os preços mais recentes para cada troca.

Se a melhor oferta for maior do que a melhor oferta, isso significa que há uma oportunidade de arbitragem. Quando isso acontecer, o script imprimirá qual troca você deve vender e qual troca você deve comprar.

Nota: Você pode fazer o que quiser no manipulador. Este é apenas um exemplo. O manipulador mais fácil seria simplesmente imprimir cada mensagem à medida que chegassem, semelhante ao manipulador de erros. Um manipulador mais complexo daria um passo adiante e executaria as negociações com base nas oportunidades de arbitragem.

Criação de Cliente

Nas etapas anteriores, criamos nossas chaves de API de desenvolvedor para as APIs Shrimpy. Essas chaves agora podem ser atribuídas a variáveis ​​para as chaves públicas e privadas.

public_key = ‘6d73c2464a71b94a81aa7b13d …’

private_key = ‘e6238b0de3cdf19c7861f8e8f5d137ce7113ac1e884b191a14bbb2 …’

api_client = shrimpy.ShrimpyApiClient (public_key, private_key)

raw_token = api_client.get_token ()

client = shrimpy.ShrimpyWsClient (error_handler, raw_token [‘token’])

Para criar o cliente restante, precisamos passar as chaves pública e privada. Este cliente é então usado para solicitar um token para o cliente websocket.

Assim que o token for recebido, basta passá-lo para o construtor para que o cliente websocket crie o cliente websocket.

Conectar

Antes de se inscrever em canais de websocket específicos para cada par de negociação, vá em frente e conecte-se ao stream de websocket. Isso exigirá o uso do token único recuperado na etapa anterior. Se você precisar criar outro cliente por qualquer motivo, precisará mais uma vez obter um token e passá-lo para o construtor do cliente.

client.connect ()

Nota: Tokens só podem ser usados UM TEMPO. Depois que o cliente for criado usando o token, você precisará solicitar um novo token sempre que criar um novo cliente. Vocês NÃO precisa solicitar um token para se inscrever em canais de websocket. Somente para a conexão do cliente.

Se inscrever

Agora que estamos conectados ao websocket, podemos assinar cada um dos pares de troca que queremos usar para nosso script de arbitragem. Isso pode ser feito facilmente da seguinte maneira.

trocas = ["bittrex", "binance", "kucoin"]

par = "btc-usdt"

para troca em trocas:

subscribe_data = {

"modelo": "se inscrever",

"intercâmbio": intercâmbio,

"par": par,

"canal": "bbo" }

client.subscribe (subscribe_data, handler)

Isso assinará o par BTC-USDT para Bittrex, Binance e KuCoin. Em cada tick, seremos capazes de dizer se há oportunidades de arbitragem nessas trocas para este par de ativos.

Nota: Shrimpy APIs permitem 100 assinaturas de websocket por cliente e até 10 clientes por IP. Isso significa que você pode se inscrever em até 1.000 pares de negociação nas mais de 17 bolsas diferentes que apoiamos.

desconectar

Depois de terminar a coleta de dados, você pode se desconectar usando o seguinte comando simples.

client.disconnect ()

É isso! Tudo que você precisa saber para começar a construir seu fluxo de dados de arbitragem.

Tudo em um script

Agora que detalhamos o roteiro passo a passo, vamos dar uma olhada em toda a obra-prima. O que parece ser um único script que podemos executar.

# import a biblioteca Shrimpy para websockets de troca de criptografia

importar camarão

# um exemplo de manipulador de erros, ele simplesmente imprime o erro de entrada

def error_handler (err):

imprimir (errar)

intercâmbios_bbo = {}

# define o manipulador para gerenciar o fluxo de saída

manipulador de def (msg):

bid_price = msg [‘conteúdo’] [‘lances’] [0] [‘preço’]

ask_price = msg [‘content’] [‘pede’] [0] [‘preço’]

exchangeges_bbo [msg [‘exchange’]] = {‘bid’: float (bid_price), ‘ask’: float (ask_price)}

best_bid = 0,0

best_ask = 100000,0

best_bid_exchange = ”

best_ask_exchange = ”

para chave, valor em exchangeges_bbo.items ():

se valor [‘lance’] > best_bid:

best_bid = valor [‘lance’]

best_bid_exchange = key

if value [‘ask’] < best_ask:

best_ask = value [‘perguntar’]

best_ask_exchange = chave

se best_bid > best_ask:

imprimir("vender em " + best_bid_exchange + " pra " + str (best_bid))

imprimir("comprar em " + best_ask_exchange + " pra " + str (best_ask))

outro:

imprimir("Sem Arbitragem Disponível")

# insira sua chave pública e privada Shrimpy

public_key = ‘6d73c2464a71b94a81aa7b13d …’

private_key = ‘e6238b0de3cdf19c7861f8e8f5d137ce7113ac1e884b191a14bbb2 …’

# criar o cliente de websocket Shrimpy

api_client = shrimpy.ShrimpyApiClient (public_key, private_key)

raw_token = api_client.get_token ()

client = shrimpy.ShrimpyWsClient (error_handler, raw_token [‘token’])

# conecte-se ao websocket Shrimpy e inscreva-se

client.connect ()

# selecionar trocas para arbitragem

trocas = ["bittrex", "binance", "kucoin"]

par = "btc-usdt"

# inscreva-se nos websockets para o par fornecido em cada troca

para troca em trocas:

subscribe_data = {

"modelo": "se inscrever",

"intercâmbio": intercâmbio,

"par": par,

"canal": "bbo" }

client.subscribe (subscribe_data, handler)

A execução deste script iniciará imediatamente a impressão das oportunidades de arbitragem para este par de ativos nas bolsas especificadas.

Para expandir a funcionalidade deste script, algumas opções para as próximas etapas seriam avaliar como colocar ordens na bolsa, aproveitando essas oportunidades de negociação.

Propósito

O objetivo deste artigo não é construir um algoritmo de negociação de arbitragem robusto inteiro para você. É para mostrar o início de algo que você pode expandir e crescer. Há muito espaço para melhorias.

Em alguns minutos, é possível criar recursos incríveis usando as APIs de desenvolvedor Shrimpy. Em vez de gastar horas brincando com APIs de troca, você pode obter um comportamento consistente em todas as principais bolsas desenvolvendo com o APIs de criptografia universal.

Bots de troca por criptomoeda

Os desenvolvedores podem usar esses scripts simples como base para bots de arbitragem de criptomoeda. Ao selecionar os ativos para arbitragem, descubra instantaneamente as oportunidades de mercado.

Não pode ser mais fácil.

O Shrimpy integra mais de 17 bolsas diferentes, o que torna o processo de desenvolvimento perfeito em todas as bolsas. Sem comportamentos únicos ou erros estranhos. A consistência é construída na plataforma.

Saiba mais sobre tudo que Shrimpy oferece por juntando-se ao nosso telegrama.

Para acessar as bibliotecas Python e Node completas, siga estes links:

Pitão

Confira alguns de nossos tutoriais em vídeo mais recentes sobre como construir um bot de comércio de criptografia!

Não hesite em entrar em contato se quiser compartilhar com nossa equipe o que você está construindo!

Sobre Shrimpy

Shrimpy lidera o mercado como o principal aplicativo de gerenciamento de portfólio. Os usuários podem configurar um portfólio de criptografia customizado e implementar uma estratégia de rebalanceamento passivo, eliminando o incômodo de ter que negociar criptografado ativamente.

Aplicativo da Web Shrimpy: Shrimpy – Gerenciamento de portfólio de criptomoedas

API de negociação do desenvolvedor do Shrimpy é uma forma unificada de integrar a funcionalidade de negociação em todas as principais bolsas. Colete dados históricos do mercado, acesse websockets em tempo real, execute estratégias de negociação avançadas e gerencie um número ilimitado de usuários.

API Shrimpy Crypto Trading: Shrimpy | Crypto Trading APIs para desenvolvedores

Não se esqueça de nos seguir no Twitter e o Facebook para atualizações e faça perguntas à nossa incrível comunidade ativa no Telegrama.

A equipe Shrimpy

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me