diff options
| -rw-r--r-- | python/bbg_helpers.py | 63 |
1 files changed, 52 insertions, 11 deletions
diff --git a/python/bbg_helpers.py b/python/bbg_helpers.py index adc78b9e..269ea899 100644 --- a/python/bbg_helpers.py +++ b/python/bbg_helpers.py @@ -95,8 +95,13 @@ def process_reference_msg(msg): data[securityName] = row return data -def retrieve_data(session, securities, fields, overrides={}, - start_date=None, end_date=None, frequency="DAILY"): +def process_intraday_tick_msg(msg): + _, tickdata = msg.getElement("tickData").elements() + return field_array_todf(tickdata) + +def retrieve_data(session, securities, fields=[], overrides={}, + start_date=None, end_date=None, frequency="DAILY", + options={}): """ Convenience function to retrieve data from the Bloomberg API. @@ -112,27 +117,50 @@ def retrieve_data(session, securities, fields, overrides={}, frequency : One of "DAILY", "MONTHLY", "QUARTERLY", "YEARLY" """ refDataService = session.getService("//blp/refdata") - if start_date: + if isinstance(start_date, datetime.datetime) and start_date.time() != datetime.time(0): + request = refDataService.createRequest("IntradayTickRequest") + request.getElement("eventTypes").appendValue("TRADE") + request.set("includeConditionCodes", True) + elif isinstance(start_date, datetime.date): request = refDataService.createRequest("HistoricalDataRequest") request.set("periodicitySelection", frequency) else: request = refDataService.createRequest("ReferenceDataRequest") - if isinstance(securities, list): - for security in securities: - request.append("securities", security) + + if options: + for k, v in options.items(): + request.set(k, v) + + if request.asElement().name() == blpapi.Name("IntradayTickRequest"): + if isinstance(securities, list): + raise TypeError("For intraday requests, we can only handle one security") + else: + request.set("security", securities) else: - request.append("securities", securities) + if isinstance(securities, list): + for security in securities: + request.append("securities", security) + else: + request.append("securities", securities) + if isinstance(fields, list): for field in fields: request.append("fields", field) else: request.append("fields", fields) + if overrides: append_overrides(request, overrides) + if start_date: - request.set("startDate", "{0:%Y%m%d}".format(start_date)) - if end_date: - request.set("endDate", "{0:%Y%m%d}".format(end_date)) + if request.asElement().name() == blpapi.Name("IntradayTickRequest"): + request.set("startDateTime", start_date) + if end_date: + request.set("endDateTime", end_date) + else: + request.set("startDate", f"{start_date:%Y%m%d}") + if end_date: + request.set("endDate", f"{end_date:%Y%m%d}") data = {} for msg in event_loop(session, request): @@ -140,7 +168,12 @@ def retrieve_data(session, securities, fields, overrides={}, data.update(process_reference_msg(msg)) elif msg.messageType() == blpapi.Name("HistoricalDataResponse"): data.update(process_historical_msg(msg)) - return data + elif msg.messageType() == blpapi.Name("IntradayTickResponse"): + data.update(process_intraday_tick_msg(msg)) + if request.asElement().name() == blpapi.Name("IntradayTickRequest"): + return pd.DataFrame(data) + else: + return data if __name__=="__main__": testdate = pd.datetime(2013, 1, 1) @@ -154,3 +187,11 @@ if __name__=="__main__": overrides={'SETTLE_DT': testdate} ref_data = retrieve_data(session, securities, fields, overrides=overrides) struct_data = retrieve_data(session, securities, ["HIST_CASH_FLOW"]) + spx_ndx_monthly = retrieve_data(session, ["SPX Index","NDX Index"], + fields=["PX_LAST"], + start_date=datetime.date(2012, 1, 1), + options={'periodicityAdjustment': 'ACTUAL'}, + frequency="MONTHLY") + trace_data = retrieve_data(session, "BNCMT 2007-1 A5@TRAC Mtge", + start_date=datetime.datetime(2016, 5, 18, 9), + end_date=datetime.datetime(2017, 5, 18, 9)) |
