コード例 #1
0
def main():
    """Main function"""

    options = parseCmdLine()

    # Fill SessionOptions
    sessionOptions = prepareZfpSessionOptions(options) \
        if options.remote \
        else prepareStandardSessionOptions(options)
    sessionOptions.setAuthenticationOptions(options.auth['option'])
    sessionOptions.setAutoRestartOnDisconnection(True)

    session = blpapi.Session(sessionOptions)

    if not session.start():
        print("Failed to start session.")
        return

    subscriptionIdentity = session.createIdentity()

    if options.auth['option']:
        isAuthorized = False
        authServiceName = "//blp/apiauth"
        if session.openService(authServiceName):
            authService = session.getService(authServiceName)
            isAuthorized = authorize(
                authService, subscriptionIdentity, session,
                blpapi.CorrelationId("auth"),
                options.auth.get('manual'))
        if not isAuthorized:
            print("No authorization")
            return

    subscriptions = blpapi.SubscriptionList()
    for t in options.topics:
        topic = options.service + t
        subscriptions.add(topic,
                          options.fields,
                          options.options,
                          blpapi.CorrelationId(topic))

    session.subscribe(subscriptions, subscriptionIdentity)

    try:
        eventCount = 0
        while True:
            # Specify timeout to give a chance for Ctrl-C
            event = session.nextEvent(1000)
            for msg in event:
                if event.eventType() == blpapi.Event.SUBSCRIPTION_STATUS or \
                        event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                    print("%s - %s" % (msg.correlationIds()[0].value(), msg))
                else:
                    print(msg)
            if event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                eventCount += 1
                if eventCount >= options.maxEvents:
                    break
    finally:
        session.stop()
コード例 #2
0
ファイル: requests.py プロジェクト: rockscie/async_blp
    def create_subscription(
            self, corr_id: blpapi.CorrelationId) -> blpapi.SubscriptionList:
        subscription = blpapi.SubscriptionList()
        for security in self.securities:
            subscription.add(security, self._fields, correlationId=corr_id)

        return subscription
コード例 #3
0
def main():
    """Main function"""

    options = parseCmdLine()

    # Fill SessionOptions
    sessionOptions = prepareZfpSessionOptions(options) \
        if options.remote \
        else prepareStandardSessionOptions(options)
    sessionOptions.setSessionIdentityOptions(options.auth['option'])

    session = blpapi.Session(sessionOptions)
    try:
        if not session.start():
            checkFailures(session)
            print("Failed to start session.")
            return

        if not session.openService(options.service):
            checkFailures(session)
            return

        subscriptions = blpapi.SubscriptionList()
        for t in options.topics:
            topic = options.service + t
            subscriptions.add(topic, options.fields, options.options,
                              blpapi.CorrelationId(topic))
        session.subscribe(subscriptions)

        processSubscriptionEvents(session, options.maxEvents)
    finally:
        session.stop()
コード例 #4
0
def subscribe(session, options, identity=None):
    sl = blpapi.SubscriptionList()
    for s in options.securities:
        topic = topicName(s)
        cid = blpapi.CorrelationId(s)
        print("Subscribing {0} => {1}".format(cid, topic))
        sl.add(topic, options.fields, correlationId=cid)
    session.subscribe(sl, identity)
コード例 #5
0
    def subscribe(self, topics, fields, options, identity):
        """Subscribes to the provided service/topics."""

        subscription_list = blpapi.SubscriptionList()
        for topic in topics:
            subscription_list.add(topic, fields, options,
                                  blpapi.CorrelationId(topic))
        self._session.subscribe(subscription_list, identity)
コード例 #6
0
def main():
    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/mktdata"):
        print("Failed to open //blp/mktdata")
        return

    security1 = "IBM US Equity"
    security2 = "/cusip/912828GM6@BGN"

    subscriptions = blpapi.SubscriptionList()
    subscriptions.add(security1,
                      "LAST_PRICE,BID,ASK",
                      "",
                      blpapi.CorrelationId(security1))
    subscriptions.add(security2,
                      "LAST_PRICE,BID,ASK,BID_YIELD,ASK_YIELD",
                      "",
                      blpapi.CorrelationId(security2))

    session.subscribe(subscriptions)

    try:
        # Process received events
        eventCount = 0
        while(True):
            # We provide timeout to give the chance to Ctrl+C handling:
            event = session.nextEvent(500)
            for msg in event:
                if event.eventType() == blpapi.Event.SUBSCRIPTION_STATUS or \
                        event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                    print("%s - %s" % (msg.correlationIds()[0].value(), msg))
                else:
                    print(msg)
            if event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                eventCount += 1
                if eventCount >= options.maxEvents:
                    break
    finally:
        # Stop the session
        session.stop()
コード例 #7
0
def subscribe():
    # Create a SubscriptionList and populate it with securities, fields etc
    subscriptions = blpapi.SubscriptionList()

    for i, security in enumerate(g_securities):
        subscriptions.add(security, g_fields, g_options,
                          blpapi.CorrelationId(i))

    print("Subscribing...")
    g_session.subscribe(subscriptions, g_identity)
コード例 #8
0
def main():
    options = parseCmdLine()

    # Fill SessionOptions
    sessionOptions = blpapi.SessionOptions()
    for idx, host in enumerate(options.hosts):
        sessionOptions.setServerAddress(host, options.port, idx)
    sessionOptions.setSessionIdentityOptions(options.auth['option'])
    sessionOptions.setAutoRestartOnDisconnection(True)

    # NOTE: If running without a backup server, make many attempts to
    # connect/reconnect to give that host a chance to come back up (the
    # larger the number, the longer it will take for SessionStartupFailure
    # to come on startup, or SessionTerminated due to inability to fail
    # over).  We don't have to do that in a redundant configuration - it's
    # expected at least one server is up and reachable at any given time,
    # so only try to connect to each server once.
    sessionOptions.setNumStartAttempts(1 if len(options.hosts) > 1 else 1000)

    print("Connecting to port %d on %s" %
          (options.port, ", ".join(options.hosts)))

    session = blpapi.Session(sessionOptions)

    if not session.start():
        print("Failed to start session.")
        return

    topic = options.service + "/1245/4/5"
    topic2 = options.service + "/330/1/1"
    subscriptions = blpapi.SubscriptionList()
    subscriptions.add(topic, correlationId=blpapi.CorrelationId(topic))
    subscriptions.add(topic2, correlationId=blpapi.CorrelationId(topic2))

    session.subscribe(subscriptions)

    try:
        eventCount = 0
        while True:
            # Specify timeout to give a chance for Ctrl-C
            event = session.nextEvent(1000)
            for msg in event:
                if event.eventType() == blpapi.Event.SUBSCRIPTION_STATUS or \
                        event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                    print("%s - %s" % (msg.correlationIds()[0].value(), msg))
                else:
                    print(msg)
            if event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                eventCount += 1
                if eventCount >= options.maxEvents:
                    break
    finally:
        session.stop()
コード例 #9
0
    def subscribe(self, topic, message_handler):
        try:
            self.next_cor_id+=1
            c_id = blpapi.CorrelationId(self.next_cor_id)
            subscriptions = blpapi.SubscriptionList()
            subscriptions.add(topic=topic, correlationId=c_id)
            self.session.subscribe(subscriptions)
            self.subscription_message_handlers[c_id.value()] = message_handler
#            print("Request submitted (" + str(cID)  + "): \n" + str(topic))
            
        except Exception as err:
            print("EasyMSX >>  Error subscribing to topic: " + str(err))
コード例 #10
0
 def __init__(self, handler=None):
     self.correlation_ids = defaultdict(dict)
     if handler is None:
         handler = br.processEvent
     self.event_handler = handler
     self.dispatcher = bb.EventDispatcher(10)
     super(Session, self).__init__(SESSION_OPTIONS,
           self.event_handler, self.dispatcher)
     self.dispatcher.start()
     self.started = False
     self.queue = Queue()
     self.subscription_list = bb.SubscriptionList()
     self.start_session()
コード例 #11
0
def main():
    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/mktdata"):
        print("Failed to open //blp/mktdata")
        return

    securities = ["IBM US Equity", "VOD LN Equity"]
    gridWindow = GridWindow("SecurityInfo", securities)

    subscriptions = blpapi.SubscriptionList()
    for i, security in enumerate(securities):
        subscriptions.add(security,
                          "LAST_PRICE",
                          "",
                          blpapi.CorrelationId(i))

    session.subscribe(subscriptions)

    try:
        # Process received events
        eventCount = 0
        while(True):
            # We provide timeout to give the chance to Ctrl+C handling:
            event = session.nextEvent(500)
            if event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                for msg in event:
                    row = msg.correlationIds()[0].value()
                    gridWindow.processSecurityUpdate(msg, row)

                eventCount += 1
                if eventCount >= options.maxEvents:
                    break
    finally:
        # Stop the session
        session.stop()
コード例 #12
0
    def createIOISubscription(self, session):

        print("Create IOI subscription")

        #Create the topic string for the ioi subscription.
        ioiTopic = d_ioi + "/ioi"

        subscriptions = blpapi.SubscriptionList()

        subscriptions.add(topic=ioiTopic, correlationId=ioiSubscriptionID)

        print("Sending subscription: " + ioiTopic)

        session.subscribe(subscriptions)
コード例 #13
0
		def add_subscription(self, security):
			try:
				self.next_cor_id+=1
				c_id = blpapi.CorrelationId(self.next_cor_id)
				subscriptions = blpapi.SubscriptionList()
				flds = ""
				for s in self.subscription_fields:
					flds += s + ","
				subscriptions.add(security.name, flds[:-1], "", c_id)
				self.session.subscribe(subscriptions)
				self.subscription_message_handlers[c_id.value()] = security.process_message
				print("Request submitted (" + str(c_id.value()) + "): " + security.name + "/" +str(flds[:-1])+"\n")

			except Exception as err:
				print("EasyIOI >> Error subscribing to topic: " + str(err))
コード例 #14
0
def main():
    options = parseCmdLine()

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

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

    eventHandler = SubscriptionEventHandler()
    # Create a Session
    session = blpapi.Session(sessionOptions, eventHandler.processEvent)

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

    print("Connected successfully")

    service = "//blp/mktdata"
    if not session.openService(service):
        print("Failed to open %s service" % service)
        return

    subscriptions = blpapi.SubscriptionList()
    for t in options.topics:
        topic = service
        if not t.startswith("/"):
            topic += "/"
        topic += t
        subscriptions.add(topic, options.fields, options.options,
                          blpapi.CorrelationId(t))

    print("Subscribing...")
    session.subscribe(subscriptions)

    # timer
    timer_func()

    while 1:
        now = getCurrentDateTime()
        # force to exit the program including all sub-thread
        if now.time() > dt.time(16, 10):
            _thread.interrupt_main()
        continue
コード例 #15
0
def main():
    options = parseCmdLine()

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

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

    eventHandler = SubscriptionEventHandler()
    # Create a Session
    session = blpapi.Session(sessionOptions, eventHandler.processEvent)

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

    print("Connected successfully")

    service = "//blp/mktdata"
    if not session.openService(service):
        print("Failed to open %s service" % service)
        return

    subscriptions = blpapi.SubscriptionList()
    for t in options.topics:
        topic = service
        if not t.startswith("/"):
            topic += "/"
        topic += t
        subscriptions.add(topic, options.fields, options.options,
                          blpapi.CorrelationId(t))

    print("Subscribing...")
    session.subscribe(subscriptions)

    try:
        # Wait for enter key to exit application
        print("Press ENTER to quit")
        input()
    finally:
        # Stop the session
        session.stop()
コード例 #16
0
 def unsubscribe(self,securities,fields,options=[]):
     subscriptions = blpapi.SubscriptionList()
     try:
         service = "//blp/mktdata"
         id=[]
         for t in securities:
             topic = service
             if not t.startswith("/"):
                 topic += "/"
             topic += t
             id.append(blpapi.CorrelationId(t)) #blpapi.CorrelationId(t)
             subscriptions.add(topic, fields, options,
                               id[-1])
         print("UnSubscribing...")
         self.session_live.unsubscribe(subscriptions)
     except Exception as e:
         print("Error Unsubscribing")
         uu.printException(e)
コード例 #17
0
    def _init(self):
        # init session
        opts = blpapi.SessionOptions()
        opts.setServerHost(self.host)
        opts.setServerPort(self.port)
        self.session = session = blpapi.Session(opts)
        if not session.start():
            raise Exception("failed to start session")

        if not session.openService("//blp/mktdata"):
            raise Exception("failed to open service")

        # init subscriptions
        subs = blpapi.SubscriptionList()
        flds = ",".join(self.fields)
        istr = self.interval and "interval=%.1f" % self.interval or ""
        for ticker in self.tickers:
            subs.add(ticker, flds, istr, blpapi.CorrelationId(ticker))
        session.subscribe(subs)
コード例 #18
0
    def subscribe(self, securities, fields, options=[]):
        try:
            subscriptions = blpapi.SubscriptionList()

            service = "//blp/mktdata"
            id = []
            for t in securities:
                topic = service
                if not t.startswith("/"):
                    topic += "/"
                topic += t
                id.append(blpapi.CorrelationId(t)) #blpapi.CorrelationId(t)
                subscriptions.add(topic, fields, options, id[-1])

            print("Subscribing...")
            self.session_live.subscribe(subscriptions)
        except Exception as ex:
            print("Subscription Failed")
            uu.printException(ex)
            return None
        return id
コード例 #19
0
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)

    myEventHandler = MyEventHandler()
    # Create a Session
    session = blpapi.Session(sessionOptions, myEventHandler.processEvent)

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

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

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

    print "Subscribing to IBM US Equity"
    cid = blpapi.CorrelationId(1)
    subscriptions = blpapi.SubscriptionList()
    subscriptions.add("IBM US Equity", "LAST_PRICE", "", cid)
    session.subscribe(subscriptions)

    print "Requesting reference data IBM US Equity"
    refDataService = session.getService("//blp/refdata")
    request = refDataService.createRequest("ReferenceDataRequest")
    request.append("securities", "IBM US Equity")
    request.append("fields", "DS002")

    cid2 = blpapi.CorrelationId(2)
    eventQueue = blpapi.EventQueue()
    session.sendRequest(request, correlationId=cid2, eventQueue=eventQueue)

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

        # Wait for enter key to exit application
        print "Press ENTER to quit"
        raw_input()
    finally:
        # Stop the session
        session.stop()
コード例 #20
0
            # Step though and delete broken connections
            for failed in xList:
                if failed == self.socket:
                    logging.error("Socket broke")
                    for fileno, conn in self.connections:
                        conn.close()
                    self.running = False


############# BLOOMBERG ##################
import blpapi
## List of monitored Stocks
STOCKS = []
LIST_OF_STOCKWATCH = []
SUBSCRIPTIONS = blpapi.SubscriptionList()
SESSION = None
SUBSCRIBED = False
KEY_CONN_DICT = {}
# key to connections[]


class StockWatch:
    def __init__(self, key, stock_name, above_or_below, price):
        self.key = key
        self.stock_name = stock_name
        self.above_or_below = above_or_below
        self.price = price
        self.triggered = False
        self.myId = stock_name + str(above_or_below) + str(int(price * 100))
        print(self.myId)
コード例 #21
0
def main():
    global options
    options = parseCmdLine()

    # Fill SessionOptions
    sessionOptions = blpapi.SessionOptions()
    for idx, host in enumerate(options.hosts):
        sessionOptions.setServerAddress(host, options.port, idx)
    sessionOptions.setAuthenticationOptions(options.auth)
    sessionOptions.setAutoRestartOnDisconnection(True)

    # NOTE: If running without a backup server, make many attempts to
    # connect/reconnect to give that host a chance to come back up (the
    # larger the number, the longer it will take for SessionStartupFailure
    # to come on startup, or SessionTerminated due to inability to fail
    # over).  We don't have to do that in a redundant configuration - it's
    # expected at least one server is up and reachable at any given time,
    # so only try to connect to each server once.
    sessionOptions.setNumStartAttempts(1 if len(options.hosts) > 1 else 1000)

    print "Connecting to port %d on %s" % (options.port, ", ".join(
        options.hosts))

    session = blpapi.Session(sessionOptions)

    if not session.start():
        print "Failed to start session."
        return

    subscriptionIdentity = session.createIdentity()

    if options.auth:
        isAuthorized = False
        authServiceName = "//blp/apiauth"
        if session.openService(authServiceName):
            authService = session.getService(authServiceName)
            isAuthorized = authorize(authService, subscriptionIdentity,
                                     session, blpapi.CorrelationId("auth"))
        if not isAuthorized:
            print "No authorization"
            return

    subscriptions = blpapi.SubscriptionList()
    for t in options.topics:
        topic = options.service + t
        subscriptions.add(topic, options.fields, options.options,
                          blpapi.CorrelationId(topic))

    session.subscribe(subscriptions, subscriptionIdentity)

    try:
        eventCount = 0
        while True:
            # Specify timeout to give a chance for Ctrl-C
            event = session.nextEvent(1000)
            for msg in event:
                if event.eventType() == blpapi.Event.SUBSCRIPTION_STATUS or \
                        event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                    print "%s - %s" % (msg.correlationIds()[0].value(), msg)
                else:
                    print msg
            if event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:
                eventCount += 1
                if eventCount >= options.maxEvents:
                    break
    finally:
        session.stop()
コード例 #22
0
ファイル: app.py プロジェクト: marqueurs404/Bloomberg_Flask
        def bloomberg_subscribe():
            # Bloomberg API runs on localhost:8194
            options = {'host': 'localhost', 'port': 8194}

            # securities you want data of
            securities = [
                "XAU Curncy", "COA Comdty", "GI1 Index", "SPX INDEX",
                "FSSTI Index", "HSI Index", "BDIY Index"
            ]

            # fields which you want to get the data of
            fields = ["LAST_PRICE", "RT_PX_CHG_NET_1D", "RT_PX_CHG_PCT_1D"]

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

            self.logger.info("Bloomberg API - Connecting to %s:%d" %
                             (options['host'], options['port']))

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

            # Start a Session
            if not session.start():
                event = session.nextEvent()
                for msg in event:
                    self.logger.error(msg)
                self.logger.error("Failed to start session.")
                return 1
            else:
                self.logger.info("Bloomberg session started")

            if not session.openService("//blp/mktdata"):
                self.logger.error("Failed to open //blp/mktdata")
                return 1
            else:
                self.logger.info("Opening service to //blp/mktdata")

            # Creating subscriptions to required Bloomberg data
            subscriptions = blpapi.SubscriptionList()
            for sec in securities:
                subscriptions.add(sec, fields, "", blpapi.CorrelationId(sec))

            session.subscribe(subscriptions)

            try:
                # Handle received events in an event loop
                eventCount = 4950
                self.logger.info("Subscription begins")
                while (True):
                    event = session.nextEvent(500)
                    eventCount = (eventCount + 1) % 5001
                    # self.market_data.append({"TIME_RETRIEVED": str(datetime.now())})

                    for msg in event:
                        # NOTE: To print the entire message for debugging:
                        # print("%s - %s" % (msg.correlationIds()[0].value(), msg))
                        if event.eventType(
                        ) == blpapi.Event.SUBSCRIPTION_DATA and msg.hasElement(
                                fields[0]):

                            d = {}
                            d["TITLE"] = msg.correlationIds()[0].value()
                            d['TIME_RETRIEVED'] = str(datetime.now())

                            for field_name in fields:
                                if (msg.asElement().hasElement(field_name)):
                                    field_value = msg.asElement(
                                    ).getElementAsString(field_name)
                                else:
                                    field_value = 0

                                if field_name == "LAST_PRICE":
                                    d['LAST_PRICE'] = field_value
                                elif field_name == "RT_PX_CHG_NET_1D":
                                    d['NET_CHANGE'] = field_value
                                elif field_name == "RT_PX_CHG_PCT_1D":
                                    d['PCT_CHANGE'] = field_value
                                else:
                                    d[field_name] = field_value

                            self.market_data[msg.correlationIds()
                                             [0].value()] = d

                    # roughly every 10 minutes, otherwise we'll be logging too much
                    if eventCount == 5000:
                        self.logger.info("Data From Bloomberg: " +
                                         str(self.market_data))
            except Exception as e:
                self.logger.error(e)
            finally:
                # Stop the session
                self.logger.info("Terminating Bloomberg session")
                session.stop()
                return 1
コード例 #23
0
def main():

    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/mktdata"):

        print("Failed to open //blp/mktdata")

        return

   

    ### Use this list for writing the equity names manually

    #equityNames = ["CVE CN Equity", "N CN Equity", "IBM US Equity", "CM CN Equity", "CM CT Equity"]# take name of the equities from a file as strings   

    #equityNames = ["XLY CN Equity"]

   

    ### Use this function for pulling the equity names from the input file

    with open('input.txt') as f:

        equityNames2 = f.readlines()

    equityNames = [x.strip() for x in equityNames2]

    equity = {}

    ###

   

    subscriptions = blpapi.SubscriptionList()

   

    for i in range(len(equityNames)):

        equity[equityNames[i]] = {'BID': "0.0", 'ASK': "0.0", 'VWAP': "0.0", 'TIME': "0.0" }

        subscriptions.add(equityNames[i],

                      "BID,ASK, VWAP, TIME",

                      "",

                      blpapi.CorrelationId(equityNames[i]))

       

    session.subscribe(subscriptions)

    errors = {}

    try:

        # Process received events

        eventCount = 0

        while(True):

            # We provide timeout to give the chance to Ctrl+C handling:

            event = session.nextEvent(15000)

             

            for msg in event:

                if (event.eventType() == blpapi.Event.SUBSCRIPTION_STATUS

                        and msg.messageType() == "SubscriptionFailure"):

                   #msg.correlationIds()[0].value().find("Failure")!=-1

                    f = open("BadSubscription.txt", "a+")

                    s = ""

                    if msg.getElement("reason").getElement("errorCode").getValueAsInteger() !=12:

                        s = msg.toString()

                    f.write(s)

                    f.write(msg.timeReceived().strftime("%H:%M:%S"))

                elif event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:

                    print("--------- UPDATE ----------\n")

                   

                    # Get the equity name

                    oneEquity = msg.correlationIds()[0].value() 

                    

                    # Check and update if the newly arrived message has any updates

                    # for the following fields. Update the value if it does.                   

                    if msg.hasElement("BID"):

                        equity[oneEquity]['BID'] = msg.getElementAsFloat("BID")

                    if msg.hasElement("ASK"):

                        equity[oneEquity]['ASK'] = msg.getElementAsFloat("ASK")

                    if msg.hasElement("VWAP"):

                        equity[oneEquity]['VWAP'] = msg.getElementAsFloat("VWAP")

                    if msg.hasElement("TIME"):

                        equity[oneEquity]['TIME'] = msg.getElementAsDatetime("TIME")

                        timeString = equity[oneEquity]['TIME'].strftime("%H:%M:%S")

               

                    # Print the updated Equity with all fields

                   

                    print(" Security: " + oneEquity +

                    "\n Bid:  " + str(equity[oneEquity]['BID']) +

                    "\n Ask:  " + str(equity[oneEquity]['ASK']))

                    diff = float(equity[oneEquity]['ASK']) - float(equity[oneEquity]['BID'])

                    print(" Diff: %.5f" % diff)

                   

                    # If Ask-Bid difference is normal (0 or positive), print OK

                    if(diff >= 0):

                        print(" OK \n")

                    # If Ask-Bid difference is negative, print BAD and write the necessary info to a file

                    else:

                        print(" BAD")

                        errors[oneEquity] = equity[oneEquity]

                        errors[oneEquity]['Bid'] = equity[oneEquity]['BID']

                        errors[oneEquity]['Ask'] = equity[oneEquity]['ASK']

                        errors[oneEquity]['Diff'] = diff

                        # These 2 lines are for debugging purposes

                        # print("Error Array:")

                        # print("Bid %.5f - Ask %.5f = Diff: %.5f" % (errors[oneEquity]['Bid'], errors[oneEquity]['Ask'],errors[oneEquity]['Diff']) )

                       

                        if ('StartTime' not in errors[oneEquity]) and msg.hasElement("TIME"):

                            errors[oneEquity]['StartTime'] = equity[oneEquity]['TIME']

                            # These 2 lines are for debugging purposes

                        # print("Start Time:")

                            # print(errors[oneEquity]['StartTime'])

                        if ('LastTime' not in errors[oneEquity]):

                            errors[oneEquity]['LastTime'] = equity[oneEquity]['TIME']

                            # These 2 lines are for debugging purposes

                        # print("Last Time:")

                            # print(errors[oneEquity]['LastTime'])

                        elif 'LastTime' in errors[oneEquity] and (errors[oneEquity]['LastTime'] != equity[oneEquity]['TIME']):

                            errors[oneEquity]['LastTime'] = equity[oneEquity]['TIME']

                            # These 2 lines are for debugging purposes

                            # print("Last Time:")

                            # print(errors[oneEquity]['LastTime'])

                           

                        #if errors[oneEquity]['LastTime'] - errors[oneEquity]['StartTime'] > timedelta(seconds=45):

                        if minute_interval(errors[oneEquity]['LastTime'],errors[oneEquity]['StartTime']) > 5:   

                            print("ALERT")

                            print("Start Time:")

                            print(errors[oneEquity]['StartTime'])

                            print("Last Time:")

                            print(errors[oneEquity]['LastTime'])

                        

                        # f = open("BadBidAsk.txt", "a+")

                        # f.write("\n\n Security: " + oneEquity +

                        # "\n Bid: %.3f" % equity[oneEquity]['BID'] +

                        # "\n Ask: %.3f" % equity[oneEquity]['ASK'] +

                        # "\n Diff: %.5f " % diff +

                        # "\n Time: " + datetime.datetime.now().strftime('%H:%M:%S'))

                       

                    print("\n Vwap: " + str(equity[oneEquity]['VWAP']))

                   print(" Time: "+ timeString)

                   

                    # If there is a date instead of time stamp

                    # print BAD and write the necessary info to a file

                    # If there is a slash (/) in the string,

                    # then it is a date M/D/Y instead of H:M:S

                    if(timeString.find('/')!=-1):

                        print(" BAD")

                        # f = open("BadVwapTime.txt", "a+")

                        # f.write("\n\n Security: " + oneEquity +

                        # "\n Time: "+ equity[oneEquity]['TIME'])

                    else:

                        print(" OK \n")

                   

                else:

                    print(msg)

                    print(msg.messageType())

            if event.eventType() == blpapi.Event.SUBSCRIPTION_DATA:

                eventCount += 1

                if eventCount >= options.maxEvents:

                    break

    finally:

        # Stop the session

        session.stop()
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 16 17:14:49 2017

@author: pmonnot
"""

import blpapi

session = blpapi.Session()
session.start()

session.openService("//blp/pagedata")
service = session.getService("//blp/pagedata")

string = "0708/012/0001"
fields = ["15-18"]

subscriptions = blpapi.SubscriptionList()
subscriptions.add("//blp/pagedata/" + string, fields, None,
                  blpapi.CorrelationId(string))

session.subscribe(subscriptions)

endReached = False
while not endReached:

    ev = session.nextEvent()
    for msg in ev:
        print msg