diff options
Diffstat (limited to 'python/bbg_helpers.py')
| -rw-r--r-- | python/bbg_helpers.py | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/python/bbg_helpers.py b/python/bbg_helpers.py index bdf0dd22..b4892891 100644 --- a/python/bbg_helpers.py +++ b/python/bbg_helpers.py @@ -43,6 +43,7 @@ def append_overrides(request, d): else: o.setElement("value", v) + def event_loop(session, request): session.sendRequest(request) # Process received events @@ -56,10 +57,12 @@ def event_loop(session, request): if ev.eventType() == blpapi.Event.RESPONSE: return + def get_pythonvalue(e): if e.datatype() == blpapi.DataType.DATE: return pd.to_datetime(e.getValue()) elif e.datatype() == blpapi.DataType.DATETIME: + t = e.getValue() if isinstance(t, datetime.time): return t else: @@ -69,19 +72,22 @@ def get_pythonvalue(e): else: return e.getValue() + 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()]) + for f in field.values()]) if "date" in df: df = df.set_index('date') return df + def process_historical_msg(msg): securityData = msg.getElement("securityData") securityName = securityData.getElementValue("security") fieldData = securityData.getElement("fieldData") return {securityName: field_array_todf(fieldData)} + def process_reference_msg(msg): data = {} securityDataArray = msg.getElement("securityData") @@ -91,7 +97,7 @@ def process_reference_msg(msg): fieldData = securityData.getElement("fieldData") for field in fieldData.elements(): if not field.isValid(): - logger.info("Invalid field: {0}".format(str(field))) + logger.info(f"Invalid field: {str(field)}") elif field.isArray(): row[str(field.name())] = field_array_todf(field) #to convert dates to timestamps else: @@ -99,10 +105,12 @@ def process_reference_msg(msg): data[securityName] = row return data + 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={}, event_types=["TRADE"]): @@ -123,7 +131,7 @@ def retrieve_data(session, securities, fields=[], overrides={}, (only "TRADE", "BID" and "ASK" events seem to be working). """ refDataService = session.getService("//blp/refdata") - if isinstance(start_date, datetime.datetime) and start_date.time() != datetime.time(0): + if isinstance(start_date, datetime.datetime): request = refDataService.createRequest("IntradayTickRequest") for et in event_types: request.getElement("eventTypes").appendValue(et) @@ -192,14 +200,15 @@ def retrieve_data(session, securities, fields=[], overrides={}, else: return data -if __name__=="__main__": + +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'] with init_bbg_session(BBG_IP) as session: - hist_data = retrieve_data(session, securities, hist_fields, start_date=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) @@ -210,5 +219,10 @@ if __name__=="__main__": 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)) + 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) |
