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.py28
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)