mercoledì 8 gennaio 2025

Analisi di correlazione sulle crypto

Correlazione tra criptovalute: facciamo chiarezza

Da tempo sento parlare continuamente di correlazioni, spesso basate solo sull'osservazione dei grafici dei prezzi. Vorrei fare un po' di chiarezza su cosa sia realmente la correlazione e come interpretarla.

1️⃣ Prezzi e rendimenti
La correlazione non va calcolata sui prezzi, che non sono stazionari (cioè non hanno proprietà statistiche costanti nel tempo). In genere si utilizza la serie dei rendimenti, che offre un'approssimazione più affidabile per queste analisi, pur non essendo perfettamente stazionaria.

2️⃣ Che cos'è la correlazione
La correlazione è una misura della relazione lineare tra due variabili, con valori compresi tra -1 (relazione inversa perfetta) e +1 (relazione diretta perfetta). Valori vicini a 0 indicano un'assenza di relazione lineare.
Tuttavia, è importante ricordare che la correlazione è solo una misura descrittiva e non stabilisce causalità; relazioni spurie o coincidenze possono influire sui risultati.

3️⃣ Relazioni non lineari
La correlazione di Pearson cattura solo le relazioni lineari. Per analizzare relazioni non lineari, esistono altri strumenti come la correlazione di Spearman, di Kendall o metodi più avanzati basati su reti neurali o modelli statistici di dipendenza.

4️⃣ Correlazioni dinamiche
Le correlazioni non sono statiche, ma cambiano continuamente nel tempo. Ad esempio, durante ribassi generalizzati, è comune osservare un aumento delle correlazioni tra asset. Questo fenomeno, noto come contagio finanziario, riflette una maggiore sincronizzazione dei mercati dovuta a liquidazioni forzate o aumento dell'avversione al rischio. Tuttavia, non tutte le correlazioni diventano 1.

Ora vi spiego l'analisi che ho fatto in Python e i risultati ottenuti. 

 

 


Potrebbero esserci degli errori, se li trovate, segnalatemeli per favore. 

Ecco il Codice:

# Caricare i dati da yfinance
tickers = [
          'BTC-USD','ETH-USD', 'BNB-USD', 'SOL-USD', 'ADA-USD', 'TRX-USD', 'AVAX-USD', 'LINK-USD', 'BCH-USD', 'CRO-USD', 'KCS-USD',
           'NEAR-USD', 'ICP-USD', 'OP-USD', 'FTM-USD', 'DOGE-USD', 'SHIB-USD', 'FET-USD', 'STX4847-USD', 'DOT-USD',
           'KAS-USD', 'XTZ-USD', 'TON11419-USD', 'MANA-USD', 'XRP-USD', 'XLM-USD', 'HBAR-USD', 'LTC-USD', 'UNI7083-USD', 'CAKE-USD',
           'ETC-USD', 'SUI20947-USD', 'ARB11841-USD', 'APT21794-USD', 'PEPE24478-USD', 'DX-Y.NYB'
]

names = [
          'BTC','ETH', 'BNB', 'SOL', 'ADA', 'TRX', 'AVAX', 'LINK', 'BCH', 'CRO', 'KCS',
           'NEAR', 'ICP', 'OP', 'FTM', 'DOGE', 'SHIB', 'FET', 'STX', 'DOT',
           'KAS', 'XTZ', 'TON', 'MANA', 'XRP', 'XLM', 'HBAR', 'LTC', 'UNI', 'CAKE',
           'ETC', 'SUI', 'ARB', 'APT', 'PEPE', 'USD_Ix'
]
 

# Creare un dizionario per memorizzare i dati
data = {}

# Scaricare i dati e assegnarli i nomi
for ticker, name in zip(tickers, names):
    prices = yf.download(ticker, '2015-1-1')['Close']
    prices.index = prices.index.date
    prices = prices.fillna(method='ffill')
    data[name] = prices
 
# Creazione dataset
dataset = pd.concat([data[name] for name in names], axis=1)

dataset.columns = names
 
# Calcolo dei rendimenti
returns = dataset.pct_change().mul(100)
 
# Calcolo correlazione da data
data_corr = '2023-06-01'
data_corr = datetime.date.fromisoformat(data_corr) # Convert data_corr to datetime.date

returns_from = returns.loc[data_corr:]
returns_from.dropna(inplace=True)

correlations = returns_from.corr()

# Grafico
plt.figure(figsize=(18, 12))
sns.heatmap(round(correlations, 1), annot=True, cmap='coolwarm', vmin=-1, vmax=1)
plt.xticks(rotation=45, ha='right')  # Ruota le etichette delle colonne
plt.yticks(rotation=0)              # Etichette delle righe orizzontali
plt.title('Correlazioni lineari sui rendimenti dal 202x a oggi')
plt.show()
 
 
 
 

Nessun commento:

Posta un commento