Python-Modul zum Abrufen von Aktiendaten/Kryptowährungen von der Alpha Vantage API
Alpha Vantage bietet eine kostenlose API für Echtzeit-Finanzdaten und die am häufigsten verwendeten Finanzindikatoren in einem einfachen JSON- oder Pandas-Format. Dieses Modul implementiert eine Python-Schnittstelle zur kostenlosen API von Alpha Vantage. Es erfordert einen kostenlosen API-Schlüssel, der unter http://www.alphavantage.co/support/#api-key angefordert werden kann. Sie können sich alle verfügbaren API-Aufrufe in der API-Dokumentation ansehen.
Für den Zugriff auf Finanzmarktdaten ohne Code können Sie auch Wisesheets oder das offizielle Google Sheet Add-on oder das Microsoft Excel Add-on von Alpha Vantage in Betracht ziehen. In diesem Leitfaden finden Sie einige allgemeine Tipps zum Arbeiten mit Finanzmarktdaten.
Um das Paket zu installieren, verwenden Sie:
pip install alpha_vantage
Oder installieren Sie mit Pandas-Unterstützung, installieren Sie einfach auch Pandas:
pip install alpha_vantage pandas
Wenn Sie von der Quelle installieren möchten, verwenden Sie:
git clone https://github.com/RomelTorres/alpha_vantage.git
pip install -e alpha_vantage
Um Daten von der API zu erhalten, importieren Sie einfach die Bibliothek und rufen Sie das Objekt mit Ihrem API-Schlüssel auf. Machen Sie sich als Nächstes bereit für einige fantastische, kostenlose Echtzeit-Finanzdaten. Ihr API-Schlüssel kann auch in der Umgebungsvariablen ALPHAVANTAGE_API_KEY
gespeichert werden.
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' )
Um Daten aus einem bestimmten Monat im Verlauf abzufragen, können Sie den Parameter „Monat“ für verschiedene Funktionen verwenden.
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' )
Möglicherweise erhalten Sie auch einen Schlüssel von rapidAPI. Verwenden Sie Ihren rapidAPI-Schlüssel für die Schlüsselvariable und legen Sie rapidapi=True
fest
ts = TimeSeries ( key = 'YOUR_API_KEY' , rapidapi = True )
Intern gibt es einen Wiederholungszähler, der zur Minimierung von Verbindungsfehlern verwendet werden kann (für den Fall, dass die API nicht rechtzeitig antworten kann). Der Standardwert ist auf 5 eingestellt, kann aber bei Bedarf erhöht oder verringert werden.
ts = TimeSeries ( key = 'YOUR_API_KEY' , retries = 'YOUR_RETRIES' )
Die Bibliothek unterstützt die Ausgabe ihrer Ergebnisse als JSON-Wörterbücher (Standard), Pandas-Datenrahmen (falls installiert) oder CSV. Übergeben Sie einfach den Parameter „output_format='pandas'“, um das Ausgabeformat für alle API-Aufrufe in der angegebenen Klasse zu ändern. Bitte beachten Sie, dass einige API-Aufrufe das CSV-Format nicht unterstützen (nämlich ForeignExchange and TechIndicators
), da der API-Endpunkt das Format bei ihren Aufrufen ebenfalls nicht unterstützt.
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
Der durch den Aufruf angegebene Pandas-Datenrahmen kann entweder eine Datumszeichenfolgenindizierung oder eine Ganzzahlindizierung haben (standardmäßig ist die Indizierung „Datum“). Abhängig von Ihren Anforderungen können Sie beide verwenden.
# 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' )
Die Datenrahmenstruktur wird durch den Aufruf der Alpha Vantage Rest API vorgegeben. Die Spaltennamen der Datenrahmen sind diejenigen, die durch ihre Datenstruktur vorgegeben sind. Beispielsweise der folgende Aufruf:
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 ))
Ergebnis wäre:
Die Kopfzeilen der Daten werden von Alpha Vantage spezifiziert (in früheren Versionen wurden die Zahlen in den Kopfzeilen entfernt, aber langfristig ist es besser, die Daten genau so zu haben, wie Alpha Vantage sie erzeugt.)
Mithilfe der Pandas-Unterstützung können wir den Intra-Minute-Wert für den „MSFT“-Bestand ganz einfach grafisch darstellen:
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 ()
Geben Sie uns als Ausgabe:
Auf die gleiche Weise können wir Pandas dazu bringen, technische Indikatoren wie Bollinger-Bänder® darzustellen
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 ()
Geben Sie uns als Ausgabe:
Wir können auch Preise für Kryptowährungen wie BTC darstellen:
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 ()
Geben Sie uns als Ausgabe:
Der Devisen-Endpunkt verfügt über keine Metadaten und ist daher nur im JSON-Format und in Pandas verfügbar (die Verwendung des „CSV“-Formats führt zu einem Fehler).
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 )
Geben Sie uns als Ausgabe:
{
'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'
}
Ab Version 2.2.0 ist nun Asyncio-Unterstützung verfügbar. Dies gilt nur für Python-Versionen 3.5+. Wenn Sie nicht über 3.5+ verfügen, wird der Code fehlerhaft sein.
Die Syntax ist einfach: Markieren Sie Ihre Methoden einfach mit dem Schlüsselwort async
und verwenden Sie das Schlüsselwort await
.
Hier ist ein Beispiel für eine for-Schleife zum asynchronen Abrufen mehrerer Symbole. Dadurch wird die Leistung eines Programms mit mehreren API-Aufrufen erheblich verbessert.
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 )
Wir haben einen viel ausführlicheren Artikel geschrieben, um Asyncio für diejenigen zu erklären, die es noch nie verwendet haben, aber etwas über Asyncio, Parallelität und Multithreading lernen möchten. Schauen Sie es sich hier an: Was sollten Sie verwenden: Asynchrone Programmierung oder Multi-Threading?
Ich habe ein Repository mit Beispielen in einem Python-Notizbuch hinzugefügt, um die Verwendung der Bibliothek besser zu sehen: https://github.com/RomelTorres/av_example
Um die Tests auszuführen, müssen Sie zunächst Ihren API-Schlüssel exportieren, damit der Test ihn zum Ausführen verwenden kann. Außerdem erfordern die Tests Pandas, Mock und Nose.
export API_KEY=YOUR_API_KEY
cd alpha_vantage
nosetests
Die Code-Dokumentation finden Sie unter https://alpha-vantage.readthedocs.io/en/latest/
Beiträge sind jederzeit willkommen. Kontaktieren Sie uns einfach, um zu erfahren, wie Sie am besten beitragen, ein Problem hinzufügen oder eine PR machen können.
Sie können das Alpha Vantage-Team auf einer der folgenden Plattformen erreichen/verfolgen:
Wenn Ihnen dieses Projekt gefällt oder Sie es nutzen, denken Sie darüber nach, Ihre Unterstützung zu zeigen, indem Sie es markieren.
??-??