Una strategia diffusa basata sull'autocorrelazione
Una curiosa anomalia dei mercati azionari è che gli investitori tendono a reagire in modo eccessivo alle notizie. Dopo forti salti, verso l’alto o verso il basso, i prezzi tendono a invertire la rotta. Questo fenomeno è descritto come mean reversion dei prezzi azionari: dopo grandi movimenti, i prezzi tendono a rimbalzare, o a tornare, verso livelli precedenti, su orizzonti temporali di circa una settimana. In termini più matematici, la mean reversion implica che i rendimenti azionari siano negativamente autocorrelati.
Questa semplice idea è in realtà alla base di una strategia molto diffusa tra gli hedge fund. Se vuoi saperne di più su questa strategia (anche se non è una lettura necessaria per il resto del corso), dai un’occhiata qui.
Esaminerai l’autocorrelazione dei rendimenti settimanali del titolo MSFT dal 2012 al 2017. Partirai da un DataFrame MSFT con prezzi giornalieri. Usa il metodo .resample() per ottenere i prezzi settimanali e poi calcola i rendimenti a partire dai prezzi. Usa il metodo di pandas .autocorr() per ottenere l’autocorrelazione e mostrare che è negativa. Nota che il metodo .autocorr() funziona solo sulle Series, non sui DataFrame (anche se hanno una sola colonna), quindi dovrai selezionare la colonna nel DataFrame.
Questo esercizio fa parte del corso
Analisi delle serie temporali in Python
Istruzioni dell'esercizio
- Usa il metodo
.resample()conrule='W'seguito dalla funzione.last()per convertire i dati giornalieri in dati settimanali. - Crea un nuovo DataFrame,
returns, con le variazioni percentuali dei prezzi settimanali usando il metodo.pct_change(). - Calcola l’autocorrelazione usando il metodo
.autocorr()sulla serie dei prezzi di chiusura rettificati, che è la colonna'Adj Close'nel DataFramereturns.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# Convert the daily data to weekly data
MSFT = MSFT.resample(___).___
# Compute the percentage change of prices
returns = MSFT.___
# Compute and print the autocorrelation of returns
autocorrelation = returns[___].___
print("The autocorrelation of weekly returns is %4.2f" %(autocorrelation))