Módulo Python para obter dados de estoque/criptomoedas da API Alpha Vantage
Alpha Vantage oferece uma API gratuita para dados financeiros em tempo real e indicadores financeiros mais usados em um formato json ou pandas simples. Este módulo implementa uma interface python para a API gratuita fornecida pelo Alpha Vantage. Requer uma chave de API gratuita, que pode ser solicitada em http://www.alphavantage.co/support/#api-key. Você pode dar uma olhada em todas as chamadas de API disponíveis na documentação da API.
Para acesso sem código aos dados do mercado financeiro, você também pode considerar o Wisesheets ou o complemento oficial do Google Sheet ou o complemento Microsoft Excel da Alpha Vantage. Confira este guia para obter algumas dicas comuns sobre como trabalhar com dados do mercado financeiro.
Para instalar o pacote use:
pip install alpha_vantage
Ou instale com suporte ao pandas, basta instalar o pandas também:
pip install alpha_vantage pandas
Se você deseja instalar a partir do código-fonte, use:
git clone https://github.com/RomelTorres/alpha_vantage.git
pip install -e alpha_vantage
Para obter dados da API, basta importar a biblioteca e chamar o objeto com sua chave de API. A seguir, prepare-se para obter alguns dados financeiros incríveis, gratuitos e em tempo real. Sua chave de API também pode ser armazenada na variável de ambiente 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 dados de um mês específico no histórico, você pode usar o parâmetro 'mês' para vários recursos.
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' )
Você também pode obter uma chave do rapidAPI. Use sua chave rapidAPI para a variável-chave e defina rapidapi=True
ts = TimeSeries ( key = 'YOUR_API_KEY' , rapidapi = True )
Internamente existe um contador de tentativas, que pode ser utilizado para minimizar erros de conexão (caso a API não consiga responder a tempo), o padrão é 5 mas pode ser aumentado ou diminuído sempre que necessário.
ts = TimeSeries ( key = 'YOUR_API_KEY' , retries = 'YOUR_RETRIES' )
A biblioteca suporta fornecer seus resultados como dicionários json (padrão), pandas dataframe (se instalado) ou csv, basta passar o parâmetro output_format='pandas' para alterar o formato da saída para todas as chamadas de API na classe fornecida. Observe que algumas chamadas de API não suportam o formato csv (ou seja, ForeignExchange and TechIndicators
) porque o endpoint da API também não suporta o formato em suas chamadas.
ts = TimeSeries ( key = 'YOUR_API_KEY' , output_format = 'pandas' )
O quadro de dados do pandas fornecido pela chamada pode ter uma indexação de string de data ou uma indexação de número inteiro (por padrão a indexação é 'data'), dependendo de suas necessidades, você pode usar ambos.
# 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' )
A estrutura do quadro de dados é fornecida pela chamada na API alpha vantage rest. Os nomes das colunas dos quadros de dados são aqueles fornecidos por sua estrutura de dados. Por exemplo, a seguinte chamada:
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 ))
Resultaria em:
Os cabeçalhos dos dados são especificados pelo Alpha Vantage (nas versões anteriores, os números nos cabeçalhos foram removidos, mas a longo prazo é melhor ter os dados exatamente como o Alpha Vantage os produz).
Usando o suporte do pandas, podemos traçar o valor intra-minuto para o estoque 'MSFT' com bastante facilidade:
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 ()
Dando-nos como saída:
Da mesma forma que podemos fazer com que os pandas tracem indicadores técnicos como 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 ()
Dando-nos como saída:
Também podemos traçar preços de criptomoedas 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 ()
Dando-nos como saída:
O endpoint de câmbio não possui metadados, portanto, está disponível apenas no formato json e pandas (usar o formato 'csv' gerará um erro)
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 )
Dando-nos como saída:
{
'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 da versão 2.2.0, o suporte asyncio estará disponível. Isso é apenas para versões 3.5+ do python. Se você não tiver 3.5+, o código será quebrado.
A sintaxe é simples, basta marcar seus métodos com a palavra-chave async
e usar a palavra-chave await
.
Aqui está um exemplo de loop for para obter vários símbolos de forma assíncrona. Isso melhora muito o desempenho de um programa com múltiplas chamadas de 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 )
Escrevemos um artigo muito mais aprofundado para explicar o assíncio para aqueles que nunca o usaram, mas querem aprender sobre assíncio, simultaneidade e multithreading. Confira aqui: O que você deve usar: programação assíncrona ou multithreading?
Adicionei um repositório com exemplos em um notebook python para ver melhor o uso da biblioteca: https://github.com/RomelTorres/av_example
Para executar os testes você deve primeiro exportar sua chave API para que o teste possa utilizá-la para rodar, também os testes requerem pandas, mock e nose.
export API_KEY=YOUR_API_KEY
cd alpha_vantage
nosetests
A documentação do código pode ser encontrada em https://alpha-vantage.readthedocs.io/en/latest/
Contribuir é sempre bem-vindo. Basta entrar em contato conosco para saber a melhor forma de contribuir, adicionar um problema ou fazer um PR.
Você pode entrar em contato/seguir a equipe Alpha Vantage em qualquer uma das seguintes plataformas:
Se você gosta ou usa este projeto, considere mostrar seu apoio marcando-o com uma estrela.
??-??