Skip to content

Commit 7ed99c1

Browse files
committed
MOEX: Filtered data from the main board
1 parent 54faf4f commit 7ed99c1

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

pandas_datareader/moex.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ def _get_metadata(self):
102102
"""Get markets and engines for the given symbols"""
103103

104104
markets_n_engines = {}
105+
boards = {}
105106

106107
for symbol in self.symbols:
107108
response = self._get_response(self.__url_metadata.format(symbol=symbol))
@@ -130,6 +131,11 @@ def _get_metadata(self):
130131
markets_n_engines[symbol].append(
131132
(fields[5], fields[7])
132133
) # market and engine
134+
135+
if fields[14] == "1": # main board for symbol
136+
symbol = symbol.upper()
137+
boards[symbol] = fields[1]
138+
133139
if symbol not in markets_n_engines:
134140
raise IOError(
135141
"{} request returned no metadata: {}\n"
@@ -141,13 +147,14 @@ def _get_metadata(self):
141147
)
142148
if symbol in markets_n_engines:
143149
markets_n_engines[symbol] = list(set(markets_n_engines[symbol]))
144-
return markets_n_engines
150+
return markets_n_engines, boards
145151

146152
def read(self):
147153
"""Read data"""
148154

155+
markets_n_engines, boards = self._get_metadata()
149156
try:
150-
self.__markets_n_engines = self._get_metadata()
157+
self.__markets_n_engines = markets_n_engines
151158

152159
urls = self.url # generate urls per symbols
153160
dfs = [] # an array of pandas dataframes per symbol to concatenate
@@ -198,9 +205,16 @@ def read(self):
198205
"check URL or correct a date".format(self.__class__.__name__)
199206
)
200207
elif len(dfs) > 1:
201-
return concat(dfs, axis=0, join="outer", sort=True)
208+
b = concat(dfs, axis=0, join="outer", sort=True)
202209
else:
203-
return dfs[0]
210+
b = dfs[0]
211+
212+
result = pd.DataFrame()
213+
for secid in list(set(b["SECID"].tolist())):
214+
part = b[b["BOARDID"] == boards[secid]]
215+
result = result.append(part)
216+
result = result.drop_duplicates()
217+
return result
204218

205219
def _read_url_as_String(self, url, params=None):
206220
"""Open an url (and retry)"""

pandas_datareader/tests/test_moex.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ def test_moex_stock_datareader(self):
2121
df = web.DataReader(
2222
["GAZP", "SIBN"], "moex", start="2019-12-26", end="2019-12-26"
2323
)
24-
assert df.size == 740
24+
assert df.size == 74
25+
except HTTPError as e:
26+
pytest.skip(e)
27+
28+
def test_moex_datareader_filter(self):
29+
try:
30+
df = web.DataReader("SBER", "moex", start="2020-07-14", end="2020-07-14")
31+
assert len(df) == 1
2532
except HTTPError as e:
2633
pytest.skip(e)

0 commit comments

Comments
 (0)