Módulo Python para obtener datos bursátiles/criptomonedas de la API Alpha Vantage
Alpha Vantage ofrece una API gratuita para datos financieros en tiempo real y los indicadores financieros más utilizados en un formato json o pandas simple. Este módulo implementa una interfaz Python para la API gratuita proporcionada por Alpha Vantage. Requiere una clave API gratuita, que se puede solicitar en http://www.alphavantage.co/support/#api-key. Puede echar un vistazo a todas las llamadas API disponibles en su documentación API.
Para acceder sin código a los datos del mercado financiero, también puede considerar Wisesheets o el complemento oficial de Google Sheet o el complemento de Microsoft Excel de Alpha Vantage. Consulte esta guía para obtener algunos consejos comunes sobre cómo trabajar con datos del mercado financiero.
Para instalar el paquete utilice:
pip install alpha_vantage
O instálelo con soporte de pandas, simplemente instale pandas también:
pip install alpha_vantage pandas
Si desea instalar desde la fuente, utilice:
git clone https://github.com/RomelTorres/alpha_vantage.git
pip install -e alpha_vantage
Para obtener datos de la API, simplemente importe la biblioteca y llame al objeto con su clave API. A continuación, prepárese para obtener datos financieros increíbles, gratuitos y en tiempo real. Su clave API también puede almacenarse en la variable de entorno 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' )
Para consultar datos de un mes específico en el historial, puede utilizar el parámetro "mes" para varias funciones.
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' )
También puede obtener una clave de rapidAPI. Utilice su clave rapidAPI para la variable clave y establezca rapidapi=True
ts = TimeSeries ( key = 'YOUR_API_KEY' , rapidapi = True )
Internamente hay un contador de reintentos, que se puede usar para minimizar los errores de conexión (en caso de que la API no pueda responder a tiempo), el valor predeterminado está establecido en 5, pero se puede aumentar o disminuir cuando sea necesario.
ts = TimeSeries ( key = 'YOUR_API_KEY' , retries = 'YOUR_RETRIES' )
La biblioteca admite dar sus resultados como diccionarios json (predeterminado), marco de datos pandas (si está instalado) o csv, simplemente pase el parámetro output_format='pandas' para cambiar el formato de salida para todas las llamadas API en la clase dada. Tenga en cuenta que algunas llamadas API no admiten el formato csv (es decir, ForeignExchange and TechIndicators
) porque el punto final API tampoco admite el formato en sus llamadas.
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
El marco de datos de pandas proporcionado por la llamada puede tener una indexación de cadena de fecha o una indexación de números enteros (de forma predeterminada, la indexación es 'fecha'), dependiendo de sus necesidades, puede usar ambas.
# 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 estructura del marco de datos viene dada por la llamada a la API alpha vantage rest. Los nombres de las columnas de los marcos de datos son los dados por su estructura de datos. Por ejemplo, la siguiente llamada:
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 ))
Resultaría en:
Los encabezados de los datos se especifican desde Alpha Vantage (en versiones anteriores, se eliminaron los números en los encabezados, pero a largo plazo es mejor tener los datos exactamente como los produce Alpha Vantage).
Utilizando el soporte de pandas, podemos trazar el valor intraminuto de las acciones 'MSFT' con bastante facilidad:
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 ()
Dándonos como salida:
De la misma manera que podemos hacer que los pandas tracen indicadores técnicos como las Bandas de Bollinger®.
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 ()
Dándonos como salida:
También podemos trazar precios de criptomonedas como 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 ()
Dándonos como salida:
El punto final de divisas no tiene metadatos, por lo tanto, solo está disponible en formato json y pandas (el uso del formato 'csv' generará un error)
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 )
Dándonos como salida:
{
'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'
}
A partir de la versión 2.2.0, la compatibilidad con asyncio ahora estará disponible. Esto es solo para las versiones 3.5+ de Python. Si no tiene 3.5+, el código se romperá.
La sintaxis es simple, simplemente marque sus métodos con la palabra clave async
y use la palabra clave await
.
A continuación se muestra un ejemplo de un bucle for para obtener varios símbolos de forma asincrónica. Esto mejora enormemente el rendimiento de un programa con múltiples llamadas 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 )
Hemos escrito un artículo mucho más detallado para explicar asyncio para aquellos que nunca lo han usado pero quieren aprender sobre asyncio, concurrencia y subprocesos múltiples. Compruébelo aquí: ¿Cuál debería utilizar: programación asincrónica o subprocesos múltiples?
He agregado un repositorio con ejemplos en un cuaderno de Python para ver mejor el uso de la biblioteca: https://github.com/RomelTorres/av_example
Para ejecutar las pruebas, primero debe exportar su clave API para que la prueba pueda usarla para ejecutarse; además, las pruebas requieren pandas, simulacro y nariz.
export API_KEY=YOUR_API_KEY
cd alpha_vantage
nosetests
La documentación del código se puede encontrar en https://alpha-vantage.readthedocs.io/en/latest/
Contribuir siempre es bienvenido. Simplemente contáctenos sobre la mejor manera de contribuir, agregar un problema o hacer un PR.
Puede comunicarse con/seguir al equipo de Alpha Vantage en cualquiera de las siguientes plataformas:
Si te gusta o utilizas este proyecto, considera mostrar tu apoyo protagonizándolo.
??-??