aboutsummaryrefslogtreecommitdiffstats
path: root/python/bbg_helpers.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/bbg_helpers.py')
-rw-r--r--python/bbg_helpers.py101
1 files changed, 64 insertions, 37 deletions
diff --git a/python/bbg_helpers.py b/python/bbg_helpers.py
index 6205f7ab..1abac308 100644
--- a/python/bbg_helpers.py
+++ b/python/bbg_helpers.py
@@ -7,7 +7,8 @@ import datetime
logger = logging.getLogger(__name__)
-BBG_IP = ["guillaume-pc", "edwin-pc", '192.168.0.10', '192.168.0.12']
+BBG_IP = ["guillaume-pc", "edwin-pc", "192.168.0.10", "192.168.0.12"]
+
@contextmanager
def init_bbg_session(ip_list, port=8194):
@@ -33,8 +34,9 @@ def init_bbg_session(ip_list, port=8194):
finally:
session.stop()
+
def append_overrides(request, d):
- overrides = request.getElement('overrides')
+ overrides = request.getElement("overrides")
for k, v in d.items():
o = overrides.appendElement()
o.setElement("fieldId", k)
@@ -47,7 +49,7 @@ def append_overrides(request, d):
def event_loop(session, request):
session.sendRequest(request)
# Process received events
- while(True):
+ while True:
# We provide timeout to give the chance to Ctrl+C handling:
ev = session.nextEvent(500)
if ev.eventType() in [blpapi.Event.PARTIAL_RESPONSE, blpapi.Event.RESPONSE]:
@@ -76,10 +78,14 @@ def get_pythonvalue(e):
def field_array_todf(field):
- df = pd.DataFrame.from_dict([{str(e.name()): get_pythonvalue(e) for e in f.elements()} \
- for f in field.values()])
+ df = pd.DataFrame.from_dict(
+ [
+ {str(e.name()): get_pythonvalue(e) for e in f.elements()}
+ for f in field.values()
+ ]
+ )
if "date" in df:
- df = df.set_index('date')
+ df = df.set_index("date")
return df
@@ -101,7 +107,9 @@ def process_reference_msg(msg):
if not field.isValid():
logger.info(f"Invalid field: {str(field)}")
elif field.isArray():
- row[str(field.name())] = field_array_todf(field) #to convert dates to timestamps
+ row[str(field.name())] = field_array_todf(
+ field
+ ) # to convert dates to timestamps
else:
row[str(field.name())] = get_pythonvalue(field)
data[securityName] = row
@@ -113,9 +121,17 @@ def process_intraday_tick_msg(msg):
return field_array_todf(tickdata)
-def retrieve_data(session, securities, fields=[], overrides={},
- start_date=None, end_date=None, frequency="DAILY",
- options={}, event_types=["TRADE"]):
+def retrieve_data(
+ session,
+ securities,
+ fields=[],
+ overrides={},
+ start_date=None,
+ end_date=None,
+ frequency="DAILY",
+ options={},
+ event_types=["TRADE"],
+):
"""
Convenience function to retrieve data from the Bloomberg API.
@@ -154,7 +170,7 @@ def retrieve_data(session, securities, fields=[], overrides={},
else:
request.set("security", securities)
else:
- if hasattr(securities, '__iter__'):
+ if hasattr(securities, "__iter__"):
for security in securities:
request.append("securities", security)
else:
@@ -171,12 +187,12 @@ def retrieve_data(session, securities, fields=[], overrides={},
if start_date:
if request.asElement().name() == blpapi.Name("IntradayTickRequest"):
- start_date = timezone('America/New_York').localize(start_date)
- start_date = start_date.astimezone(timezone('GMT'))
+ start_date = timezone("America/New_York").localize(start_date)
+ start_date = start_date.astimezone(timezone("GMT"))
request.set("startDateTime", start_date)
if end_date:
- end_date = timezone('America/New_York').localize(end_date)
- end_date = end_date.astimezone(timezone('GMT'))
+ end_date = timezone("America/New_York").localize(end_date)
+ end_date = end_date.astimezone(timezone("GMT"))
request.set("endDateTime", end_date)
else:
request.set("startDate", "{:%Y%m%d}".format(start_date))
@@ -185,8 +201,8 @@ def retrieve_data(session, securities, fields=[], overrides={},
data = {}
for msg in event_loop(session, request):
- if msg.hasElement('responseError'):
- logger.error(msg.getElement('responseError').getElementAsString('message'))
+ if msg.hasElement("responseError"):
+ logger.error(msg.getElement("responseError").getElementAsString("message"))
continue
if msg.messageType() == blpapi.Name("ReferenceDataResponse"):
data.update(process_reference_msg(msg))
@@ -196,8 +212,8 @@ def retrieve_data(session, securities, fields=[], overrides={},
data.update(process_intraday_tick_msg(msg))
if request.asElement().name() == blpapi.Name("IntradayTickRequest"):
df = pd.DataFrame(data)
- if 'time' in df:
- df.time = df.time.dt.tz_convert('America/New_York')
+ if "time" in df:
+ df.time = df.time.dt.tz_convert("America/New_York")
return df
else:
return data
@@ -205,26 +221,37 @@ def retrieve_data(session, securities, fields=[], overrides={},
if __name__ == "__main__":
testdate = pd.datetime(2013, 1, 1)
- hist_securities = ['CADUSD Curncy', "EURUSD Curncy"]
- hist_fields = ['PX_LAST']
- securities = ['004421BW2 Mtge', '75157EAE2 Mtge', 'XS0295516776 Mtge']
- fields = ['CUR_CPN', 'START_ACC_DT']
+ hist_securities = ["CADUSD Curncy", "EURUSD Curncy"]
+ hist_fields = ["PX_LAST"]
+ securities = ["004421BW2 Mtge", "75157EAE2 Mtge", "XS0295516776 Mtge"]
+ fields = ["CUR_CPN", "START_ACC_DT"]
with init_bbg_session(BBG_IP) as session:
- hist_data = retrieve_data(session, securities, hist_fields, start_date=testdate.date(),
- frequency="MONTHLY")
- overrides={'SETTLE_DT': testdate}
+ hist_data = retrieve_data(
+ session,
+ securities,
+ hist_fields,
+ start_date=testdate.date(),
+ frequency="MONTHLY",
+ )
+ 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(2018, 5, 18, 9),
- end_date=datetime.datetime(2018, 9, 18, 9))
+ 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(2018, 5, 18, 9),
+ end_date=datetime.datetime(2018, 9, 18, 9),
+ )
today = datetime.datetime.today()
yesterday = today - datetime.timedelta(days=1)
- tick_data = retrieve_data(session, "GOOG US Equity",
- start_date=yesterday,
- end_date=today)
+ tick_data = retrieve_data(
+ session, "GOOG US Equity", start_date=yesterday, end_date=today
+ )