•  


GitHub - RomelTorres/alpha_vantage: A python wrapper for Alpha Vantage API for financial data.
Skip to content

RomelTorres/alpha_vantage

Repository files navigation

alpha_vantage

Build Status PyPI version Documentation Status Average time to resolve an issue Percentage of issues still open

Python module to get stock data/cryptocurrencies from the Alpha Vantage API

Alpha Vantage delivers a free API for real time financial data and most used finance indicators in a simple json or pandas format. This module implements a python interface to the free API provided by Alpha Vantage . It requires a free API key, that can be requested from http://www.alphavantage.co/support/#api-key . You can have a look at all the API calls available in their API documentation .

For code-less access to financial market data, you may also consider Wisesheets or the official Google Sheet Add-on or the Microsoft Excel Add-on by Alpha Vantage. Check out this guide for some common tips on working with financial market data.

News

  • From version 2.3.0 onwards, fundamentals data and extended intraday is supported.
  • From version 2.2.0 onwards, asyncio support now provided. See below for more information.
  • From version 2.1.3 onwards, rapidAPI key integration is now available.
  • From version 2.1.0 onwards, error logging of bad API calls has been made more apparent.
  • From version 1.9.0 onwards, the urllib was substituted by pythons request library that is thread safe. If you have any error, post an issue.
  • From version 1.8.0 onwards, the column names of the data frames have changed, they are now exactly what alphavantage gives back in their json response. You can see the examples in better detail in the following git repo: https://github.com/RomelTorres/av_example
  • From version 1.6.0, pandas was taken out as a hard dependency.

Install

To install the package use:

pip install alpha_vantage

Or install with pandas support, simply install pandas too:

pip install alpha_vantage pandas

If you want to install from source, then use:

git clone https://github.com/RomelTorres/alpha_vantage.git
pip install -e alpha_vantage

Usage

To get data from the API, simply import the library and call the object with your API key. Next, get ready for some awesome, free, realtime finance data. Your API key may also be stored in the environment variable 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'
)

You may also get a key from rapidAPI . Use your rapidAPI key for the key variable, and set rapidapi=True

ts
 =
 TimeSeries
(
key
=
'YOUR_API_KEY'
,
rapidapi
=
True
)

Internally there is a retries counter, that can be used to minimize connection errors (in case that the API is not able to respond in time), the default is set to 5 but can be increased or decreased whenever needed.

ts
 =
 TimeSeries
(
key
=
'YOUR_API_KEY'
,
retries
=
'YOUR_RETRIES'
)

The library supports giving its results as json dictionaries (default), pandas dataframe (if installed) or csv, simply pass the parameter output_format='pandas' to change the format of the output for all the API calls in the given class. Please note that some API calls do not support the csv format (namely ForeignExchange, SectorPerformances and TechIndicators ) because the API endpoint does not support the format on their calls either.

ts
 =
 TimeSeries
(
key
=
'YOUR_API_KEY'
,
output_format
=
'pandas'
)

The pandas data frame given by the call, can have either a date string indexing or an integer indexing (by default the indexing is 'date'), depending on your needs, you can use both.

 # 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'
)

Data frame structure

The data frame structure is given by the call on alpha vantage rest API. The column names of the data frames are the ones given by their data structure. For example, the following call:

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
))

Would result on: alt text

The headers from the data are specified from Alpha Vantage (in previous versions, the numbers in the headers were removed, but long term is better to have the data exactly as Alpha Vantage produces it.)

Plotting

Time Series

Using pandas support we can plot the intra-minute value for 'MSFT' stock quite easily:

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
()

Giving us as output: alt text

Technical indicators

The same way we can get pandas to plot technical indicators like 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
()

Giving us as output: alt text

Sector Performance

We can also plot sector performance just as easy:

from
 alpha_vantage
.
sectorperformance
 import
 SectorPerformances

import
 matplotlib
.
pyplot
 as
 plt


sp
 =
 SectorPerformances
(
key
=
'YOUR_API_KEY'
, 
output_format
=
'pandas'
)
data
, 
meta_data
 =
 sp
.
get_sector
()
data
[
'Rank A: Real-Time Performance'
].
plot
(
kind
=
'bar'
)
plt
.
title
(
'Real Time Performance (%) per Sector'
)
plt
.
tight_layout
()
plt
.
grid
()
plt
.
show
()

Giving us as output:

alt text

Crypto currencies.

We can also plot crypto currencies prices like 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
()

Giving us as output: alt text

Foreign Exchange (FX)

The foreign exchange endpoint has no metadata, thus only available as json format and pandas (using the 'csv' format will raise an 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
)

Giving us as output:

{
    '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'
}

Asyncio support

From version 2.2.0 on, asyncio support will now be available. This is only for python versions 3.5+. If you do not have 3.5+, the code will break.

The syntax is simple, just mark your methods with the async keyword, and use the await keyword.

Here is an example of a for loop for getting multiple symbols asyncronously. This greatly improving the performance of a program with multiple API calls.

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
)

We have written a much more in depth article to explain asyncio for those who have never used it but want to learn about asyncio, concurrency, and multi-threading. Check it out here: Which Should You Use: Asynchronous Programming or Multi-Threading?

Examples

I have added a repository with examples in a python notebook to better see the usage of the library: https://github.com/RomelTorres/av_example

Tests

In order to run the tests you have to first export your API key so that the test can use it to run, also the tests require pandas, mock and nose.

export
 API_KEY=YOUR_API_KEY
cd
 alpha_vantage
nosetests

Documentation

The code documentation can be found at https://alpha-vantage.readthedocs.io/en/latest/

Contributing

Contributing is always welcome. Just contact us on how best you can contribute, add an issue, or make a PR.

TODOs:

  • The integration tests are not being run at the moment within travis, gotta fix them to run.
  • Add test for csv calls as well.
  • Add tests for incompatible parameter raise errors.
  • Github actions & other items in the issues page.

Contact:

You can reach/follow the Alpha Vantage team on any of the following platforms:

Star if you like it.

If you like or use this project, consider showing your support by starring it.

????-????

- "漢字路" 한글한자자동변환 서비스는 교육부 고전문헌국역지원사업의 지원으로 구축되었습니다.
- "漢字路" 한글한자자동변환 서비스는 전통문화연구회 "울산대학교한국어처리연구실 옥철영(IT융합전공)교수팀"에서 개발한 한글한자자동변환기를 바탕하여 지속적으로 공동 연구 개발하고 있는 서비스입니다.
- 현재 고유명사(인명, 지명등)을 비롯한 여러 변환오류가 있으며 이를 해결하고자 많은 연구 개발을 진행하고자 하고 있습니다. 이를 인지하시고 다른 곳에서 인용시 한자 변환 결과를 한번 더 검토하시고 사용해 주시기 바랍니다.
- 변환오류 및 건의,문의사항은 juntong@juntong.or.kr로 메일로 보내주시면 감사하겠습니다. .
Copyright ⓒ 2020 By '전통문화연구회(傳統文化硏究會)' All Rights reserved.
 한국   대만   중국   일본