Module Python pour obtenir des données boursières/crypto-monnaies à partir de l'API Alpha Vantage
Alpha Vantage fournit une API gratuite pour les données financières en temps réel et les indicateurs financiers les plus utilisés dans un simple format json ou pandas. Ce module implémente une interface python vers l'API gratuite fournie par Alpha Vantage. Il nécessite une clé API gratuite, qui peut être demandée sur http://www.alphavantage.co/support/#api-key. Vous pouvez consulter tous les appels API disponibles dans leur documentation API.
Pour un accès sans code aux données des marchés financiers, vous pouvez également envisager Wisesheets ou le module complémentaire officiel Google Sheet ou le module complémentaire Microsoft Excel d'Alpha Vantage. Consultez ce guide pour obtenir des conseils courants sur l’utilisation des données des marchés financiers.
Pour installer le package, utilisez :
pip install alpha_vantage
Ou installez avec le support pandas, installez simplement pandas également :
pip install alpha_vantage pandas
Si vous souhaitez installer à partir des sources, utilisez :
git clone https://github.com/RomelTorres/alpha_vantage.git
pip install -e alpha_vantage
Pour obtenir des données de l'API, importez simplement la bibliothèque et appelez l'objet avec votre clé API. Ensuite, préparez-vous à recevoir des données financières impressionnantes, gratuites et en temps réel. Votre clé API peut également être stockée dans la variable d'environnement ALPHAVANTAGE_API_KEY
.
from alpha_vantage . timeseries import TimeSeries
ts = TimeSeries ( key = 'YOUR_API_KEY' )
# Get json object with the intraday data and another with the call's metadata
data , meta_data = ts . get_intraday ( 'GOOGL' )
Pour interroger les données d'un mois spécifique de l'historique, vous pouvez utiliser le paramètre « mois » pour diverses fonctionnalités.
from alpha_vantage . timeseries import TimeSeries
from alpha_vantage . techindicators import TechIndicators
ts = TimeSeries ( key = 'YOUR_API_KEY' )
ti = TechIndicators ( key = 'YOUR_API_KEY' )
# Get json object with the 30-min interval intraday data and another with the call's metadata for January, 2014.
data , meta_data = ts . get_intraday ( 'GOOGL' , month = '2014-01' , interval = '30min' )
#Get json object with the 30-min interval simple moving average (SMA) values and another with the call's metadata for January, 2014.
data , meta_data = ti . get_sma ( 'GOOGL' , month = '2014-01' , interval = '30min' )
Vous pouvez également obtenir une clé auprès de rapidAPI. Utilisez votre clé rapidAPI pour la variable clé et définissez rapidapi=True
ts = TimeSeries ( key = 'YOUR_API_KEY' , rapidapi = True )
En interne, il existe un compteur de tentatives, qui peut être utilisé pour minimiser les erreurs de connexion (au cas où l'API ne serait pas en mesure de répondre à temps). La valeur par défaut est définie sur 5 mais peut être augmentée ou diminuée chaque fois que nécessaire.
ts = TimeSeries ( key = 'YOUR_API_KEY' , retries = 'YOUR_RETRIES' )
La bibliothèque prend en charge la fourniture de ses résultats sous forme de dictionnaires json (par défaut), pandas dataframe (si installé) ou csv, transmettez simplement le paramètre output_format='pandas' pour modifier le format de sortie de tous les appels d'API dans la classe donnée. Veuillez noter que certains appels d'API ne prennent pas en charge le format csv (à savoir ForeignExchange and TechIndicators
) car le point de terminaison de l'API ne prend pas non plus en charge le format de leurs appels.
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
La trame de données pandas donnée par l'appel peut avoir soit une indexation de chaîne de date, soit une indexation entière (par défaut l'indexation est 'date'), selon vos besoins, vous pouvez utiliser les deux.
# For the default date string index behavior
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' , indexing_type = 'date' )
# For the default integer index behavior
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' , indexing_type = 'integer' )
La structure du bloc de données est donnée par l'appel à l'API alpha vantage rest. Les noms de colonnes des trames de données sont ceux donnés par leur structure de données. Par exemple, l'appel suivant :
from alpha_vantage . timeseries import TimeSeries
from pprint import pprint
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
data , meta_data = ts . get_intraday ( symbol = 'MSFT' , interval = '1min' , outputsize = 'full' )
pprint ( data . head ( 2 ))
Cela entraînerait :
Les en-têtes des données sont spécifiés à partir d'Alpha Vantage (dans les versions précédentes, les chiffres dans les en-têtes ont été supprimés, mais à long terme, il est préférable d'avoir les données exactement telles qu'Alpha Vantage les produit.)
En utilisant le support pandas, nous pouvons tracer assez facilement la valeur intra-minute du stock « MSFT » :
from alpha_vantage . timeseries import TimeSeries
import matplotlib . pyplot as plt
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
data , meta_data = ts . get_intraday ( symbol = 'MSFT' , interval = '1min' , outputsize = 'full' )
data [ '4. close' ]. plot ()
plt . title ( 'Intraday Times Series for the MSFT stock (1 min)' )
plt . show ()
Nous donnant en sortie :
De la même manière que nous pouvons amener les pandas à tracer des indicateurs techniques comme les Bollinger Bands®
from alpha_vantage . techindicators import TechIndicators
import matplotlib . pyplot as plt
ti = TechIndicators ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
data , meta_data = ti . get_bbands ( symbol = 'MSFT' , interval = '60min' , time_period = 60 )
data . plot ()
plt . title ( 'BBbands indicator for MSFT stock (60 min)' )
plt . show ()
Nous donnant en sortie :
Nous pouvons également tracer les prix des crypto-monnaies comme le BTC :
from alpha_vantage . cryptocurrencies import CryptoCurrencies
import matplotlib . pyplot as plt
cc = CryptoCurrencies ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
data , meta_data = cc . get_digital_currency_daily ( symbol = 'BTC' , market = 'CNY' )
data [ '4b. close (USD)' ]. plot ()
plt . tight_layout ()
plt . title ( 'Daily close value for bitcoin (BTC)' )
plt . grid ()
plt . show ()
Nous donnant en sortie :
Le point de terminaison de change n'a pas de métadonnées, donc disponible uniquement au format json et pandas (l'utilisation du format « csv » générera une erreur)
from alpha_vantage . foreignexchange import ForeignExchange
from pprint import pprint
cc = ForeignExchange ( key = 'YOUR_API_KEY' )
# There is no metadata in this call
data , _ = cc . get_currency_exchange_rate ( from_currency = 'BTC' , to_currency = 'USD' )
pprint ( data )
Nous donnant en sortie :
{
'1. From_Currency Code': 'BTC',
'2. From_Currency Name': 'Bitcoin',
'3. To_Currency Code': 'USD',
'4. To_Currency Name': 'United States Dollar',
'5. Exchange Rate': '5566.80500105',
'6. Last Refreshed': '2017-10-15 15:13:08',
'7. Time Zone': 'UTC'
}
À partir de la version 2.2.0, le support asyncio sera désormais disponible. Ceci concerne uniquement les versions 3.5+ de Python. Si vous n'avez pas 3.5+, le code sera brisé.
La syntaxe est simple, marquez simplement vos méthodes avec le mot-clé async
et utilisez le mot-clé await
.
Voici un exemple de boucle for permettant d'obtenir plusieurs symboles de manière asynchrone. Cela améliore considérablement les performances d'un programme avec plusieurs appels API.
import asyncio
from alpha_vantage . async_support . timeseries import TimeSeries
symbols = [ 'AAPL' , 'GOOG' , 'TSLA' , 'MSFT' ]
async def get_data ( symbol ):
ts = TimeSeries ( key = 'YOUR_KEY_HERE' )
data , _ = await ts . get_quote_endpoint ( symbol )
await ts . close ()
return data
loop = asyncio . get_event_loop ()
tasks = [ get_data ( symbol ) for symbol in symbols ]
group1 = asyncio . gather ( * tasks )
results = loop . run_until_complete ( group1 )
loop . close ()
print ( results )
Nous avons écrit un article beaucoup plus approfondi pour expliquer l'asyncio à ceux qui ne l'ont jamais utilisé mais qui souhaitent en savoir plus sur l'asyncio, la concurrence et le multi-threading. Découvrez-le ici : Que devriez-vous utiliser : programmation asynchrone ou multi-threading ?
J'ai ajouté un référentiel avec des exemples dans un notebook python pour mieux voir l'utilisation de la bibliothèque : https://github.com/RomelTorres/av_example
Afin d'exécuter les tests, vous devez d'abord exporter votre clé API afin que le test puisse l'utiliser pour s'exécuter. Les tests nécessitent également des pandas, un mock et un nez.
export API_KEY=YOUR_API_KEY
cd alpha_vantage
nosetests
La documentation du code peut être trouvée sur https://alpha-vantage.readthedocs.io/en/latest/
Contribuer est toujours le bienvenu. Contactez-nous simplement pour savoir comment contribuer au mieux, ajouter un problème ou créer un PR.
Vous pouvez joindre/suivre l'équipe Alpha Vantage sur l'une des plateformes suivantes :
Si vous aimez ou utilisez ce projet, pensez à montrer votre soutien en le mettant en vedette.
???-??