In questo articolo descriviamo come usare l’API di Alpha Vantage con Backtrader per ottenere le serie storiche dei dati finanziari da usare nelle strategie di trading algoritmico.
I dati gratuiti e ben mantenuti di fine giornata (EOD) sulle azioni sembrano essere sempre più difficili da ottenere. Quandl è stata una grande risorsa per i dati EOD gratuiti. Tuttavia, sembra che stia lentamente cambiando. Ora il Wiki EOD incentrato sugli Stati Uniti non è più supportato attivamente. Se vai alla pagina Quandl EOD Wiki, vedrai un banner che recita:
Dall’11 aprile 2018 questo feed di dati non è più supportato attivamente dalla comunità Quandl. Continueremo a ospitare questo feed di dati su Quandl, ma non consigliamo di utilizzarlo per investimenti o analisi.
Ovviamente non possiamo aspettarci che tutto sia gratuito e disponibile facilmente ai trader retail, ma negli ultimi anni i dati EOD non sono stati così difficili da ottenere. Yahoo, Google, Quandl hanno fornito dati gratuiti di qualità in un determinato momento. Il panorama sembra cambiare e nel caso di Quandl, anche se siamo disposti a pagare, la maggior parte dei dati premium è in realtà piuttosto costosa da acquistare per il trader retail. Quindi cosa possiamo fare adesso?
Alpha Vantage
Per fortuna non tutto è perduto. Abbiamo ancora altre opzioni a nostra disposizione se siamo disposti a studiare e lavorare con altre API. Ad esempio, molti broker e/o fornitori di spread dispongono di API che possono essere usate dai loro clienti. Ci sono anche alcuni fornitori di dati indipendenti come Alpha Vantage che forniscono eccellenti servizi gratuiti ed è proprio su Alpha Vantage che ci concentriamo in questo articolo. Alpha Vantange si definisce come:
Composto da una comunità affiatata di ricercatori, ingegneri e professionisti, Alpha Vantage Inc. è un fornitore leader di API gratuite per i dati storici e in tempo reale su azioni, valute fisiche e valute digitali/crypto. Il nostro successo è guidato da una ricerca rigorosa, da una tecnologia all’avanguardia e da un’attenzione disciplinata alla democratizzazione dell’accesso ai dati.
Fonte: https://www.alphavantage.co/
Sembra interessante! Non solo abbiamo i dati EOD che stiamo cercando, ma fornisce anche l’accesso ai dati in tempo reale insieme a una serie di altre risorse e indicatori tecnici! Quindi diamo un’occhiata a come utilizzare l’API di Alpha Vantage per scaricare e salvare i dati EOD.
Ottenere una chiave API
Per scaricare i dati storici delle azioni dobbiamo usare un’API. Per avere accesso al servizio è necessario registrarsi ed ottenere una chiave API. Questa chiave API garantisce l’accesso illimitato ai dati di Alpha Vantage. Andiamo al seguente link e procediamo alla registrazione prima di continuare.
Fonte: https://www.alphavantage.co/support/#api-key
La form è semplice e rapida, quindi Alpha Vantage sembra essere fedele alla parola data. Non un singolo messaggio di posta indesiderata è arrivato alla mia casella di posta da quando mi sono registrato.
Accesso ai dati
Come sempre, la documentazione ufficiale è un buon punto di partenza. Alpha Vantage non fa eccezione e la documentazione per la loro API è disponibile al seguente link:
Documentazione: https://www.alphavantage.co/documentation/
Per i nuovi programmatori e neofiti, la documentazione dell’API potrebbe essere inizialmente un po’ complessa. Descrive bene l’API ma non ci sono istruzioni dettagliati ed tutorial passo-passo su come usarla. Ci sono alcuni esempi ma ci si aspetta che tu sappia come interpretarli nel tuo linguaggio di programmazione preferito. E’ proprio questo aspetto che vogliamo approfondire in questo articolo.
Pertanto, per utilizzare l’API e accedere ai dati, sono disponibili due opzioni. In realtà, ci sono molte opzioni disponibili ma ci concentriamo su Python:
- La prima opzione è seguire la documentazione dell’API e utilizzare un pacchetto python come
urllib
orequests
per effettuare richieste URL ai server Alpha Vantage. Per un principiante, questo è il modo più difficile. - La seconda opzione è più semplice. Tutto quello che dobbiamo fare è installare direttamente il wrapper python di Romel Torres con pip per usare le comode funzioni Python che gestiscono per te la richieste HTTP.
Diamo un’occhiata alla pagina github del progetto:
Pagina Git Hub: https://github.com/RomelTorres/alpha_vantage
Per installare il pacchetto è sufficiente digitare:
pip install alpha_vantage
Ricorda di sostituire pip
con pip3
se hai già installato python2.
alpha_vantage
prevedere dipendenze ad alcuni pacchetti python come pandas
. Tuttavia, Pip riesce a gestire, scaricare e installare tutti i pacchetti richiesti da alpha_vintage.
Scaricare i dati
Ora abbiamo tutto il necessario per iniziare a scaricare i dati e usare l’API di Alpha Vantage in Backtrader. Se vuoi approfondire le funzionalità del framework, puoi leggere gli articoli relativi a Backtrader.
Nello spirito di mantenere le cose semplici e non reinventare la ruota, questo articolo descrive come usare il wrapper python invece che sulla creazione di richieste HTTP da zero. Usiamo il pacchetto alpha_vantage
per scaricare ed eventualmente salvare i dati come file CSV. Successivamente importiamo i file CSV in Backtrader usando il feed GenericCSVData
.
from alpha_vantage.timeseries import TimeSeries
import argparse
import pandas as pd
def parse_args():
parser = argparse.ArgumentParser(description='Market Data Downloader')
parser.add_argument('-s','--symbol',
type=str,
required=True,
help='The Symbol of the Instrument/Currency Pair To Download')
parser.add_argument('-o', '--outfile',
type=str,
required=True,
help='The output directory and file name to save the data')
return parser.parse_args()
# Get our arguments
args = parse_args()
print(args)
# Submit our API and create a session
alpha_ts = TimeSeries(key='INSERT YOUR API', output_format='pandas')
# Get the data
data, meta_data = alpha_ts.get_daily(symbol=args.symbol, outputsize='compact')
# Save the data
data.to_csv(args.outfile)
Impostare la chiave API
Lo script è abbastanza semplice, tuttavia merita alcuni approfondimenti. Un codice semplice per una persona esperta potrebbe non esserlo per un neofita, che ha appena. Pertanto, diamo un’occhiata ad alcune parti.
Innanzitutto, non dimentichiamoci di inserire la chiave API prima di provare a eseguire il codice. Dobbiamo aggiornare questa riga:
alpha_ts = TimeSeries(key='INSERT YOUR API', output_format='pandas)'
DataFrame Pandas
In secondo luogo, vale la pena sottolineare perché scegliamo di scaricare i dati come dataframe di Panda piuttosto che direttamente come CSV. Il motivo è che alcune chiamate API non supportano il formato CSV. Quindi, se desideriamo usare questo codice come base ed espanderlo per funzionare con altre chiamate API, è consigliato usare le funzionalità offerte dal pacchetto Pandas in modo da poter accedere a tutte le chiamate API. Diamo un’occhiata a questo commento dalla pagina GitHub di Romel:
Tieni presente che alcune chiamate API non supportano il formato csv (ad esempio
ForeignExchange
,SectorPerformances
eTechIndicators
) perché l’endpoint API non supporta il formato nelle loro chiamate.
In terzo luogo, per la velocità e per gli scopi di questo articolo, stiamo scaricando dati compatti invece che dati completi. Nella pratica, potremmo voler scaricare tutti i dati disponibili. La documentazione afferma che questo prevede file più grandi di 1 MB e quindi potrebbe richiedere molto tempo per eseguire lo script. Quindi dobbiamo essere pazienti se vogliamo scaricare molti dati.
Dati Completi
Per scaricare i dati completi dobbiamo modificare la riga:
data, meta_data = alpha_ts.get_daily(symbol=args.symbol, outputsize='compact')
come segue:
data, meta_data = alpha_ts.get_daily(symbol=args.symbol, outputsize='full')
Nota: l’attributo chiave outputsize='compact'
è in realtà un parametro predefinita, quindi non è necessario specificarlo esplicitamente. E’ stato incluso per avere un codice didattico e portarlo all’attenzione.
Infine, notiamo che la chiamata alla funzione get_daily()
restituisce le variabili data
e meta_data
. Nel nostro script non usiamo meta_data
, ma è stato gestito perchè potrebbe tornare utile se vogliamo esplorare ulteriormente l’API. La variabile meta_data
contiene un dizionario di elementi metadati, come il simbolo, quando è stato aggiornato l’ultima volta, la dimensione dell’output e il fuso orario. Possiamo dare un’occhiata al suo contenuto aggiungendo la funzione print(meta_data)
alla fine dello script.
Codice completo
In questo articolo abbiamo descritto come usare l’API di Alpha Vantage con Backtrader per ottenere le serie storiche dei dati finanziari da usare nelle strategie di trading algoritmico. Per il codice completo riportato in questo articolo, si può consultare il seguente repository di github:
https://github.com/datatrading-info/BackTrader