Analisi delle performance degli asset con Python

Analisi delle performance degli asset con Python – parte 1

Sommario

Dopo aver introdotto la libreria Pandas di Python per l’analisi dei dati finanziari, in questo articolo descriviamo come usare un’altra utilissima libreria per implementare l’analisi delle performance degli asset con Python per le strategie di trading algoritmico. A tale scopo esaminiamo e analizziamo esempi e casi d’uso della libreria “ffn – Financial Functions” di Python. Questa libreria è stata creata da Philippe Morissette e rilasciata con licenza MIT. ed è consultabile su github (http://pmorissette.github.io/ffn/index.html)

La libreria offre molte funzioni per eseguire rapidamente l’analisi delle strategie di trading e delle serie storiche dei prezzi di asset finanziari. Possiamo gestire singole serie tramite la classe PerformanceStats o gestire più asset contemporaneamente tramite la classe GroupStats.

I dati

Iniziamo con il caso di un singolo asset/strategia e  vediamo alcuni esempi. Per prima cosa importiamo i moduli necessari.

				
					
import pandas as pd
import numpy as np
import ffn
				
			

Generiamo quindi una serie di dati di prestazioni casuali, che coprono un periodo di 1000 giorni. Iniziamo impostando il numero di giorni desiderato (cioè 1000), quindi usiamo la funzione randn di numpy per generare un array di 1000 numeri con un distribuzione normale. A questi numeri aggiungiamo un valore casuale scelto da un distribuzione uniforme con un valore massimo pari a e un valore minimo pari a 0, in modo da fornire una leggera distorsione verso l’alto alla serie di valori casuali. Questi valori rappresentano i rendimenti giornalieri di una ipotetica strategia di trading o dei prezzi di un ipotetico titolo azionario.

Creaiamo un dataframa con questi “rendimenti” e aggiungiamo una colonna  con la somma cumulativa di tali rendimenti, aggiungendo 100 per rappresentare il capitale iniziale. In questo modo rappresentiamo l’equity della strategia, cioè la quantità di capitale che abbiamo nel conto di trading.

La libreria ffn consente di scaricare direttamente i dati storici dei prezzi delle azioni da Yahoo Finance, ma in questo articolo usiamo dati casuali in prima istanza. Usiamo il download dei dati  in esempi successivi.

				
					
num_days = 1000
data = (np.random.randn(num_days) + np.random.uniform(low=0.0, high=0.2, size=num_days))
index = pd.date_range('01/01/2010', periods=num_days, freq='D')
data = pd.DataFrame(data, index=index, columns=['Returns'])
data['Equity'] = data.cumsum() + 100
data.iloc[0] = 100
				
			

L’analisi

La colonna “Equity” del dataframe è quella che ci interessa di più dato che rappresenta la curva di equity teorica del conto di trading. Iniziamo usando il metodo calc_stats su questi dati e assegnando i risultati alla variabile perf.

				
					
perf = data['Equity'].calc_stats()
				
			
Se osserviamo la vera natura della variabile perf tramite la verifica del suo tipo, possiamo vedere che è un oggetto ffn.core.PerformanceStats. In questo modo possiamo applicare a perf qualsiasi metodo dell’oggetto PerformanceStats.
				
					
print(type(perf))
				
			
				
					<class 'ffn.core.PerformanceStats'>
				
			

Possiamo quindi visualizzare la curva del patrimonio netto. Come abbiamo già visto con Pandas, in FFN è sufficiente chiamare la funzione plot().

				
					
perf.plot()
				
			
Analisi delle performance degli asset con Python

Otteniamo una rappresentazione visiva della curva di equity. 

La reportistica

Per produrre un report delle statistiche possiamo usare semplicemente il metodo  display() di ffn. Questo metodo stampa il seguente report di statistiche completo.

				
					
perf.display()
				
			
Analisi delle performance degli asset con Python

Vediamo che abbiamo un report di statistiche piuttosto completo: Sharpe Ratio, Calmar Ratio, Total Returns, CAGR, Max Drawdown, Periodic Returns e altro ancora… Permette di risparmiare molto tempo – se dovessimo calcolarli tutti da soli, potrebbe volerci parecchio tempo.

Il prossimo metodo dellla libreria ffn che potrebbe interessarci è la possibilità di rappresentare una tabella dei rendimenti mensili.

				
					
perf.display_monthly_returns()
				
			
Analisi delle performance degli asset con Python

La libreria ffn mette a disposizione una funzione per tracciare il drawdown della serie di dati con una singola riga di codice

				
					
ffn.to_drawdown_series(data['Equity']).plot(figsize=(15,7),grid=True)
				
			
Analisi-Performance-FFN-drawdown

Possiamo inoltre tracciare un istogramma dei rendimenti in modo semplice e rapido.

				
					
perf.plot_histogram()
				
			
Analisi-Performance-FFN-istogramma

Se vogliamo entrare in possesso del set di statistiche di analisi complete di cui sopra, ma questa volta in una serie Pandas, anziché stampata come tabella, possiamo usare il seguente comando.

				
					
print(perf.stats)
				
			
Analisi-Performance-FFN-Report-Completo

Questo oggetto Series è indicizzabile, proprio come qualsiasi altra serie Pandas. Possiamo quindi selezionare tutti gli elementi rilevanti di cui abbiamo bisogno  tramite la seguente sintassi, ad esempio se siamo interessati al Yearly Sharpe Ratio.

				
					
print(perf.stats['yearly_sharpe'])
				
			
				
					
“1.9283569892842471”
				
			
Infine, per l’oggetto PerformanceStats, possiamo estrarre la serie di Lookback Returns semplicemente come segue (anche questo può essere indicizzato in modo simile all’oggetto perf.stats menzionato sopra).
				
					
print(perf.display_lookback_returns())
				
			
Analisi-Performance-FFN-Report-Lookback

Nel prossimo articolo descriviamo come usare la libreria FFN per analizzare più serie di prezzi/strategie contemporaneamente  tramite l’oggetto GroupStats.

Codice completo

In questo articolo abbiamo descritto come implementare l’analisi delle performance degli asset con Python. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/AnalisiDatiFinanziari

Benvenuto su DataTrading!

Sono Gianluca, ingegnere software e data scientist. Sono appassionato di coding, finanza e trading. Leggi la mia storia.

Ho creato DataTrading per aiutare le altre persone ad utilizzare nuovi approcci e nuovi strumenti, ed applicarli correttamente al mondo del trading.

DataTrading vuole essere un punto di ritrovo per scambiare esperienze, opinioni ed idee.

SCRIVIMI SU TELEGRAM

Per informazioni, suggerimenti, collaborazioni...

Scroll to Top