Em artigos anteriores, discutimos um fenômeno comum no mercado de moedas digitais: a maioria das moedas digitais, especialmente aquelas que seguem as flutuações de preços do Bitcoin e Ethereum, muitas vezes mostram uma tendência de subir e cair juntas. Este fenômeno revela sua alta correlação com as moedas convencionais. No entanto, o grau de correlação entre diferentes moedas digitais também varia. Então, como essa diferença de correlação afeta o desempenho do mercado de cada moeda? Neste artigo, usaremos o mercado de touros no segundo semestre de 2023 como um exemplo para explorar esta questão.
O mercado de moedas digitais é conhecido por sua volatilidade e incerteza. O Bitcoin e o Ethereum, como os dois gigantes do mercado, muitas vezes desempenham um papel de liderança nas tendências de preços. A maioria das moedas digitais pequenas ou emergentes, a fim de manter a competitividade do mercado e a atividade comercial, geralmente mantêm um certo grau de sincronização de preços com essas moedas tradicionais, especialmente as moedas feitas por partes do projeto. Esta sincronicidade reflete as expectativas psicológicas e as estratégias de negociação dos participantes do mercado, que são considerações importantes na concepção de estratégias quantitativas de negociação.
No campo da negociação quantitativa, a medição da correlação é alcançada por meio de métodos estatísticos. A medida mais comumente usada é o coeficiente de correlação de Pearson, que mede o grau de correlação linear entre duas variáveis.
O intervalo do coeficiente de correlação de Pearson (denotado como r) é de -1 a +1, onde +1 indica uma correlação positiva perfeita, -1 indica uma correlação negativa perfeita e 0 indica nenhuma relação linear.
Entre eles,esão os valores observados de duas variáveis aleatórias,eOs valores de correlação são os valores médios destas duas variáveis aleatórias, respectivamente.
Este artigo coletou os dados da linha K de 4h para todo o ano de 2023 da Binance, selecionando 144 moedas que foram listadas em 1o de janeiro.
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)
Depois de normalizar os dados primeiro, nós calculamos o índice de flutuações médias de preços. Pode-se ver que há duas tendências de mercado em 2023. Um é um aumento significativo no início do ano, e o outro é um grande aumento a partir de outubro.
df_norm = df_close/df_close.fillna(method='bfill').iloc[0] #Normalization
total_index = df_norm.mean(axis=1)
total_index.plot(figsize=(15,6),grid=True);
Panda vem com um cálculo de correlação embutido. A correlação mais fraca com o preço do BTC é mostrada na figura a seguir. A maioria das moedas tem uma correlação positiva, o que significa que seguem o preço do BTC. No entanto, algumas moedas têm uma correlação negativa, o que é considerado uma anomalia nas tendências do mercado de moedas digitais.
corr_symbols = df_norm.corrwith(df_norm.BTC).sort_values().index
Aqui, as moedas são vagamente divididas em dois grupos. O primeiro grupo consiste em 40 moedas mais correlacionadas com o preço do BTC, e o segundo grupo inclui as menos relacionadas com o preço do BTC. Subtraindo o índice do segundo grupo do primeiro, ele representa ir longo no primeiro grupo enquanto curta o segundo. Desta forma, podemos calcular uma relação entre as flutuações de preços e a correlação do BTC. Aqui está como você faz isso junto com os resultados:
(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 uma correlação mais forte com o preço do BTC têm melhores aumentos, e curto de moedas com baixa correlação também desempenhou um bom papel de cobertura. A imprecisão aqui é que os dados futuros foram usados ao calcular a correlação. Abaixo, dividimos os dados em dois grupos: um grupo calcula a correlação, e outro calcula o retorno após a cobertura. O resultado é mostrado na figura a seguir, e a conclusão permanece inalterada.
Bitcoin e Ethereum, como líderes de mercado, muitas vezes têm um enorme impacto nas tendências gerais do mercado. Quando essas criptomoedas aumentam de preço, o sentimento do mercado geralmente se torna otimista e muitos investidores tendem a seguir essa tendência. Os investidores podem ver isso como um sinal de um aumento geral do mercado e começar a comprar outras moedas. Devido ao comportamento coletivo dos participantes do mercado, as moedas altamente correlacionadas com as principais podem experimentar aumentos de preço semelhantes. Em tais momentos, as expectativas sobre as tendências de preços podem às vezes se tornar profecias auto-realizáveis. Pelo contrário, as moedas negativamente correlacionadas com o Bitcoin são únicas; seus fundamentos podem estar se deteriorando ou podem não estar mais à vista da corrente principal - pode até existir a situação sanguinária do Bitcoin onde os investidores os abandonam perseguindo aqueles capazes de acompanhar os preços crescentes.
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 discute o coeficiente de correlação de Pearson, revelando o grau de correlação entre diferentes moedas. O artigo demonstra como obter dados para calcular a correlação entre moedas e usar esses dados para avaliar as tendências do mercado.
Há muitas áreas onde as idéias deste artigo podem ser expandidas, como o cálculo de correlações de rolagem, o cálculo separado de correlações durante ascensões e quedas, etc., o que pode produzir muitas informações úteis.