Skip to content

Commit 7b598ce

Browse files
authored
Merge pull request #634 from addisonlynch/av-intraday
ENH: Add intraday time series for alpha vantage
2 parents 84cc797 + d1b751c commit 7b598ce

File tree

5 files changed

+28
-19
lines changed

5 files changed

+28
-19
lines changed

docs/source/remote_data.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ Through the
114114
endpoints, it is possible to obtain historical equities data for individual
115115
symbols. The following endpoints are available:
116116

117+
* ``av-intraday`` - Intraday Time Series
117118
* ``av-daily`` - Daily Time Series
118119
* ``av-daily-adjusted`` - Daily Time Series (Adjusted)
119120
* ``av-weekly`` - Weekly Time Series

docs/source/whatsnew/v0.8.0.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Enhancements
2626
~~~~~~~~~~~~
2727

2828
- Added Tiingo IEX Historical reader.
29+
- Added support for Alpha Vantage intraday time series prices (:issue: `631`)
2930
- Up to 15 years of historical prices from IEX with new platform, IEX Cloud
3031

3132
.. _whatsnew_080.api_breaking:

pandas_datareader/av/time_series.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ class AVTimeSeriesReader(AlphaVantage):
3535
"TIME_SERIES_WEEKLY": "Weekly Time Series",
3636
"TIME_SERIES_WEEKLY_ADJUSTED": "Weekly Adjusted Time Series",
3737
"TIME_SERIES_MONTHLY": "Monthly Time Series",
38-
"TIME_SERIES_MONTHLY_ADJUSTED": "Monthly Adjusted Time Series"
38+
"TIME_SERIES_MONTHLY_ADJUSTED": "Monthly Adjusted Time Series",
39+
"TIME_SERIES_INTRADAY": "Time Series (1min)"
3940
}
4041

4142
def __init__(self, symbols=None, function="TIME_SERIES_DAILY",
@@ -47,11 +48,11 @@ def __init__(self, symbols=None, function="TIME_SERIES_DAILY",
4748
pause=pause, session=session,
4849
api_key=api_key)
4950

50-
self.func = function
51+
self._func = function
5152

5253
@property
5354
def function(self):
54-
return self.func
55+
return self._func
5556

5657
@property
5758
def output_size(self):
@@ -67,12 +68,15 @@ def data_key(self):
6768

6869
@property
6970
def params(self):
70-
return {
71+
p = {
7172
"symbol": self.symbols,
7273
"function": self.function,
7374
"apikey": self.api_key,
7475
"outputsize": self.output_size
7576
}
77+
if self.function == "TIME_SERIES_INTRADAY":
78+
p.update({"interval": "1min"})
79+
return p
7680

7781
def _read_lines(self, out):
7882
data = super(AVTimeSeriesReader, self)._read_lines(out)

pandas_datareader/data.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ def DataReader(name, data_source=None, start=None, end=None,
298298
"tiingo", "yahoo-actions", "yahoo-dividends",
299299
"av-forex", "av-daily", "av-daily-adjusted",
300300
"av-weekly", "av-weekly-adjusted", "av-monthly",
301-
"av-monthly-adjusted", "econdb"]
301+
"av-monthly-adjusted", "av-intraday", "econdb"]
302302

303303
if data_source not in expected_source:
304304
msg = "data_source=%r is not implemented" % data_source
@@ -444,6 +444,13 @@ def DataReader(name, data_source=None, start=None, end=None,
444444
retry_count=retry_count, pause=pause,
445445
session=session, api_key=access_key).read()
446446

447+
elif data_source == "av-intraday":
448+
return AVTimeSeriesReader(symbols=name,
449+
function="TIME_SERIES_INTRADAY",
450+
start=start, end=end,
451+
retry_count=retry_count, pause=pause,
452+
session=session, api_key=access_key).read()
453+
447454
elif data_source == "econdb":
448455
return EcondbReader(symbols=name, start=start, end=end,
449456
retry_count=retry_count, pause=pause,

pandas_datareader/tests/av/test_av_time_series.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
TEST_API_KEY = None if not TEST_API_KEY else TEST_API_KEY
1212

1313

14+
@pytest.mark.skipif(TEST_API_KEY is None,
15+
reason="ALPHAVANTAGE_API_KEY not set")
1416
class TestAVTimeSeries(object):
1517

1618
@classmethod
@@ -29,15 +31,11 @@ def start(self):
2931
def end(self):
3032
return datetime(2017, 5, 24)
3133

32-
@pytest.mark.skipif(TEST_API_KEY is None,
33-
reason="ALPHAVANTAGE_API_KEY not set")
3434
def test_av_bad_symbol(self):
3535
with pytest.raises(ValueError):
3636
web.DataReader("BADTICKER", "av-daily", start=self.start,
3737
end=self.end)
3838

39-
@pytest.mark.skipif(TEST_API_KEY is None,
40-
reason="ALPHAVANTAGE_API_KEY not set")
4139
def test_av_daily(self):
4240
df = web.DataReader("AAPL", "av-daily", start=self.start, end=self.end)
4341
assert df.columns.equals(self.col_index)
@@ -52,8 +50,6 @@ def test_av_daily(self):
5250
assert expected2["close"] == 153.34
5351
assert expected2["high"] == 154.17
5452

55-
@pytest.mark.skipif(TEST_API_KEY is None,
56-
reason="ALPHAVANTAGE_API_KEY not set")
5753
def test_av_daily_adjusted(self):
5854
df = web.DataReader("AAPL", "av-daily-adjusted", start=self.start,
5955
end=self.end)
@@ -94,8 +90,6 @@ def _helper_df_weekly_monthly(df, adj=False):
9490
assert expected2["adjusted close"] == 141.4148
9591
assert expected2["dividend amount"] == 0.00
9692

97-
@pytest.mark.skipif(TEST_API_KEY is None,
98-
reason="ALPHAVANTAGE_API_KEY not set")
9993
def test_av_weekly(self):
10094
df = web.DataReader("AAPL", "av-weekly", start=self.start,
10195
end=self.end)
@@ -106,8 +100,6 @@ def test_av_weekly(self):
106100
assert df.columns.equals(self.col_index)
107101
self._helper_df_weekly_monthly(df, adj=False)
108102

109-
@pytest.mark.skipif(TEST_API_KEY is None,
110-
reason="ALPHAVANTAGE_API_KEY not set")
111103
def test_av_weekly_adjusted(self):
112104
df = web.DataReader("AAPL", "av-weekly-adjusted", start=self.start,
113105
end=self.end)
@@ -118,8 +110,6 @@ def test_av_weekly_adjusted(self):
118110
assert df.columns.equals(self.col_index_adj)
119111
self._helper_df_weekly_monthly(df, adj=True)
120112

121-
@pytest.mark.skipif(TEST_API_KEY is None,
122-
reason="ALPHAVANTAGE_API_KEY not set")
123113
def test_av_monthly(self):
124114
df = web.DataReader("AAPL", "av-monthly", start=self.start,
125115
end=self.end)
@@ -130,8 +120,6 @@ def test_av_monthly(self):
130120
assert df.columns.equals(self.col_index)
131121
self._helper_df_weekly_monthly(df, adj=False)
132122

133-
@pytest.mark.skipif(TEST_API_KEY is None,
134-
reason="ALPHAVANTAGE_API_KEY not set")
135123
def test_av_monthly_adjusted(self):
136124
df = web.DataReader("AAPL", "av-monthly-adjusted", start=self.start,
137125
end=self.end)
@@ -141,3 +129,11 @@ def test_av_monthly_adjusted(self):
141129
assert df.iloc[0].name == '2015-02-27'
142130
assert df.iloc[-1].name == '2017-04-28'
143131
self._helper_df_weekly_monthly(df, adj=True)
132+
133+
def test_av_intraday(self):
134+
# Not much available to test, but ensure close in length
135+
df = web.DataReader("AAPL", "av-intraday")
136+
137+
assert len(df) > 1000
138+
assert 'open' in df.columns
139+
assert 'close' in df.columns

0 commit comments

Comments
 (0)