Solvedalpha_vantage Alpha Vantage API Review

Alpha Vantage API Review from a Python Developer

@RomelTorres congratulations on your wonderful python library for Alpha Vantage!

I am a full-stack python developer who uses the Alpha Vantage API to develop trading strategies for stocks, ETFs, and OTCs. I am wondering whether you are affiliated with Alpha Vantage, and whether this is a good place for me to leave a 360° review on their API service for future reference by the developer community.

So technically this is not a bug report or feature request - hope it's OK with you :)

The Experience

I was one of the "yahoo refugees" who stumbled upon Alpha Vantage via Google search. My first interactions with their website could be summarized by the good-old term WYSIWYG (what-you-see-is-what-you-get). Their documentation promised three things: (1) time series data with various resolutions, (2) over 50 technical signals, (3) sector data, and they kept their promise by providing demo URLs for all the said API functions.

image

They promised free API keys, and they also delivered. They promised "no promotional materials to your inbox," and indeed the only email I got from them so far was the announcement email for their new CSV feature.

This being said, there are a couple areas they could optimize upon.

  • Be more specific about their business model. Being "100% free" is good, but it can also be a bit scary, especially for a yahoo refugee like me.
  • Add multi-symbol support so that one can query multiple stocks with a single API call.
  • Their FAQ recommends "~200 API calls per minute." It would be great if they can set a hard limit on the call volume to prevent client-side abuses in the form of ultra-high-frequency requests.

The Data

Of the thousands of US-based equities I have analyzed so far, their historical data and technical indicators seem to match other reputable data sources. Their intraday data is realtime up to the current minute, which is fine for my research purposes but may not satisfy users who want to beat the market with millisecond precision. Perhaps a premium feature for this down the road?

Their JSON output is easily readable and python-parsable. For the daily time series, however, I understand that their most recent data point is the cumulative information of the current trading day (updated realtime), but why is the first timestamp in YYYY-MM-DD HH:MM:SS format while all the others are in the normal YYYY-MM-DD format typical of the EOD data?

"Meta Data": {
"1. Information": "Daily Prices (open, high, low, close) and Volumes",
"2. Symbol": "MSFT",
"3. Last Refreshed": "2017-08-18 16:00:00",
"4. Output Size": "Compact",
"5. Time Zone": "US/Eastern"
},
"Time Series (Daily)": {
"2017-08-18 16:00:00": {
"1. open": "72.2700",
"2. high": "72.8400",
"3. low": "71.9300",
"4. close": "72.4900",
"5. volume": "18215276"
},
"2017-08-17": {
"1. open": "73.5800",
"2. high": "73.8700",
"3. low": "72.4000",
"4. close": "72.4000",
"5. volume": "21834250"
},

I would love to see a consistent YYYY-MM-DD format across all the timestamps. The "last refreshed" timestamp can be specified in Meta Data instead:

"Meta Data": {
"1. Information": "Daily Prices (open, high, low, close) and Volumes",
"2. Symbol": "MSFT",
"3. Last Refreshed": "2017-08-18 16:00:00",
"4. Output Size": "Compact",
"5. Time Zone": "US/Eastern"
},
"Time Series (Daily)": {
"2017-08-18": {
"1. open": "72.2700",
"2. high": "72.8400",
"3. low": "71.9300",
"4. close": "72.4900",
"5. volume": "18215276"
},
"2017-08-17": {
"1. open": "73.5800",
"2. high": "73.8700",
"3. low": "72.4000",
"4. close": "72.4000",
"5. volume": "21834250"
},

In addition to the data presentation aspects, below are couple other data-related proposals:

  • Expand CSV support to all API functions. CSV is currently enabled only for the time series APIs.
  • Make error messages more informative for debugging purposes.

In Summary

It is always a pleasure to have an API service that is well documented, platform/language-agnostic, and easily integratable. The fact that we have several third-party libraries built on top of Alpha Vantage on GitHub is in a sense testament to its developer-friendly nature. While there is still room for them to become a better version of themselves, I hope they thrive and stay true to the description on their home page - "driven by rigorous research, cutting edge technology, and a disciplined focus on democratizing access to data."

48 Answers

✔️Accepted Answer

@wickenden-g Thank you very much for your incredible review.

Sadly I am not related to Alpha Vantage. One day I also discovered their API while googling and decided to write the python wrapper for it as my first step in playing around with financial algorithms. I am very happy and grateful for the acceptance it has had in the community since this is my first open source project.

I would contact them directly on their website. They actually write back quickly and are always open to suggestions. Yours seem pretty reasonable. I was thinking on suggesting them on having some sort of company account in Github.

Thanks again for the
Romel

Other Answers:

@frederic-adda @RomelTorres @coryleuck If you want to get data of Stocks from other exchanges other then US-Stock exchanges then you need to do something like this, If I wanted to get the stock value for TITAN from Indian Exchange NSE, then I need to use this in symbol NSE:TITAN .

Ex:

ts = TimeSeries(key='API_KEY', output_format='pandas')
data, meta_data = ts.get_daily_adjusted(symbol='NSE:TITAN', outputsize='full')
data['close'].plot()
plt.title('Daily Adjusted for the TITAN stock ')
plt.show()

@frederic-adda I doubt that there is an API which will provide you the list of all Stock Exchanges around the world.

But still are here some links that might help you out, http://www.wikinvest.com/wiki/List_of_Stock_Exchanges
http://www.eoddata.com/

Related Issues:

14
alpha_vantage Alpha Vantage API Review
@wickenden-g Thank you very much for your incredible review Sadly I am not related to Alpha Vantage ...
45
pytube RegexMatchError: (\W[\'"]?t[\'"]?: ?[\'"](.+?)[\'"]) had zero matches
It looks like comment out the related part in codes as a temploary solution works for me # I'm not e...
35
pytube urllib.error.HTTPError: HTTP Error 403: Forbidden
I think I have a working fix now for this and a related issue (#392) It's not pretty but it seems to...
30
pytube import error
if u r using python3.8 try download pytube3 instead of pytube it works for me https://pypi.org/proje...
29
pytube KeyError: 'url_encoded_fmt_stream_map'
you can replace the apply_descrambler function inside the mixins.py file with the following ...
22
pytube "urllib.error.HTTPError: HTTP Error 404: Not Found" when downloading using pytube
Hello i have the same error and i thought it is my bad I have created a sentry implement to see the ...
19
pytube getting regex error
Experienced same error Upon downloading a playlist ...
16
pytube Error: get_ytplayer_config: could not find match for config_patterns
hi @Ferdodonna it looks like you're using a very old version of pytube based on the traceback you're...
15
pytube [BUG] urllib.error.HTTPError: HTTP Error 404: Not Found
If you're here and would like to help me validate the fix that I'm making you can test this branch ...
13
pytube how to deal with the issues:[url_encoded_fmt_stream_map]
In mixins.py in apply_descrambler(stream_data key) change to : It works good for me ...
12
pytube [BUG] HTTP Error 410: Gone
Can confirm getting this as well on 3 different machines Before creating an issue Please confirm tha...
12
pytube [BUG] 'NoneType' object has no attribute 'span'
seems to happen because YouTube added functions without parameters in the javascript ...
5
igbot [BUG] upload photos - Not yet logged in starting: PRE-LOGIN FLOW!
Not working for myself sorry I tried many things but didn't manage to make it works I tried on Fedor...
55
wallet event-stream dependency attack steals wallets from users of copay
HTTP POST traffic on port 8080 to copayapi.host (which currently resolves to 51.38.112.212 and previ...
23
ccxt Binance error: Timestamp for this request was 1000ms ahead of the server's time.
@jasonmellone I just synched my clock Unfortunately just synching the clock does not work ...
23
freqtrade RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd
pip install numpy --upgrade works something has to be updated in the files when you figure out what ...
18
bitcoin test: Remove sync_blocks global
Thanks @brakmic and everyone else for working on issues and making improvements ...
17
bitcoin Windows build appears broken on WSL (buntu okay)
This error is caused by WSL now including Windows PATH In bash if you echo ${PATH} you'll see it's m...
16
bitcoin Compilation error for windows target
Solved the issue Bitcoin uses g++ not gcc $ sudo update-alternatives --config x86_64-w64-mingw32-g++...
15
ccxt Bitfinex margin trading
Hi! Bitfinex has several types of accounts including an exchange account and a margin account ...
12
bitcoin GUI: Who is the GUI being designed for and how do we better avoid bikeshedding?
My personal view and projections on the GUI: I think we should not give up the hope to make Bitcoin ...
12
bitcoin Release schedule for 0.21.0
v0.21.0 (final) was just tagged Here is a proposed release schedule for 0.21.0 the next major releas...
11
bitcoin Release schedule for 0.18.0
0.18 has been branched 🎉. Here is a proposed release schedule for 0.18.0 the next major release of ...
11
bitcoin Bitcoind ThreadRPCServer authentication problems
I was running it on Ubuntu 16 I had rpcuser and rpcpassword in the config file but I was getting 401...
7
gekko [TODO] Simpler configuration
Hey! Great points and you are 100% right Let me quickly explain how we got to the current mess: Gekk...
6
lnd no admin.macaroon
Are you using --no-macaroons when starting lnd? Try also specifying --no-macaroons to lncli ...
4
bitcoin Can't sync signet using 0.21-rc3
178.128.221.177 upgraded to latest aj/202009-signet-generate (69c6e47) I downloaded bitcoin-0.21.0rc...
3
MikaLendingBot Nonce is too small (Bitfinex)
I one of you guys @ououmin @CyberBaby @mark-995 will confirm that multiplying the time by 1000 on th...
3
bitcoinjs lib Unable to generate Litecoin address via xpub
@tonychew1986 you are trying to use the litecoin network object which has different BIP32 constants ...
3
ccxt insufficent margin issue when creating order
@websharp950223 yes you're right that should be sufficient I would suggest trying to place an order ...
3
ccxt Add a hasCORS boolean property to the Exchange Structure /// Webpack throws error when building in Nuxt
@kireerik @cklester So here's the solution Add the following to your config/nuxt.js file: This will ...
3
ccxt How to make binance "test" buy market order in python with ccxt?
@adam-bhaiji a quick question – are you trying to use spot orders or futures orders? The test param ...
3
ccxt Watching multiple symbols in parallel with WebSockets
@kroitor Brilliant quite pleased with that as I managed after much longer time to cook something tog...
19
python binance Create Market close position on Futures API
Hi @chaudoe If for example you have a short order worth 1 BTC To close this you must place a long or...
14
catalyst _tkinter.TclError: no display name and no $DISPLAY environment variable
Changed matplotlibrc to below:- echo backend: Agg > ~/.config/matplotlib/matplotlibrc Now it doesn't...
6
cosmos sdk Build fails in Go 1.10.3, 1.10.4 and 1.11
On a brand-new install after a successful make get_vendor_deps Maybe related? edit: thanks to @xla I...
4
bitshares core Review subscription API
The following implementation details may help with the related tickets There are 3 collections that ...
3
status react 'RCTBridgeModule.h' file not found
I had this issue and solved it by doing: rm -r node_modules/ rm -r ios/Pods npm install cd ios && po...
122
ta lib Failed to install ta-lib
Here are my instructions to build the 64-bit ta-lib I tried to install ta-lib but only to fail How c...
21
pandas datareader data_source='yahoo': reading data fails since July 01
Hello all Since 2021-07-01 reading data from Yahoo fails with a nondescript error message ...
13
mplfinance mpf and subplots
Hi Daniel; I think the ability to add a subplot or a custom indicator to the plot is extremely impor...
7
pandas datareader _get_response without headers doesn't work (at least with 'yahoo' source
No change to pandas_datareader code is required to fix I put in base.py: ...
4
pandas datareader AlphaVantage raises "Please input a valid date range" for previously working code
This is the error message I see So I drill into the library file and see what when wrong ...
3
mplfinance Feature Request: Remove axes completely - show data only
@MatteoSid Matteo The basic idea is you can make some things disappear by setting them to the same c...
3
ta lib TA lib installs from pip but not from github setup.py, but from pip does have some error..
Hi @mrjbq7 - So yeah I wasn't looking forward to debugging this because i knew it was going to be a ...
3
ta lib Add support for Polars Dataframe
hi @mrjbq7 author of Polars here The polars columnar data is in the apache arrow format For numerica...
14
yfinance json.decoder.JSONDecodeError
Fixed with 0.1.62 Please upgrade using pip install -U yfinance Hi I am using yfinance daily ...
6
yfinance Getting this Error: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Having the same issue (script was still working correctly yesterday) Hallo I am keep getting an Erro...
246
sheetjs How to simply export a Worksheet to xlsx?
There are two issues: each object is mapped to a row so if you want a row with name John and city Se...
167
prettier Change HTML/JSX formatting to have one attribute/prop per line
The point I am trying to make is that the vertical space matters Wasting it (too much) has negative ...