diff options
Diffstat (limited to 'python/bbg_helpers.py')
| -rw-r--r-- | python/bbg_helpers.py | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/python/bbg_helpers.py b/python/bbg_helpers.py index 840ecc33..9c34899c 100644 --- a/python/bbg_helpers.py +++ b/python/bbg_helpers.py @@ -28,9 +28,13 @@ def init_bbg_session(ipaddr, port=8194): finally: session.stop() -def retreive_data(session, securities, fields, settle_date=None): +def retreive_data(session, securities, fields, settle_date=None, + start_date=None, end_date=None): refDataService = session.getService("//blp/refdata") - request = refDataService.createRequest("ReferenceDataRequest") + if start_date: + request = refDataService.createRequest("HistoricalDataRequest") + else: + request = refDataService.createRequest("ReferenceDataRequest") for security in securities: request.append("securities", security) for field in fields: @@ -40,6 +44,9 @@ def retreive_data(session, securities, fields, settle_date=None): o = overrides.appendElement() o.setElement("fieldId", "SETTLE_DT") o.setElement("value", "{0:%Y%m%d}".format(settle_date)) + if start_date: + request.set("startDate", "{0:%Y%m%d}".format(start_date)) + request.set("endDate", "{0:%Y%m%d}".format(end_date)) session.sendRequest(request) data = [] @@ -69,7 +76,7 @@ def process_msgs(data): fieldData = securityData.getElement("fieldData") for field in fieldData.elements(): if not field.isValid(): - print "Invalid field: {0}".format(str(field)) + logger.info("Invalid field: {0}".format(str(field))) elif field.isArray(): df = pd.DataFrame.from_dict( [{str(e.name()): e.getValue() for e in f.elements()} \ @@ -78,13 +85,21 @@ def process_msgs(data): else: row[str(field.name())] = field.getValue() newdata[securityName] = row + if msg.messageType() == blpapi.Name("HistoricalDataResponse"): + securityData = msg.getElement("securityData") + securityName = securityData.getElementValue("security") + fieldData = securityData.getElement("fieldData") + df = pd.DataFrame.from_dict([{str(e.name()): e.getValue() for e in f.elements()} \ + for f in fieldData.values()]) + df.convert_objects(convert_dates='coerce') + newdata[securityName] = df return newdata - if __name__=="__main__": - session = init_bbg_session('192.168.0.4', 8194) - fields = ['HIST_PRINCIPAL_DISTRIBUTED', 'HIST_LOSSES', 'MTG_HIST_FACT', - 'MTG_HIST_CPN', 'HIST_INTEREST_DISTRIBUTED'] - sec = ['45254NMV6 Mtge'] - data = retreive_data(session, sec, fields) + startdate = pd.datetime(2013, 1, 1) + enddate = pd.datetime(2015, 8, 7) + securities = ['CADUSD Curncy', "EURUSD Curncy"] + fields = ['PX_LAST'] + with init_bbg_session('192.168.0.4', 8194) as session: + data = retreive_data(session, securities, fields, start_date=startdate, end_date=enddate) test = process_msgs(data) |
