aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--python/bbg_helpers.py63
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))