•  


GitHub - twopirllc/AlphaVantageAPI: An Opinionated AlphaVantage API Wrapper in Python 3.9. Compatible with Pandas TA (pip install pandas_ta). Get your FREE API Key at https://www.alphavantage.co/support/
Skip to content

An Opinionated AlphaVantage API Wrapper in Python 3.9. Compatible with Pandas TA (pip install pandas_ta). Get your FREE API Key at https://www.alphavantage.co/support/

License

Notifications You must be signed in to change notification settings

twopirllc/AlphaVantageAPI

Repository files navigation

Python Version PyPi Version Package Status Downloads Contributors

AlphaVantageAPI

An Opinionated AlphaVantage API Wrapper in Python 3.9


Description

This API has been designed to simplify the process of aquiring financial data from AlphaVantage and only depends on the requests and Pandas packages. This package can clean and export data into a variety of file formats such as: csv (default), json , pkl , html , and txt with assistance of Pandas . If the openpyxl package is also installed, it can also be saved as an Excel file format: xlsx .


AlphaVantage Support and Contact


Contributing

Contributions are welcome and I am open to new ideas or implementations. Thank you!


Features

  • Access to AlphaVantage requires an API key . API Keys are free .
  • Built with Pandas for a simpler ETL pipeline.
  • Available export formats: csv (default), json , pkl , html , txt , and xlsx (if openpyxl package is installed)
  • Extended the Pandas DataFrame with extension 'av'. See the Extension Example below.
  • Like terse commands? The 'av' extension also includes their alias. For example: df.av.daily_adjusted('aapl') = df.av.DA('aapl'). See help('aliases') for more shorter length commands.
  • Simplifies column names i.e. "1. open" -> "open" when clean=True .
  • A help method to reduce looking up 'required' and 'optional' parameters for each function.
  • A call_history method to return all successful API calls.

What's New?

!!! Updated requirements.txt to fix urllib3 security vulnerability. !!!

  • Added Intraday Extended
  • There are some breaking changes! Please see the Classic Example and the DataFrame Extension Example below.
  • AlphaVantage has added Fundamental Data: Company Overview , Balance Sheet , Cash Flow , Income Statement , Earnings Calendar , IPO Calendar and Listing Status .

What's Gone?

  • AlphaVantage has depreciated batch , digital_intraday , and sectors .



Installation

Stable

The pip version is the last most stable release. Version: 1.0.30

$ pip install alphaVantage-api

Latest Version

Best choice! Version: 1.0.33

$ pip install -U git+https://github.com/twopirllc/AlphaVantageAPI

Excel Export

$ pip install openpyxl



Programming Conventions

There are two ways of utilizing AlphaVantageAPI. The Standard Class way or as a Pandas DataFrame Extension 'av'.

Standard

This is the Object/Class way. Instantiate a Class with predefined parameters and then make calls.

Parameter Defaults

api_key
: 
str
     =
 None

premium
: 
bool
    =
 False

output_size
: 
str
 =
 'compact'

datatype
: 
str
    =
 'json'

export
: 
bool
     =
 False

export_path
: 
str
 =
 '~/av_data'

output
: 
str
      =
 'csv'

clean
: 
bool
      =
 False

proxy
: 
dict
      =
 {}

API Parameter Descriptions

api_key

  • If None, then do not forget to set your environment variable AV_API_KEY to API key. Otherwise set it in the class constructor. If you have a Premium API key, do not forget to set the premium property to True as well.

premium

  • *Got premium? Excellent! You do not need to wait 15.0001 seconds between each API call.

output_size

  • The other option is 'full'. See AlphaVantage API documentation for more details.

datatype

  • The preferred request type. See AlphaVantage API documentation for more details.

export

  • *Set it to True if you want to save the file locally according to the export_path property.

export_path

  • The path of where you want to save the data.

output

  • How to save/export the data locally. Other options are 'json', 'pkl', 'html', and 'txt'. If openpyxl is installed, then you can save as 'xlsz'.

clean

  • Simplifies the column header names for instance: "1. open" -> "open".

proxy

  • See requests API documentation for more details.



Example : Class(ic) Behavior

Initialization

from
 alphaVantageAPI
 import
 AlphaVantage


# Initialize the AlphaVantage Class with default values

av
 =
 AlphaVantage
(
        
api_key
=
None
,
        
premium
=
False
,
        
output_size
=
"compact"
,
        
datatype
=
'json'
,
        
export
=
False
,
        
export_path
=
"~/av_data"
,
        
output
=
"csv"
,
        
clean
=
False
,
        
proxy
=
{}
    )

Help!

# Help: lists all the functions and indicators AlphaVantage API supports

av
.
help
()

# Print 'function' aliases

av
.
help
(
"aliases"
)

# Help with a specific API function

av
.
help
(
"TIME_SERIES_DAILY"
)

# Help with an indicator

av
.
help
(
"BBANDS"
)

Class Usage

import
 pandas
 as
 pd

import
 alphaVantageAPI
 as
 AV


# Initialize, clean and save "full" locally in "csv" to "~/av_data"

av
 =
 AV
.
AlphaVantage
(
api_key
=
"demo"
, 
export
=
True
, 
clean
=
True
, 
output_size
=
"full"
)

# Check Settings

print
(
av
)

# Parameters

query
 =
 "AA"

ticker
, 
crypto
 =
 "MSFT"
, 
"BTC"

base_fx
, 
to_fx
 =
 "USD"
, 
"CAD"


# Symbol Search

found_symbols
 =
 av
.
search
(
query
)

# Global Quote

quote_df
 =
 av
.
quote
(
ticker
)


# Earnings Calendar

# The "horizon" is how many months out to look for Earnings. Options include:

#   "3month", "6month", "12month". Default: "3month"

# Optionally can use "symbol".

#   Default: Returns all symbols with Earnings based on the "horizon".


 # All symbols with Earnings in 3 months

earnings_df
 =
 av
.
earnings
()
# All symbols with Earnings in 6 months

earnings6mo_df
 =
 av
.
earnings
(
horizon
=
"6month"
)

# Earnings Calendar in 3 months for 'symbol'

earnings_ticker_df
 =
 av
.
earnings
(
symbol
=
ticker
)
# Earnings Calendar in 6 months for 'symbol'

earnings6mo_ticker_df
 =
 av
.
earnings
(
symbol
=
ticker
, 
horizon
=
"6month"
)

# IPO Calendar

ipos_df
 =
 av
.
ipos
()


# Listing Status

# Optionally can use "state". Options: "active" or "delisted".

#   Default: "active".

# Optionally can use "date". Options: None or "YYYY-MM-DD".

#   Default: None

listed_df
 =
 av
.
listed
()
listedon_df
 =
 av
.
listed
(
date
=
"2013-08-03"
)

delisted_df
 =
 av
.
listed
(
state
=
"delisted"
)
delistedon_df
 =
 av
.
listed
(
state
=
"delisted"
, 
date
=
"2009-02-14"
)


# Company Overview

overview_df
 =
 av
.
overview
(
ticker
)

# Balance Sheet, Income Statement and Cash Flow each return a list or a dict (if

# as_dict=True). Default: List with two DataFrames: [Quarterlydf, Annuallydf]

balance_list
 =
 av
.
balance
(
ticker
)   
# Balance Sheet

QuarterlyBSdf
 =
 balance_list
[
0
]
AnnuallyBSdf
 =
 balance_list
[
1
]

cashflow_list
 =
 av
.
cashflow
(
ticker
) 
# Cash Flow

income_list
 =
 av
.
income
(
ticker
)     
# Income Statement



# FX / Currency

fx_rate_df
 =
 av
.
fxrate
(
from_symbol
=
base_fx
, 
to_symbol
=
to_fx
) 
# Rate

fx_I5_df
 =
 av
.
fx
(
from_symbol
=
base_fx
, 
to_symbol
=
to_fx
, 
function
=
"FXI"
, 
interval
=
5
) 
# Intraday as int

fx_I60_df
 =
 av
.
fx
(
from_symbol
=
base_fx
, 
to_symbol
=
to_fx
, 
function
=
"FXI"
, 
interval
=
"60min"
) 
# Intraday as str

fx_D_df
 =
 av
.
fx
(
from_symbol
=
base_fx
, 
to_symbol
=
to_fx
, 
function
=
"FXD"
) 
# Daily

fx_W_df
 =
 av
.
fx
(
from_symbol
=
base_fx
, 
to_symbol
=
to_fx
, 
function
=
"FXW"
) 
# Weekly

fx_M_df
 =
 av
.
fx
(
from_symbol
=
base_fx
, 
to_symbol
=
to_fx
, 
function
=
"FXM"
) 
# Monthly


# Crypto Rating

btc_rating_df
 =
 av
.
crypto_rating
(
symbol
=
crypto
) 
# == ds.crypto_rating(crypto)


# Digital/Crypto

btc_usd_D_df
 =
 av
.
digital
(
symbol
=
crypto
, 
market
=
base_fx
, 
function
=
"CD"
) 
# Daily

btc_usd_W_df
 =
 av
.
digital
(
symbol
=
crypto
, 
market
=
base_fx
, 
function
=
"CW"
) 
# Weekly

btc_usd_M_df
 =
 av
.
digital
(
symbol
=
crypto
, 
market
=
base_fx
, 
function
=
"CM"
) 
# Monthly


# Generic Equity/ETF calls

ticker_I5_df
 =
 av
.
intraday
(
symbol
=
ticker
, 
interval
=
5
) 
# Intraday as int

ticker_I60_df
 =
 av
.
intraday
(
symbol
=
ticker
, 
interval
=
"60min"
) 
# Intraday as str

ticker_IE5_df
 =
 av
.
intraday_extended
(
symbol
=
ticker
, 
interval
=
5
) 
# Adjusted Intraday Extended. Default slice: "year1month1"

ticker_IE30_df
 =
 av
.
intraday_extended
(
symbol
=
ticker
, 
interval
=
"30min"
, 
slice
=
"year2month6"
) 
# Adjusted Intraday Extended with slice

ticker_IE60_R_df
 =
 av
.
intraday_extended
(
symbol
=
ticker
, 
interval
=
60
, 
slice
=
"year2month1"
, 
adjusted
=
False
) 
# Raw Intraday Extended with slice

ticker_D_df
 =
 av
.
data
(
symbol
=
ticker
, 
function
=
"D"
) 
# Daily

ticker_DA_df
 =
 av
.
data
(
symbol
=
ticker
, 
function
=
"DA"
) 
# Daily Adjusted

ticker_W_df
 =
 av
.
data
(
symbol
=
ticker
, 
function
=
"W"
) 
# Weekly

ticker_WA_df
 =
 av
.
data
(
symbol
=
ticker
, 
function
=
"WA"
) 
# Weekly Adjusted

ticker_M_df
 =
 av
.
data
(
symbol
=
ticker
, 
function
=
"M"
) 
# Monthly

ticker_MA_df
 =
 av
.
data
(
symbol
=
ticker
, 
function
=
"MA"
) 
# Monthly Adjusted



## Indicators

# SMA(close, 20)

ticker_SMA_20_df
 =
 av
.
data
(
symbol
=
ticker
, 
function
=
"SMA"
, 
series_type
=
"close"
, 
time_period
=
20
)

# STOCH(close)

ticker_STOCH_df
 =
 av
.
data
(
"STOCH"
, 
symbols
[
2
], 
interval
=
"daily"
, 
series_type
=
"close"
)

# List of symbols Daily

symbols
 =
 [
"AAPL"
, 
"MSFT"
, 
"XLK"
]
# returns dict of DataFrames: {"ABC": pd.DataFrame(), ..

techs
 =
 av
.
data
(
symbols
, 
"D"
).}
[
print
(
techs
[
s
]) 
for
 s
 in
 symbols
]

# History of Successful Calls to AlphaVantage

history
 =
 pd
.
DataFrame
(
av
.
call_history
())
print
(
history
)

Call History

# Returns all successfull calls to the API

history_list
 =
 av
.
call_history
()

# Pretty display of Call History

history_df
 =
 pd
.
DataFrame
(
history_list
)[[
"symbol"
, 
"function"
, 
"interval"
, 
"time_period"
]]
print
(
history_df
)

Example : DataFrame Extension 'av' Behavior

Initialization

For simplicity and protection of your AV API key, the extension uses the environment variable AV_API_KEY upon import of the module.

import
 pandas
 as
 pd

import
 alphaVantageAPI

Empty DataFrame: No current data, no problem!

Since 'av' is an extension of a Pandas DataFrame, we need a DataFrame to work from. Simply create an empty DataFrame, it's contents will be replaced anyhow.

df
 =
 pd
.
DataFrame
()

Setting properties

Same as the Class properties above. Use the 'av' extension to change them prior to requesting data or adjusting on the fly

# Your API KEY. Default: None

df
.
av
.
api_key
 =
 "DEMO"


# Whether you have a Premium Account. Default: False

df
.
av
.
premium
 =
 False


# Simplify OHLCV columns. Default: False

df
.
av
.
clean
 =
 True


# Whether to export (save locally). Default: False

df
.
av
.
export
 =
 True


# Output Size: "compact" or "full". Default: "compact"

df
.
av
.
output_size
 =
 "full"


# Retrieval Format. Default: "json"

df
.
av
.
datatype
 =
 "json"


# Export Path to save output format. Default: "~/av_data"

df
.
av
.
export_path
 =
 "~/av_data"


# Final output format. Default: "csv"

df
.
av
.
output
 =
 "csv"


# Proxy to use. Default: {}

df
.
av
.
proxy
 =
 {}

Help!

# Help: lists all the functions and indicators AlphaVantage API supports

df
.
av
.
help
()

# Print 'function' aliases

df
.
av
.
help
(
"aliases"
)

# Help with a specific API function

df
.
av
.
help
(
"TIME_SERIES_DAILY"
)

# Help with an indicator

df
.
av
.
help
(
"BBANDS"
)

Data Acquisition Methods

import
 pandas
 as
 pd

import
 alphaVantageAPI


# Create an Empty DataFrame to store the results

df
 =
 pd
.
DataFrame
()

# Apply AV settings to: Clean and save "full" locally in "csv" to "~/av_data"

df
.
av
.
api_key
 =
 "DEMO"

df
.
av
.
export
 =
 True

df
.
av
.
clean
 =
 True

df
.
av
.
output_size
=
"full"


# Parameters

query
 =
 "AA"

ticker
, 
crypto
 =
 "MSFT"
, 
"BTC"

base_fx
, 
to_fx
 =
 "USD"
, 
"CAD"


found_symbols
 =
 df
.
av
.
search
(
query
)

# Global Quote

quote_df
 =
 df
.
av
.
Q
(
ticker
) 
# => df.av.quote(ticker)

quote_df
.
av
.
name
 # returns "MSFT"


# Company Information

ticker_overview
 =
 df
.
av
.
overview
(
ticker
)

# Earnings Calendar

# The "horizon" is how many months out to look for Earnings. Options include:

#   "3month", "6month", "12month". Default: "3month"

# Optionally can use "symbol".

#   Default: Returns all symbols with Earnings based on the "horizon".

earnings_df
 =
 df
.
av
.
earnings
()
earnings6month_df
 =
 df
.
av
.
earnings
(
horizon
=
"6month"
)
earnings12month_ticker_df
 =
 df
.
av
.
earnings
(
symbol
=
ticker
, 
horizon
=
"12month"
)

# IPO Calendar

ipos_df
 =
 df
.
av
.
ipos
()


# Listing Status

# Optionally can use "state". Options: "active" or "delisted".

#   Default: "active".

# Optionally can use "date". Options: None or "YYYY-MM-DD".

#   Default: None

listed_df
 =
 df
.
av
.
listed
()
listedon_df
 =
 df
.
av
.
listed
(
date
=
"2013-08-03"
)

delisted_df
 =
 df
.
av
.
listed
(
state
=
"delisted"
)
delistedon_df
 =
 df
.
av
.
listed
(
state
=
"delisted"
, 
date
=
"2009-02-14"
)


# Balance Sheet, Cash Flow, and the Income Statement each return two DataFrames

ticker_quarterly_balance
, 
ticker_annual_balance
 =
 df
.
av
.
balance
(
ticker
)
ticker_quarterly_cashflow
, 
ticker_annual_cashflow
 =
 df
.
av
.
cashflow
(
ticker
)
ticker_quarterly_income
, 
ticker_annual_income
 =
 df
.
av
.
income
(
ticker
)

# FX / Currency

fx_I5_df
 =
 df
.
av
.
fx_intraday
(
base_fx
, 
to_currency
=
to_fx
, 
interval
=
5
)        
# Intraday as int

fx_I60_df
 =
 df
.
av
.
fx_intraday
(
base_fx
, 
to_currency
=
to_fx
, 
interval
=
"60min"
) 
# Intraday as str

fx_D_df
 =
 df
.
av
.
fx_daily
(
base_fx
, 
to_currency
=
to_fx
)   
# Daily

fx_W_df
 =
 df
.
av
.
fx_weekly
(
base_fx
, 
to_currency
=
to_fx
)  
# Weekly

fx_M_df
 =
 df
.
av
.
fx_monthly
(
base_fx
, 
to_currency
=
to_fx
) 
# Monthly


# Crypto Rating

btc_rating_df
 =
 df
.
av
.
crypto_rating
(
crypto
)
btc_rating_df
.
av
.
name
 # returns "BTC"


# Digital/Crypto

btc_usd_D_df
 =
 df
.
av
.
digital_daily
(
crypto
, 
market
=
base_fx
)   
# Daily

btc_usd_D_df
.
av
.
name
 # returns "BTC.USD"

btc_usd_W_df
 =
 df
.
av
.
digital_weekly
(
crypto
, 
market
=
base_fx
)  
# Weekly

btc_usd_M_df
 =
 df
.
av
.
digital_monthly
(
crypto
, 
market
=
base_fx
) 
# Monthly


# Equities/ ETFs

ticker_I5_df
 =
 df
.
av
.
intraday
(
ticker
, 
interval
=
5
)        
# Intraday as int

ticker_I5_df
.
av
.
name
 # returns "MSFT"

ticker_I60_df
 =
 df
.
av
.
intraday
(
ticker
, 
interval
=
"60min"
) 
# Intraday as str

ticker_IE5_df
 =
 df
.
av
.
intraday_ext
(
ticker
, 
interval
=
5
) 
# Adjusted Intraday Extended. Default slice: "year1month1"

ticker_IE30_df
 =
 df
.
av
.
intraday_ext
(
ticker
, 
interval
=
"30min"
, 
slice
=
"year2month6"
) 
# Adjusted Intraday Extended with slice

ticker_IE60_R_df
 =
 df
.
av
.
intraday_ext
(
ticker
, 
interval
=
60
, 
slice
=
"year2month1"
, 
adjusted
=
False
) 
# Raw Intraday Extended with slice


ticker_D_df
 =
 df
.
av
.
daily
(
ticker
)                        
# Daily

ticker_DA_df
 =
 df
.
av
.
daily_adjusted
(
ticker
)              
# Daily Adjusted

ticker_W_df
 =
 df
.
av
.
weekly
(
ticker
)                       
# Weekly

ticker_WA_df
 =
 df
.
av
.
weekly_adjusted
(
ticker
)             
# Weekly Adjusted

ticker_M_df
 =
 df
.
av
.
monthly
(
ticker
)                      
# Monthly

ticker_MA_df
 =
 df
.
av
.
monthly_adjusted
(
ticker
)            
# Monthly Adjusted

Inspiration

If this module does not suit your style or workflow, consider some of the following AlphaVantage API Python Wrapper implementations by: Romel Torres or portfoliome

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