
Em um artigo anterior, exploramos um fenômeno comum no mercado de criptomoedas: a maioria das criptomoedas, especialmente aquelas que seguem as flutuações de preço do Bitcoin e do Ethereum, geralmente mostram uma tendência de alta e queda juntas. Esse fenômeno revela sua alta correlação com as moedas tradicionais. No entanto, o grau de correlação entre diferentes criptomoedas varia. Então, como essa diferença na correlação afeta o desempenho de mercado de cada moeda? Neste artigo, exploraremos essa questão usando o mercado em alta no segundo semestre de 2023 como exemplo.
O mercado de criptomoedas é conhecido por sua volatilidade e incerteza. Bitcoin e Ethereum, como os dois gigantes do mercado, geralmente desempenham um papel de liderança nas tendências de preços. Para manter a competitividade do mercado e a atividade comercial, a maioria das moedas digitais pequenas ou emergentes tende a manter um certo grau de sincronização de preços com essas moedas tradicionais, especialmente as moedas criadas pelas partes do projeto. Essa sincronização reflete as expectativas psicológicas e as estratégias de negociação dos participantes do mercado, o que é uma consideração importante no design de estratégias de negociação quantitativas.
No campo da negociação quantitativa, a medição da correlação é obtida por meio de métodos estatísticos. A medida mais comumente usada é o coeficiente de correlação de Pearson, que mede o grau de associação linear entre duas variáveis. Aqui estão alguns conceitos básicos e métodos de cálculo:
O coeficiente de correlação de Pearson (denotado por \(r\)) varia de -1 a +1, onde +1 indica uma correlação positiva perfeita, -1 indica uma correlação negativa perfeita e 0 indica nenhuma correlação linear. O coeficiente é calculado da seguinte forma:
\(r = \frac{\sum_{i=1}^{n} (X_i - \bar{X})(Y_i - \bar{Y})}{\sqrt{\sum_{i=1}^{n} (X_i - \bar{X})^2} \sqrt{\sum_{i=1}^{n} (Y_i - \bar{Y})^2}}\)
Aqui, \(X_i\) e \(Y_i\) são os valores observados de duas variáveis aleatórias, e \(\bar{X}\) e \(\bar{Y}\) são as médias das duas variáveis aleatórias, respectivamente. Usando pacotes relacionados à computação científica Python, é muito conveniente calcular correlação.
Este artigo coleta dados da linha K de 4 horas da Binance para todo o ano de 2023 e seleciona 144 moedas listadas em 1º de janeiro. O código de dados de download específico é o seguinte:
import requests
from datetime import date,datetime
import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ticker = requests.get('https://fapi.binance.com/fapi/v1/ticker/24hr')
ticker = ticker.json()
sort_symbols = [k['symbol'][:-4] for k in sorted(ticker, key=lambda x :-float(x['quoteVolume'])) if k['symbol'][-4:] == 'USDT']
def GetKlines(symbol='BTCUSDT',start='2020-8-10',end='2023-8-10',period='1h',base='fapi',v = 'v1'):
Klines = []
start_time = int(time.mktime(datetime.strptime(start, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000
end_time = min(int(time.mktime(datetime.strptime(end, "%Y-%m-%d").timetuple()))*1000 + 8*60*60*1000,time.time()*1000)
intervel_map = {'m':60*1000,'h':60*60*1000,'d':24*60*60*1000}
while start_time < end_time:
time.sleep(0.5)
mid_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]]
url = 'https://'+base+'.binance.com/'+base+'/'+v+'/klines?symbol=%s&interval=%s&startTime=%s&endTime=%s&limit=1000'%(symbol,period,start_time,mid_time)
res = requests.get(url)
res_list = res.json()
if type(res_list) == list and len(res_list) > 0:
start_time = res_list[-1][0]+int(period[:-1])*intervel_map[period[-1]]
Klines += res_list
if type(res_list) == list and len(res_list) == 0:
start_time = start_time+1000*int(period[:-1])*intervel_map[period[-1]]
if mid_time >= end_time:
break
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')
return df
start_date = '2023-01-01'
end_date = '2023-11-16'
period = '4h'
df_dict = {}
for symbol in sort_symbols:
print(symbol)
df_s = GetKlines(symbol=symbol+'USDT',start=start_date,end=end_date,period=period)
if not df_s.empty:
df_dict[symbol] = df_s
df_close = pd.DataFrame(index=pd.date_range(start=start_date, end=end_date, freq=period),columns=df_dict.keys())
for symbol in symbols:
df_s = df_dict[symbol]
df_close[symbol] = df_s.close
df_close = df_close.dropna(how='any',axis=1)
Primeiro, após normalizar os dados, calculamos o índice médio de aumento e diminuição de preços. Podemos ver que há duas ondas de condições de mercado em 2023, uma das quais é um grande aumento no início do ano, e a outra é uma grande aumento a partir de outubro. O ponto alto do índice.
df_norm = df_close/df_close.fillna(method='bfill').iloc[0] #归一化
total_index = df_norm.mean(axis=1)
total_index.plot(figsize=(15,6),grid=True);

O Pandas vem com cálculo de correlação integrado. A correlação com o preço do BTC é mostrada na figura abaixo. A maioria das moedas tem correlação positiva, o que significa que elas seguem o preço do BTC, enquanto algumas moedas têm correlação negativa. Isto é considerada uma anomalia no mercado de moeda digital.

corr_symbols = df_norm.corrwith(df_norm.BTC).sort_values().index
Aqui, dividimos vagamente as moedas em dois grupos. O primeiro grupo consiste em 40 moedas que são mais correlacionadas com os preços do BTC, e o segundo grupo consiste em moedas que são menos correlacionadas com os preços do BTC. O índice dos dois grupos representa a média de longo prazo posição no primeiro grupo e posição curta no segundo grupo. A relação entre flutuações de preço e a correlação com BTC pode ser calculada. O código e os resultados são os seguintes:
(df_norm[corr_symbols[-40:]].mean(axis=1)-df_norm[corr_symbols[:40]].mean(axis=1)).plot(figsize=(15,6),grid=True);

Os resultados mostram que as moedas com maior correlação com os preços do BTC têm melhor crescimento, e vender a descoberto moedas com baixa correlação também desempenha um bom papel de hedge. A parte imprecisa aqui é que dados futuros são usados para calcular a correlação. Em seguida, os dados são divididos em dois grupos, um para calcular a correlação e o outro para calcular o retorno após o hedge. Os resultados são mostrados na figura abaixo, e a conclusão continua a mesma.
Como líderes de mercado, os movimentos de preços do Bitcoin e do Ethereum geralmente têm um grande impacto em todo o mercado. Quando os preços desses bitcoins sobem, o sentimento do mercado geralmente se torna otimista e muitos investidores tendem a seguir a tendência do mercado. Os investidores podem ver isso como um sinal de que todo o mercado está subindo e começar a comprar outras moedas. Moedas altamente correlacionadas às principais moedas podem sofrer aumentos de preço semelhantes devido ao comportamento coletivo dos participantes do mercado. Neste momento, as expectativas do mercado quanto às tendências de preços podem, às vezes, se tornar uma profecia autorrealizável. As moedas com correlação negativa com o Bitcoin são únicas. É possível que seus fundamentos tenham se deteriorado ou que não estejam mais na mira dos investidores tradicionais. Pode até haver um mercado sugador de sangue para o Bitcoin - o mercado os abandonou. Eles persiga as moedas que podem acompanhar os ganhos.
corr_symbols = (df_norm.iloc[:1500].corrwith(df_norm.BTC.iloc[:1500])-df_norm.iloc[:1500].corrwith(total_index[:1500])).sort_values().index

Este artigo usa o coeficiente de correlação de Pearson para revelar o grau de correlação entre moedas. O artigo mostra como obter dados para calcular correlações entre moedas e usar esses dados para avaliar tendências de mercado. Ela revela que a sincronização das flutuações de preços no mercado de moeda digital não é apenas um reflexo da psicologia e estratégia de mercado, mas também pode ser quantificada e prevista por meio de métodos científicos. Isto é especialmente importante para o design de estratégias de negociação quantitativa.
Há muitas áreas onde as ideias neste artigo podem ser expandidas, como calcular correlações contínuas, calcular as correlações durante aumentos e diminuições separadamente e assim por diante, para analisar informações mais eficazes.