bpsmith / tia

Toolkit for integration and analysis
BSD 3-Clause "New" or "Revised" License
404 stars 165 forks source link

tia.bbg override for reference data #31

Open aromero2007 opened 6 years ago

aromero2007 commented 6 years ago

Hi,

Was trying to get a forward settle date with start date in the past (the settle date of 1month forward of 27May2017, for example) but can't figure out how to get it from tia.bbg. As far as I know, maybe I need to use a override to get historical reference data. The following BBG Example does work, but don't know how to adapt it. Is there a way to get the value from tia?

`import blpapi
from optparse import OptionParser

SECURITY_DATA = blpapi.Name("securityData")
SECURITY = blpapi.Name("security")
FIELD_DATA = blpapi.Name("fieldData")
FIELD_EXCEPTIONS = blpapi.Name("fieldExceptions")
FIELD_ID = blpapi.Name("fieldId")
ERROR_INFO = blpapi.Name("errorInfo")

def parseCmdLine():
    parser = OptionParser(description="Retrieve reference data.")
    parser.add_option("-a",
                      "--ip",
                      dest="host",
                      help="server name or IP (default: %default)",
                      metavar="ipAddress",
                      default="localhost")
    parser.add_option("-p",
                      dest="port",
                      type="int",
                      help="server port (default: %default)",
                      metavar="tcpPort",
                      default=8194)

    (options, args) = parser.parse_args()

    return options

def processMessage(msg):
    if not msg.hasElement(SECURITY_DATA):
        print "Unexpected message:"
        print msg
        return

    securityDataArray = msg.getElement(SECURITY_DATA)
    for securityData in securityDataArray.values():
        print securityData.getElementAsString(SECURITY)
        fieldData = securityData.getElement(FIELD_DATA)
        for field in fieldData.elements():
            if field.isValid():
                print field.name(), "=", field.getValueAsString()
            else:
                print field.name(), " is NULL"

        fieldExceptionArray = securityData.getElement(FIELD_EXCEPTIONS)
        for fieldException in fieldExceptionArray.values():
            errorInfo = fieldException.getElement(ERROR_INFO)
            print errorInfo.getElementAsString("category"), ":", \
                fieldException.getElementAsString(FIELD_ID)

        print

def main():
    global options
    options = parseCmdLine()

    # Fill SessionOptions
    sessionOptions = blpapi.SessionOptions()
    sessionOptions.setServerHost(options.host)
    sessionOptions.setServerPort(options.port)

    print "Connecting to %s:%d" % (options.host, options.port)

    # Create a Session
    session = blpapi.Session(sessionOptions)

    # Start a Session
    if not session.start():
        print "Failed to start session."
        return

    if not session.openService("//blp/refdata"):
        print "Failed to open //blp/refdata"
        return

    refDataService = session.getService("//blp/refdata")
    request = refDataService.createRequest("ReferenceDataRequest")

    # append securities to request
    request.append("securities", "CHN1M Curncy")

    # append fields to request
    request.append("fields", "SETTLE_DT")

    # add overrides
    overrides = request.getElement("overrides")
    override1 = overrides.appendElement()
    override1.setElement("fieldId", "REFERENCE_DATE")
    override1.setElement("value", "20170517")

    print "Sending Request:", request
    cid = session.sendRequest(request)

    try:
        # Process received events
        while(True):
            # We provide timeout to give the chance to Ctrl+C handling:
            ev = session.nextEvent(500)
            for msg in ev:
                if cid in msg.correlationIds():
                    processMessage(msg)
            # Response completly received, so we could exit
            if ev.eventType() == blpapi.Event.RESPONSE:
                break
    finally:
        # Stop the session
        session.stop()

if __name__ == "__main__":
    print "SimpleRefDataOverrideExample"
    try:
        main()
    except KeyboardInterrupt:
        print "Ctrl+C pressed. Stopping..."`

Thanks

Aryalexa commented 3 years ago

Hello,

Time has past but just wanted to clear this. And say that for overrides with dates this is the format that works (YYYYMMDD).

from tia.bbg import LocalTerminal

secs = ["CHN1M Curncy"]
flds = ["SETTLE_DT"]
resp = LocalTerminal.get_reference_data(secs, flds, ignore_field_error=1, REFERENCE_DATE="20170517")
df = resp.as_frame()

image

Cheers.