Skip to content

Commit f1c5518

Browse files
committed
Format and cleanup
1 parent e04df2c commit f1c5518

File tree

3 files changed

+33
-15
lines changed

3 files changed

+33
-15
lines changed

src/opensignals/data/common.py

+11-7
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ def empty_df():
2323
"adj_close", "volume", "currency", "provider"])
2424

2525

26-
def get_tickers():
27-
ticker_map = pd.read_csv(SIGNALS_TICKER_MAP)
26+
def get_tickers(ticker_map):
27+
if ticker_map is None:
28+
ticker_map = pd.read_csv(SIGNALS_TICKER_MAP)
2829
ticker_map = ticker_map.dropna(subset=['yahoo'])
2930
logger.info(f'Number of eligible tickers: {ticker_map.shape[0]}')
3031

@@ -101,15 +102,18 @@ def get_data(
101102
db_dir,
102103
features_generators=None,
103104
last_friday=datetime.today() - relativedelta(weekday=FR(-1)),
104-
target='target_20d'):
105+
target='target_20d',
106+
ticker_map=None):
105107
"""generate data set"""
106108

107109
if features_generators is None:
108110
features_generators = []
109111

110112
ticker_data = get_ticker_data(db_dir)
111-
112-
ticker_universe = pd.read_csv(SIGNALS_UNIVERSE)
113+
if ticker_map is None:
114+
ticker_universe = pd.read_csv(SIGNALS_UNIVERSE)
115+
else:
116+
ticker_universe = ticker_map
113117
ticker_data = ticker_data[ticker_data.bloomberg_ticker.isin(
114118
ticker_universe['bloomberg_ticker'])]
115119

@@ -216,15 +220,15 @@ def download_tickers(tickers, start, download_ticker):
216220
return pd.concat(dfs)
217221

218222

219-
def download_data(db_dir, download_ticker, recreate=False):
223+
def download_data(db_dir, download_ticker, recreate=False, ticker_map=None):
220224
if recreate:
221225
logging.warning(f'Removing dataset {db_dir} to recreate it')
222226
shutil.rmtree(db_dir, ignore_errors=True)
223227

224228
db_dir.mkdir(exist_ok=True)
225229

226230
ticker_data = get_ticker_data(db_dir)
227-
ticker_map = get_tickers()
231+
ticker_map = get_tickers(ticker_map)
228232
ticker_missing = get_ticker_missing(ticker_data, ticker_map)
229233

230234
n_ticker_missing = ticker_missing.shape[0]

src/opensignals/data/fmp.py

+16-4
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@
1212
FMP_API_KEY = os.environ.get('FMP_API_KEY')
1313

1414

15+
def get_ticker_map():
16+
symbols = pd.read_json(f'''https://financialmodelingprep.com/api/v3/stock/list?apikey={FMP_API_KEY}''')
17+
stock_symbols = symbols[symbols['type'] == 'stock']
18+
stock_symbols['yahoo'] = stock_symbols['symbol']
19+
stock_symbols['bloomberg_ticker'] = np.where('.' not in stock_symbols['symbol'],
20+
stock_symbols['symbol'] + ' US',
21+
stock_symbols['symbol'])
22+
return stock_symbols[['bloomberg_ticker', 'yahoo']]
23+
24+
1525
def download_ticker(ticker, start_epoch, end_epoch):
1626
"""download data for a given ticker"""
1727
url = f'https://financialmodelingprep.com/api/v3/historical-price-full/{ticker}'
@@ -37,20 +47,22 @@ def download_ticker(ticker, start_epoch, end_epoch):
3747
return ticker, df.drop_duplicates().dropna()
3848

3949

40-
def download_data(db_dir, recreate=False):
50+
def download_data(db_dir, recreate=False, ticker_map=None):
4151
"""download (missing) data for the tickers in the universe using the fmp API"""
42-
return download_data_generic(db_dir, download_ticker, recreate)
52+
return download_data_generic(db_dir, download_ticker, recreate, ticker_map)
4353

4454

4555
def get_data(
4656
db_dir,
4757
features_generators=None,
4858
last_friday=dt.datetime.today() - relativedelta(weekday=FR(-1)),
49-
target='target_20d'
59+
target='target_20d',
60+
ticker_map=None
5061
):
5162
"""generate data set with the fmp API!"""
5263
return get_data_generic(
5364
db_dir,
5465
features_generators=features_generators,
5566
last_friday=last_friday,
56-
target=target)
67+
target=target,
68+
ticker_map=ticker_map)

src/opensignals/data/yahoo.py

+6-4
Original file line numberDiff line numberDiff line change
@@ -60,20 +60,22 @@ def download_ticker(ticker, start_epoch, end_epoch):
6060
return ticker, df.drop_duplicates().dropna()
6161

6262

63-
def download_data(db_dir, recreate=False):
63+
def download_data(db_dir, recreate=False, ticker_map=None):
6464
"""download (missing) data for the tickers in the universe using the Yahoo! Finance API"""
65-
return download_data_generic(db_dir, download_ticker, recreate)
65+
return download_data_generic(db_dir, download_ticker, recreate, ticker_map=ticker_map)
6666

6767

6868
def get_data(
6969
db_dir,
7070
features_generators=None,
7171
last_friday=dt.datetime.today() - relativedelta(weekday=FR(-1)),
72-
target='target_20d'
72+
target='target_20d',
73+
ticker_map=None
7374
):
7475
"""generate data set with the Yahoo! Finance API!"""
7576
return get_data_generic(
7677
db_dir,
7778
features_generators=features_generators,
7879
last_friday=last_friday,
79-
target=target)
80+
target=target,
81+
ticker_map=ticker_map)

0 commit comments

Comments
 (0)