Análise de arbitragem de futuros e de retorno do spread spot em contratos de criptomoedas com margem

Autora:Ninabadass, Criado: 2022-04-12 10:06:51, Atualizado: 2022-04-13 09:20:56

Arbitragem de retorno de futuros e spread spot

A última vez, introduzimos a arbitragem de taxas de financiamento por contrato perpétuo (https://www.fmz.com/digest-topic/6381No caso de um grande prêmio negativo, ele também pode fazer dinheiro e prêmio, para retornar lucro. no mercado de touros em agosto e setembro, a taxa anualizada uma vez atingiu 100%, por isso é uma estratégia relativamente popular.

Na arbitragem de criptomoedas de baixo risco, há outro tipo de estratégia que não foi introduzida - a arbitragem de retorno de base.

1.Existe um diferencial de preço entre o contrato de futuros e o ponto. A característica do contrato de entrega é que ele não é liquidado no preço ao instante até a data de entrega. Portanto, quando a data de entrega está longe, a entrega do contrato é facilmente afetada pelo sentimento do mercado. Se o mercado funcionar bem, mais pessoas serão otimistas sobre o preço futuro, então haverá um prêmio positivo. Quando há uma queda acentuada, muitas vezes há um prêmio negativo. Mas, em geral, a entrega do contrato não se desviará muito do ponto e sempre retornará no dia da entrega.

2.Existem contratos de entrega baseados em moeda. Por exemplo, a Binance tem contratos de entrega trimestrais e trimestrais atuais. Há uma grande diferença entre um contrato de entrega com margem de criptomoeda e um contrato perpétuo com margem de USDT. A liquidação com margem de criptomoeda usa moeda, e o preço da moeda está constantemente mudando, o que será introduzido em detalhes a seguir.

O código neste artigo pode ser executado diretamente, mas devido a razões de rede, a parte de rastreamento de dados requer acesso científico à Internet, é melhor usar seu próprio computador para executar, ou usar o Google colab.

O cálculo dos lucros e prejuízos dos contratos de criptomoedas

De acordo com a documentação da Binance, receita = direção de negociação × volume executado × múltiplo do contrato × (1 / preço de abertura - 1 / preço de fechamento) = valor da posição × (1 / preço de abertura - 1 / preço de fechamento); quando você faz curto, o valor da posição é negativo.

Por meio de cálculo e análise, os lucros de posições curtas ou longas com margem de criptomoeda são não-lineares e medidos por lucros de moeda; se houver perda ao fazer uma posição curta, apenas perca no máximo o valor da moeda de uma posição, mas não há limite superior sobre o valor da moeda ganha; se houver lucro em fazer uma posição longa, apenas faça lucro, no máximo, o valor da moeda de uma posição, e não há limite superior sobre as perdas. Parece que é mais econômico fazer curto, mas o lucro de fazer curto diminuirá à medida que o preço diminui, o que não é tão alto calculado em USD. Se você calcular o lucro do USD, a situação é exatamente o oposto. Você pode ganhar no máximo um valor de perda fazendo uma posição curta, e a moeda não tem limite superior.

Ao mesmo tempo, ao negociar contratos de criptomoedas, você precisa manter moedas originalmente. Se você considerar o USD como a moeda de cotação, então o valor total da conta = (montante da moeda da conta + valor da posição × (1 / preço aberto - 1 / preço de fechamento)) × preço ao instante. Se o valor da posição = - quantidade de moeda na conta × preço aberto, ou seja, usando alavancagem de uma vez para fazer curto, e o valor total da conta = quantidade de moeda na conta × preço aberto × preço ao instante de posição fechada / preço ao instante. Considerando que o preço do contrato de entrega eventualmente retornará ao preço ao instante, no último, o valor total da conta = quantidade de moeda na conta × preço aberto. Ou seja, o valor da conta será bloqueado no preço aberto e não mudará com o preço atual. De acordo com a análise, se o preço subir infinitamente, a posição não será ainda liquidada. Este é o princípio da alavancagem. Fazer um curto com o seu futuro é equivalente a vender a moeda ao preço ao instante.

Se a moeda da conta de futuros for comprada no mercado à vista, entãoo valor total da conta = montante da moeda na conta × (preço de abertura - preço de compra spot)A diferença de preço é o lucro da arbitragem. Este é o princípio da arbitragem de futuros.

Claro, na maioria dos casos, não temos que esperar até a data de entrega. se o spread de preço diminuir, podemos fechar a posição com antecedência.o valor total da conta = valor spot × (ratio de futuros/spot do período de abertura/ratio de futuros/spot do período de encerramento - 1)Desde que a relação de preços futuros e spot no período de abertura seja maior do que no período de encerramento, e possa cobrir a taxa, e então haverá lucros.

Em [15]: Pedidos de importação a partir da data-hora data de importação, data-hora Tempo de importação importar pandas como pd importar numpy como np importar matplotlib.pyplot como plt % matplotlib em linha Em [96]: Valor = 100100 #valor de posição Open_price = 10000 #preço da posição aberta 10000USD long_profit_list = [] short_profit_list = [] long_usdt_profit_list = [] short_usdt_profit_list = [] close_range = range ((1000,30000,10) para p em close_range: lucro = valor(1/open_price-1/p) long_profit_list.append (lucro) long_usdt_profit_list.append(lucrop) short_profit_list.append ((-profit)) short_usdt_profit_list.append(-lucrop) Em [97]: # ganhos cripto-marginais plt.figure ((figsize=(12, 7), dpi=80) plt.plot ((close_range,long_profit_list,label=long); plt.plot ((close_range,short_profit_list); plt.plot ((close_range,[1]*len ((close_range),r); plt.plot ((close_range,[-1]*len ((close_range),g); Plt.ylabel ((lucro); plt.xlabel ((preço de fechamento); Plt.grid (Verdadeiro) plt.annotate ((Short profit, xy=(4500, 1.5), xytext=(7000, 2.5),arrowprops=dict(facecolor=black)); plt.annotate ((Long profit, xy=(4500, -1.5), xytext=(7000, -2.5), arrowprops=dict(facecolor=black));
plt.annotate (( Open price, xy=(10000, 0), xytext=(13000, 2.5),arrowprops=dict ((facecolor=black)); Fora[97]:imgEm [101]: # lucro calculado em USD plt.figure ((figsize=(12, 7), dpi=80) plt.plot ((close_range,long_usdt_profit_list,label=long); Plt.plot ((close_range,short_usdt_profit_list);

Plt.ylabel ((lucro); plt.xlabel ((preço de fechamento); plt.annotate ((Short profit, xy=(5000, 5000), xytext=(7000, 10000),arrowprops=dict ((facecolor=black)); plt.annotate ((Long profit, xy=(5000, -5000), xytext=(7000, -10000),arrowprops=dict(facecolor=black));
Plt.grid (Verdadeiro) Fora [101]:img

Procedimentos de arbitragem de futuros e spot

1.Monitorização em tempo real das alterações nos futuros e no prémio spot. Após atingir o valor definido, o símbolo da moeda spot é comprado e imediatamente transferido para os futuros para fazer short. O valor do short é o montante spot × o preço de abertura. 2.Esperar o reembolso do prémio e, após atingir o valor fixado, fechar a posição de futuros, transferir para o local de venda e obter lucro.

Detalhes

1.Os prémios em diferentes datas de entrega têm significados diferentes. Por exemplo, se houver um prémio trimestral de 5% e um prémio trimestral de 5%, o prémio trimestral será definitivamente preferido para arbitragem. A taxa anuada correspondente deve ser calculada com base na data de entrega. 2.É necessário considerar a taxa de serviço, que inclui a compra e venda a vista, bem como as posições abertas e fechadas de futuros, que contam, no total, com 4 operações. 3.As negociações de futuros e de spot devem ser efectuadas ao mesmo tempo para fixar o prémio.Para evitar choques de mercado, as posições podem ser reduzidas em várias negociações. 4.Quando há moeda na conta de futuros, pode-se fazer arbitragem de posição aberta simultânea sem esperar pela transferência.Da mesma forma, a moeda spot não precisa ser transferida completamente para futuros, o que é conveniente para fechar posições simultaneamente.5.Tomonitorar todos os pares de negociação, o que tiver uma chance, e qual deles tem um prêmio maior. 6.A escolha das posições de encerramento é muito importante.Pode-se fechar posições por níveis; pode-se utilizar um prémio zero ou um prémio negativo para fechar todas.

Histórico de prémios

Tomando os dados de entrega da Binance como exemplo; existem 9 pares de negociação, a saber, BTCUSDT, ETHUSDT, ADAUSDT, LINKUSDT, BCHUSDT, DOTUSDT, XRPUSDT, LTCUSDT e BNBUSDT, que podem ser usados para negociação de arbitragem.

Desde o início deste ano (2021), o ETH começou a partir de 600U, e subiu para um máximo de 4000U em maio, depois caiu para 2000U em junho e julho, e recentemente voltou para 3500U, o que significa que o mercado está em expansão. Considere os três contratos de entrega com datas de expiração de 210625, 210924 e 211231. O prêmio de 210625 permanece em 8% por um longo tempo; se começar a arbitragem em 10% e fechar posições em 6%, há cerca de 4 oportunidades em 4 meses, e a taxa anualizada será superior a 50%. 210924 tem um prêmio, máximo, acima de 15%, que agora retornou. 211231, que ainda tem muito tempo antes da data de expiração, tem um prêmio máximo de 5%.

Os leitores podem mudar o par de negociação por si mesmos; a situação é basicamente semelhante; em geral, é um fuso horário bastante bom de janeiro a abril deste ano. Em [103]: # # o par de negociação atual Informações = solicitações.get(https://dapi.binance.com/dapi/v1/exchangeInfo’) símbolos = [s[symbol] para s em Info.json() [symbols]] Em [106]: símbolos_nq = lista ((filtro)) lambda x:x.split (() [-1]==211231, símbolos)) #contrato do próximo trimestre símbolos_q = lista(filtro(lambda x:x.split() [-1]==210924, símbolos)) #contrato trimestral símbolos_s = [s.split(_) [0]+T para s em símbolos_nq] #pares de negociação spot Em [108]: ,.join ((simbolos_s) Fora [108]: Em [109]: def GetKlines ((símbolo=BTCUSDT,start=2020-8-10,end=2021-8-10,periodo=1h,base=fapi,v = v1): Cravos = [] start_time = int(time.mktime(datetime.strptime(start, %Y-%m-%d).timetuple()))1000 + 860601000 end_time = int(time.mktime(datetime.strptime(end, %Y-%m-%d).timetuple()))1000 + 860601000 Interval_map = {m:601000,h:60601000,d:2460601000} enquanto start_time < end_time: tempo de meia-hora = min(tempo de início+1000int ((período[:-1])intervalo_map[período[-1], final_tempo] url = https://+base+.binance.com/+base+/+v+/klines?simbolo=%s&interval=%s&startTime=%s&endTime=%s&limit=1000%(simbolo,período,start_time,mid_time) res = solicitações.get ((url)) res_list = res.json() se tipo ((res_list) == lista e len ((res_list) > 0: start_time = res_list[-1][0] Klines += res_list elif tipo ((res_list) == lista: tempo de início = tempo de início+1000int ((período[:-1])intervalo_mapa[período[-1]] Outros: Impressão (url) df = pd.DataFrame ((Klines,columns=[time,open,high,low,close,amount,end_time,volume,count,buy_amount,buy_volume,null]).astype ((float) df.index = pd.to_datetime ((df.time,unit=ms) retorno df Em [110]: símbolo = ETH df_s = GetKlines ((simbolo=simbolo+USDT,start=2020-12-26,end=2021-9-15,periodo=1h,base=api,v=v3) df_nq = GetKlines ((simbolo=simbolo+USD_211231,start=2021-6-26,end=2021-9-15,periodo=1h,base=dapi) df_q = GetKlines ((simbolo=simbolo+USD_210924,start=2021-3-26,end=2021-9-15,periodo=1h,base=dapi) df_lq = GetKlines ((simbolo=simbolo+USD_210625,start=2020-12-26,end=2021-6-24,periodo=1h,base=dapi) Em [128]: #preço spot df_s.close.dropna().plot(figsize=(16,6),grid=True); Fora[128]:imgEm [139]: Prémio de contrato do último trimestre (100(df_lq.close-df_s.close) /df_s.close.dropna (().plot ((figsize=(16,6), grid=True); Prémio contratual trimestral (100(df_q.close-df_s.close) /df_s.close).dropna().plot(figsize=(16,6), grid=True); Prémio do contrato do próximo trimestre (100*(df_nq.close-df_s.close) /df_s.close).dropna().plot(figsize=(16,6),grid=True); Fora [1]:img

# # a oportunidade de negociação atual Para o contrato 210924 vai expirar, aqui observamos principalmente contrato 211231, que ainda tem três meses para expirar. Por enquanto, o prêmio básico é de cerca de 3%, e o prêmio mais alto é de 5%. Poderíamos dizer que a oportunidade não é muito promissora. No entanto, após o contrato 210924 expirar, um novo contrato do próximo trimestre será gerado, e haverá 6 meses para entregar, o que significa que ainda haverá muitas oportunidades.

Em [143]: df_all = pd.DataFrame ((index=pd.date_range ((start=2021-6-26, end=2021-9-16, freq=1H), colunas=simbolos_s) para i no intervalo ((len ((simbolos_nq)): O número de veículos deve ser indicado no anexo I. símbolo_s = símbolos_s[i] df_s = GetKlines ((simbolo=simbolo_s,start=2021-6-26,end=2021-9-16,período=1h,base=api,v=v3) df_nq = GetKlines ((symbol=symbol_nq,start=2021-6-26,end=2021-9-16,periodo=1h,base=dapi) df_all[symbol_s] = (100*(df_nq.close-df_s.close) /df_s.close).drop_duplicates() Em [144]: df_all.dropna().plot(figsize=(16,10),grid=Verdadeiro); Fora[144]:img

Conclusão

Este artigo introduz principalmente a negociação de arbitragem usando o retorno do spread entre o contrato de entrega e o local.

1. Baixo risco: uma vez que a realização de uma posição curta com alavancagem de 1x não será liquidada, não há risco mesmo que o prémio se expanda, e trata-se de uma arbitragem quase livre de risco. 2.Alta segurança. O preço do contrato de entrega regressará sempre ao local. 3.O princípio de operação é simples e pode negociar com vários símbolos de moeda, o que é adequado para fundos relativamente grandes que buscam lucros estáveis. 4.O lucro não é baixo e, por vezes, haverá um prémio negativo profundo.Se tiver sorte e dominar o ritmo, o lucro é considerável.

Principais riscos: 1.Se o prémio aumentar durante muito tempo, haverá uma perda flutuante durante muito tempo.Neste momento, o encerramento das posições e a saída do mercado resultarão numa perda real. 2.Falha da API da plataforma; comércio de uma só perna. 3.A liquidez dos contratos de negociação é fraca e existem demasiadas estratégias do mesmo tipo, o que resulta num ponto de deslizamento excessivo e em perdas de lucros.


Mais.