Beispiel #1
0
    def run(self):
        self.fixSessionobj = FIXSession(self.host, self.port,
                                        "U_" + self.senderCompId)
        if (not self.fixSessionobj.connect()):
            return
        self.frameLogonMsg()
        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
        if (not self.recvLogonMsg()):
            self.printMsg("Failure in receiving Logon Msg")
            return

        self.removeTags(['141', '98', '108', '1137'])

        #Start the recv thread

        recvThread = threading.Thread(target=self.recvExecutionReport)
        recvThread.start()

        # For each Run. reload the properties from XML File
        run = 1
        for line in self.inputList:
            tmpList = line.split(',')
            numberOfSecondsToRun = int(tmpList[0])
            file = tmpList[1].strip('\n')
            try:
                xmlReaderobj = XMLReader(file)
            except Exception:
                self.printMsg(
                    "Exception while parsing XML File...Shutting down...")
                self.shutDown = True
                self.doCleanup()
                recvThread.join()
                self.closeFilePointers()
                return

            reloadList = xmlReaderobj.getDriverProperties(self.senderCompId)
            self.reloadProperties(reloadList)
            runStartTime = datetime.datetime.now()
            currentTime = datetime.datetime.now()
            totMsgSentInThisRun = 0

            while ((datetime.datetime.now() - runStartTime).seconds <
                   numberOfSecondsToRun):
                msgsPerSec = float(self.sendRate)
                msgSent = 0
                U10Msgs = round(msgsPerSec * float(self.U10Percent) * 0.01, 0)
                U12Msgs = round(msgsPerSec * float(self.U12Percent) * 0.01, 0)
                U14Msgs = round(msgsPerSec * float(self.U14Percent) * 0.01, 0)
                U16Msgs = round(msgsPerSec * float(self.U16Percent) * 0.01, 0)
                U18Msgs = round(msgsPerSec * float(self.U18Percent) * 0.01, 0)
                U20Msgs = round(msgsPerSec * float(self.U20Percent) * 0.01, 0)
                U22Msgs = round(msgsPerSec * float(self.U22Percent) * 0.01, 0)
                totalMsgToBeSent = U10Msgs + U12Msgs + U14Msgs + U16Msgs + U18Msgs + U20Msgs + U22Msgs
                sleepInterval = 1.0 / totalMsgToBeSent
                batchStartTime = datetime.datetime.now()
                while (msgSent < totalMsgToBeSent):
                    if (self.shutDown):
                        self.doCleanup()
                        self.printMsg("Received shutdown event")
                        recvThread.join()
                        self.closeFilePointers()
                        return

                    self.checkHeartBeatMsg()

                    currentTime = datetime.datetime.now()
                    if ((currentTime - batchStartTime).seconds > 1):
                        self.printMsg("Breaking out ")
                        break

                    if (U10Msgs > 0):
                        #print("Sending new order")
                        self.frameU10Msg()
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        U10Msgs = U10Msgs - 1
                        msgSent = msgSent + 1
                        self.fixMsgDict.clear()
                        time.sleep(sleepInterval)

                    if (U12Msgs > 0):
                        self.frameU12Msg()
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        U12Msgs = U12Msgs - 1
                        msgSent = msgSent + 1
                        self.fixMsgDict.clear()
                        time.sleep(sleepInterval)

                    if (U14Msgs > 0):
                        self.frameU14Msg()
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        self.removeTags(['110'])
                        U14Msgs = U14Msgs - 1
                        msgSent = msgSent + 1
                        self.fixMsgDict.clear()
                        time.sleep(sleepInterval)

                    if (U16Msgs > 0):
                        self.frameU16Msg()
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        self.removeTags(['110'])
                        U16Msgs = U16Msgs - 1
                        msgSent = msgSent + 1
                        self.fixMsgDict.clear()
                        time.sleep(sleepInterval)

                    if (U18Msgs > 0):
                        self.frameU18Msg()
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        self.removeTags(['110'])
                        U18Msgs = U18Msgs - 1
                        msgSent = msgSent + 1
                        self.fixMsgDict.clear()
                        time.sleep(sleepInterval)

                    if (U20Msgs > 0):
                        self.frameU20Msg()
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        self.removeTags(['110'])
                        U20Msgs = U20Msgs - 1
                        msgSent = msgSent + 1
                        self.fixMsgDict.clear()
                        time.sleep(sleepInterval)

                    if (U22Msgs > 0):
                        self.frameU22Msg(random.randint(0, 2))
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        self.removeTags(['110'])
                        U22Msgs = U22Msgs - 1
                        msgSent = msgSent + 1
                        self.fixMsgDict.clear()
                        time.sleep(sleepInterval)
                self.printMsg("Number of messages send in this batch is " +
                              str(msgSent))
                currentTime = datetime.datetime.now()
                if (currentTime - batchStartTime).seconds < 1:
                    microsecondsLeft = 1000000.0 - (
                        (currentTime - batchStartTime).microseconds)
                    if microsecondsLeft > 0:
                        self.printMsg("Sleeping before starting the next run")
                        time.sleep(float(microsecondsLeft / 1000000))
                currentTime = datetime.datetime.now()
                totMsgSentInThisRun = totMsgSentInThisRun + msgSent
            self.printMsg("Number of messages send in run-" + str(run) +
                          " is " + str(totMsgSentInThisRun))
            run = run + 1
        self.printMsg("Completed Runs..Going to shutdown..")
        self.shutDown = True
        self.doCleanup()
        recvThread.join()
        self.closeFilePointers()
        return
Beispiel #2
0
    def run(self):
        self.fixSessionobj = FIXSession(self.host, self.port,
                                        self.senderCompId, self.Logging)
        if (not self.fixSessionobj.connect()):
            self.printMsg("Unable to connect to Server.. Exiting:")
            return
        self.frameLogonMsg()
        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
        if (not self.recvLogonMsg()):
            self.printMsg(
                "Failure in receiving Logon Msg...Exiting from Thread:")
            return

        self.removeTags(['141', '98', '108', '1137'])

        #Subscribe to Trading Session Status Request
        self.frameTradingSessionStatus()
        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
        self.removeTags(['335', '263'])

        #Start the recv thread

        recvThread = threading.Thread(target=self.recvExecutionReport)
        recvThread.start()

        # For each Run. reload the properties from XML File
        run = 1
        for line in self.inputList:
            tmpList = line.split(',')
            numberOfSecondsToRun = int(tmpList[0])
            file = tmpList[1].strip('\n')
            #self.printMsg(file);
            try:
                xmlReaderobj = XMLReader(file)
            except Exception:
                self.printMsg(
                    "Exception while parsing XML File...Shutting down...")
                self.shutDown = True
                self.doCleanup()
                recvThread.join()
                self.closeFilePointers()
                return

            reloadList = xmlReaderobj.getDriverProperties(self.senderCompId)
            self.reloadProperties(reloadList)
            runStartTime = datetime.datetime.now()
            currentTime = datetime.datetime.now()
            totMsgSentInThisRun = 0
            while ((datetime.datetime.now() - runStartTime).seconds <
                   numberOfSecondsToRun):
                msgSent = 0
                msgPerSec = float(self.sendRate)
                if (msgPerSec == 0):
                    time.sleep(2)
                    self.checkHeartBeatMsg()
                    continue
                if (msgPerSec < 1):
                    newOrders = 1
                else:
                    newOrders = round(msgPerSec * self.newOrderPercent * 0.01,
                                      0)
                cancelOrders = round(
                    msgPerSec * float(self.cancelOrderPercent) * 0.01, 0)
                modifyOrders = round(
                    msgPerSec * float(self.modifyOrderPercent) * 0.01, 0)
                hiddenOrders = round(
                    msgPerSec * float(self.hiddenOrderPercent) * 0.01, 0)
                marketOrders = round(
                    msgPerSec * float(self.marketOrderPercent) * 0.01, 0)
                GTDOrders = round(
                    msgPerSec * float(self.GTDOrderPercent) * 0.01, 0)
                expiryOrders = round(
                    msgPerSec * float(self.expiryOrderPercent) * 0.01,
                    0) + cancelOrders
                rejectOrders = round(
                    msgPerSec * float(self.rejectOrderPercent) * 0.01, 0)
                #self.printMsg("New="+str(newOrders)+";Cancel="+str(cancelOrders)+";Modifies="+str(modifyOrders)+";Hidden="+str(hiddenOrders)+";Market="+str(marketOrders)+";GTD="+str(GTDOrders)+";Expiry="+str(expiryOrders)+";Rejects="+str(rejectOrders));
                totalMsgToBeSent = newOrders + cancelOrders + modifyOrders + hiddenOrders + marketOrders + GTDOrders + expiryOrders + rejectOrders
                if (totalMsgToBeSent == 0):
                    time.sleep(1)
                    self.checkHeartBeatMsg()
                    continue
                sleepInterval = 1.0 / (totalMsgToBeSent * 2)
                #print(sleepInterval,msgPerSec,totalMsgToBeSent,newOrders,cancelOrders,modifyOrders,hiddenOrders,marketOrders);
                batchStartTime = datetime.datetime.now()
                while (msgSent < totalMsgToBeSent):
                    if (self.shutDown):
                        self.doCleanup()
                        self.printMsg("Received shutdown event")
                        recvThread.join()
                        self.closeFilePointers()
                        return
                    self.checkHeartBeatMsg()
                    currentTime = datetime.datetime.now()
                    if ((currentTime - batchStartTime).seconds > 1.0):
                        self.printMsg("Breaking out ")
                        break
                    if (newOrders > 0):
                        self.frameNewOrderSingleMsg()
                        self.alterNewOrderMsg()
                        self.removeTags(['41'])
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        newOrders = newOrders - 1
                        msgSent = msgSent + 1
                        time.sleep(sleepInterval)

                    if (marketOrders > 0):
                        self.frameNewOrderSingleMsg()
                        self.alterNewMarketOrderMsg()
                        self.removeTags(['41'])
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        marketOrders = marketOrders - 1
                        msgSent = msgSent + 1
                        time.sleep(sleepInterval)

                    if (hiddenOrders > 0):
                        self.frameNewOrderSingleMsg()
                        self.alterNewHiddenOrderMsg()
                        self.removeTags(['41'])
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        self.removeTags(['1138'])
                        hiddenOrders = hiddenOrders - 1
                        msgSent = msgSent + 1
                        time.sleep(sleepInterval)

                    if (GTDOrders > 0):
                        self.frameNewOrderSingleMsg()
                        self.alterNewGTDOrderMsg()
                        self.removeTags(['41'])
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        self.removeTags(['59'])
                        GTDOrders = GTDOrders - 1
                        msgSent = msgSent + 1
                        time.sleep(sleepInterval)

                    if (expiryOrders > 0):
                        self.frameNewOrderSingleMsg()
                        self.alterNewExpiryOrderMsg()
                        self.removeTags(['41'])
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        expiryOrders = expiryOrders - 1
                        msgSent = msgSent + 1
                        time.sleep(sleepInterval)

                    if (rejectOrders > 0):
                        self.frameNewOrderSingleMsg()
                        self.alterNewRejectOrderMsg()
                        self.removeTags(['41'])
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        rejectOrders = rejectOrders - 1
                        msgSent = msgSent + 1
                        time.sleep(sleepInterval)

                    if (cancelOrders > 0):
                        queuedOrderListSize = len(self.queuedCancelOrdersList)
                        if (queuedOrderListSize == 0):
                            continue
                        self.lockObj.acquire(True)
                        execReport = self.queuedCancelOrdersList.pop(
                            queuedOrderListSize - 1)
                        self.lockObj.release()
                        self.removeTags(['336', '386', '44', '1'])
                        self.frameCancelOrderMsg(execReport['11'],
                                                 execReport['54'],
                                                 execReport['38'],
                                                 execReport['55'])
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        cancelOrders = cancelOrders - 1
                        msgSent = msgSent + 1
                        time.sleep(sleepInterval)

                    if (modifyOrders > 0):
                        queuedOrderListSize = len(self.queuedModifyOrdersList)
                        if (queuedOrderListSize == 0):
                            continue
                        self.lockObj.acquire(True)
                        execReport = self.queuedModifyOrdersList.pop(
                            queuedOrderListSize - 1)
                        self.lockObj.release()
                        self.removeTags(['336', '386'])
                        qty = str(int(execReport['38']) + 1)
                        self.frameModifyOrderMsg(execReport['11'],
                                                 execReport['54'],
                                                 execReport['40'], qty,
                                                 execReport['44'],
                                                 execReport['55'],
                                                 execReport['1'])
                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict)
                        self.removeTags(['41'])
                        modifyOrders = modifyOrders - 1
                        msgSent = msgSent + 1
                        time.sleep(sleepInterval)

                self.printMsg("Number of messages send in this batch is " +
                              str(msgSent))
                self.checkHeartBeatMsg()
                #Clear of the queuedOrderList queus
                self.lockObj.acquire(True)
                nomodifyOrders = int(msgPerSec * int(self.modifyOrderPercent) *
                                     0.01)
                queueSize = len(self.queuedModifyOrdersList)
                #print(queueSize,nomodifyOrders,nocancelOrders);
                if (queueSize > nomodifyOrders):
                    for i in list(range(queueSize - nomodifyOrders)):
                        try:
                            execReport = self.queuedModifyOrdersList.pop(i)
                        except Exception:
                            #self.printMsg("Exception Occured while popping out element at "+str(i));
                            break
                self.lockObj.release()
                self.lockObj.acquire(True)
                nocancelOrders = int(msgPerSec * int(self.cancelOrderPercent) *
                                     0.01)
                queueSize = len(self.queuedCancelOrdersList)
                #print(queueSize,nomodifyOrders,nocancelOrders);
                if (queueSize > nocancelOrders):
                    for i in list(range(queueSize - nocancelOrders)):
                        try:
                            execReport = self.queuedCancelOrdersList.pop(i)
                        except Exception:
                            #self.printMsg("Exception Occured while popping out element at "+str(i));
                            break
                self.lockObj.release()
                currentTime = datetime.datetime.now()
                if (currentTime - batchStartTime).seconds < 1:
                    microsecondsLeft = 1000000.0 - (
                        (currentTime - batchStartTime).microseconds)
                    if microsecondsLeft > 0:
                        self.printMsg("Sleeping before starting the next run")
                        time.sleep(float(microsecondsLeft / 1000000))
                currentTime = datetime.datetime.now()
                totMsgSentInThisRun = totMsgSentInThisRun + msgSent
            self.printMsg("Number of messages send in run-" + str(run) +
                          " is " + str(totMsgSentInThisRun))
            run = run + 1
        self.printMsg("Completed Runs..Going to shutdown..")
        self.shutDown = True
        self.doCleanup()
        recvThread.join()
        self.closeFilePointers()
        return
        def run(self):
                self.fixSessionobj=FIXSession(self.host,self.port,"U_"+self.senderCompId);
                if(not self.fixSessionobj.connect()):
                        return;
                self.frameLogonMsg();
                self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                if (not self.recvLogonMsg()):
                        self.printMsg("Failure in receiving Logon Msg")
                        return;


                self.removeTags(['141','98','108','1137']);

                #Start the recv thread

                recvThread=threading.Thread(target=self.recvExecutionReport)
                recvThread.start();

                # For each Run. reload the properties from XML File
                run=1;
                for line in self.inputList:
                   tmpList=line.split(',');
                   numberOfSecondsToRun=int(tmpList[0]);
                   file=tmpList[1].strip('\n');
                   try:
                       xmlReaderobj=XMLReader(file);
                   except Exception:
                      self.printMsg("Exception while parsing XML File...Shutting down...");
                      self.shutDown=True;
                      self.doCleanup();
                      recvThread.join();
                      self.closeFilePointers();
                      return;

                   reloadList=xmlReaderobj.getDriverProperties(self.senderCompId);
                   self.reloadProperties(reloadList);
                   runStartTime=datetime.datetime.now();
                   currentTime=datetime.datetime.now();
                   totMsgSentInThisRun=0;

                   while((datetime.datetime.now()-runStartTime).seconds < numberOfSecondsToRun):
                        msgsPerSec=float(self.sendRate);
                        msgSent=0;
                        U10Msgs=round(msgsPerSec*float(self.U10Percent)*0.01,0);
                        U12Msgs=round(msgsPerSec*float(self.U12Percent)*0.01,0);
                        U14Msgs=round(msgsPerSec*float(self.U14Percent)*0.01,0);
                        U16Msgs=round(msgsPerSec*float(self.U16Percent)*0.01,0);
                        U18Msgs=round(msgsPerSec*float(self.U18Percent)*0.01,0);
                        U20Msgs=round(msgsPerSec*float(self.U20Percent)*0.01,0);
                        U22Msgs=round(msgsPerSec*float(self.U22Percent)*0.01,0);
                        totalMsgToBeSent=U10Msgs+U12Msgs+U14Msgs+U16Msgs+U18Msgs+U20Msgs+U22Msgs;
                        sleepInterval=1.0/totalMsgToBeSent;
                        batchStartTime=datetime.datetime.now();
                        while(msgSent<totalMsgToBeSent):
                                if (self.shutDown):
                                        self.doCleanup();
                                        self.printMsg("Received shutdown event");
                                        recvThread.join();
                                        self.closeFilePointers();
                                        return;

                                self.checkHeartBeatMsg();

                                currentTime=datetime.datetime.now();
                                if ((currentTime-batchStartTime).seconds > 1):
                                        self.printMsg("Breaking out ");
                                        break;

                                if (U10Msgs>0):
                                        #print("Sending new order")
                                        self.frameU10Msg();
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        U10Msgs=U10Msgs-1;
                                        msgSent=msgSent+1;
                                        self.fixMsgDict.clear();
                                        time.sleep(sleepInterval);

                                if (U12Msgs>0):
                                        self.frameU12Msg();
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        U12Msgs=U12Msgs-1;
                                        msgSent=msgSent+1;
                                        self.fixMsgDict.clear();
                                        time.sleep(sleepInterval);

                                if (U14Msgs>0):
                                        self.frameU14Msg();
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        self.removeTags(['110']);
                                        U14Msgs=U14Msgs-1;
                                        msgSent=msgSent+1;
                                        self.fixMsgDict.clear();
                                        time.sleep(sleepInterval);

                                if (U16Msgs>0):
                                        self.frameU16Msg();
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        self.removeTags(['110']);
                                        U16Msgs=U16Msgs-1;
                                        msgSent=msgSent+1;
                                        self.fixMsgDict.clear();
                                        time.sleep(sleepInterval);

                                if (U18Msgs>0):
                                        self.frameU18Msg();
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        self.removeTags(['110']);
                                        U18Msgs=U18Msgs-1;
                                        msgSent=msgSent+1;
                                        self.fixMsgDict.clear();
                                        time.sleep(sleepInterval);

                                if (U20Msgs>0):
                                        self.frameU20Msg();
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        self.removeTags(['110']);
                                        U20Msgs=U20Msgs-1;
                                        msgSent=msgSent+1;
                                        self.fixMsgDict.clear();
                                        time.sleep(sleepInterval);

                                if (U22Msgs>0):
                                        self.frameU22Msg(random.randint(0,2));
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        self.removeTags(['110']);
                                        U22Msgs=U22Msgs-1;
                                        msgSent=msgSent+1;
                                        self.fixMsgDict.clear();
                                        time.sleep(sleepInterval);
                        self.printMsg("Number of messages send in this batch is "+str(msgSent));
                        currentTime=datetime.datetime.now();
                        if(currentTime-batchStartTime).seconds < 1:
                            microsecondsLeft=1000000.0-((currentTime-batchStartTime).microseconds);
                            if microsecondsLeft>0:
                                self.printMsg("Sleeping before starting the next run")
                                time.sleep(float(microsecondsLeft/1000000));
                        currentTime=datetime.datetime.now();
                        totMsgSentInThisRun=totMsgSentInThisRun+msgSent;
                   self.printMsg("Number of messages send in run-"+str(run)+" is "+str(totMsgSentInThisRun));
                   run=run+1;
                self.printMsg("Completed Runs..Going to shutdown..");
                self.shutDown=True;
                self.doCleanup();
                recvThread.join();
                self.closeFilePointers();
                return;
Beispiel #4
0
        def run(self):
                self.fixSessionobj=FIXSession(self.host,self.port,self.senderCompId,self.Logging);
                if(not self.fixSessionobj.connect()):
                        self.printMsg("Unable to connect to Server.. Exiting:");
                        return;
                self.frameLogonMsg();
                self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                if (not self.recvLogonMsg()):
                        self.printMsg("Failure in receiving Logon Msg...Exiting from Thread:");
                        return;


                self.removeTags(['141','98','108','1137']);

		#Subscribe to Trading Session Status Request
		self.frameTradingSessionStatus();
                self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                self.removeTags(['335','263']);

                #Start the recv thread

                recvThread=threading.Thread(target=self.recvExecutionReport)
                recvThread.start();

                # For each Run. reload the properties from XML File
                run=1;
                for line in self.inputList:
                   tmpList=line.split(',');
                   numberOfSecondsToRun=int(tmpList[0]);
                   file=tmpList[1].strip('\n');
                   #self.printMsg(file);
                   try:
                       xmlReaderobj=XMLReader(file);
                   except Exception:
                      self.printMsg("Exception while parsing XML File...Shutting down...");
                      self.shutDown=True;
                      self.doCleanup();
                      recvThread.join();
                      self.closeFilePointers();
                      return;
                      
                   reloadList=xmlReaderobj.getDriverProperties(self.senderCompId);
                   self.reloadProperties(reloadList);
                   runStartTime=datetime.datetime.now();
                   currentTime=datetime.datetime.now();
                   totMsgSentInThisRun=0;
                   while((datetime.datetime.now()-runStartTime).seconds < numberOfSecondsToRun):
                        msgSent=0;
                        msgPerSec=float(self.sendRate);
                        if(msgPerSec == 0):
                          time.sleep(2); 
                          self.checkHeartBeatMsg();
                          continue;
                        if(msgPerSec<1):
                           newOrders=1;
                        else:
                           newOrders=round(msgPerSec*self.newOrderPercent*0.01,0);
                        cancelOrders=round(msgPerSec*float(self.cancelOrderPercent)*0.01,0);
                        modifyOrders=round(msgPerSec*float(self.modifyOrderPercent)*0.01,0);
                        hiddenOrders=round(msgPerSec*float(self.hiddenOrderPercent)*0.01,0);
                        marketOrders=round(msgPerSec*float(self.marketOrderPercent)*0.01,0);
                        GTDOrders=round(msgPerSec*float(self.GTDOrderPercent)*0.01,0);
                        expiryOrders=round(msgPerSec*float(self.expiryOrderPercent)*0.01,0)+cancelOrders;
                        rejectOrders=round(msgPerSec*float(self.rejectOrderPercent)*0.01,0);
                        #self.printMsg("New="+str(newOrders)+";Cancel="+str(cancelOrders)+";Modifies="+str(modifyOrders)+";Hidden="+str(hiddenOrders)+";Market="+str(marketOrders)+";GTD="+str(GTDOrders)+";Expiry="+str(expiryOrders)+";Rejects="+str(rejectOrders));
                        totalMsgToBeSent=newOrders+cancelOrders+modifyOrders+hiddenOrders+marketOrders+GTDOrders+expiryOrders+rejectOrders;
                        if(totalMsgToBeSent == 0):
                          time.sleep(1);
                          self.checkHeartBeatMsg();
                          continue;
                        sleepInterval=1.0/(totalMsgToBeSent*2);
                        #print(sleepInterval,msgPerSec,totalMsgToBeSent,newOrders,cancelOrders,modifyOrders,hiddenOrders,marketOrders);
                        batchStartTime=datetime.datetime.now();
                        while(msgSent<totalMsgToBeSent):
                                if (self.shutDown):
                                        self.doCleanup();
                                        self.printMsg("Received shutdown event");
                                        recvThread.join();
                                        self.closeFilePointers();
                                        return;
                                self.checkHeartBeatMsg();
                                currentTime=datetime.datetime.now();
                                if ((currentTime-batchStartTime).seconds > 1.0):
                                        self.printMsg("Breaking out ");
                                        break;
                                if (newOrders>0):
                                        self.frameNewOrderSingleMsg();
                                        self.alterNewOrderMsg();
                                        self.removeTags(['41']);
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        newOrders=newOrders-1;
                                        msgSent=msgSent+1;
                                        time.sleep(sleepInterval);

                                if (marketOrders>0):
                                        self.frameNewOrderSingleMsg();
                                        self.alterNewMarketOrderMsg();
                                        self.removeTags(['41']);
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        marketOrders=marketOrders-1;
                                        msgSent=msgSent+1;
                                        time.sleep(sleepInterval);

                                if (hiddenOrders>0):
                                        self.frameNewOrderSingleMsg();
                                        self.alterNewHiddenOrderMsg();
                                        self.removeTags(['41']);
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        self.removeTags(['1138']);
                                        hiddenOrders=hiddenOrders-1;
                                        msgSent=msgSent+1;
                                        time.sleep(sleepInterval);

                                if (GTDOrders>0):
                                        self.frameNewOrderSingleMsg();
                                        self.alterNewGTDOrderMsg();
                                        self.removeTags(['41']);
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        self.removeTags(['59']);
                                        GTDOrders=GTDOrders-1;
                                        msgSent=msgSent+1;
                                        time.sleep(sleepInterval);

                                if (expiryOrders>0):
                                        self.frameNewOrderSingleMsg();
                                        self.alterNewExpiryOrderMsg();
                                        self.removeTags(['41']);
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        expiryOrders=expiryOrders-1;
                                        msgSent=msgSent+1;
                                        time.sleep(sleepInterval);

                                if (rejectOrders>0):
                                        self.frameNewOrderSingleMsg();
                                        self.alterNewRejectOrderMsg();
                                        self.removeTags(['41']);
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        rejectOrders=rejectOrders-1;
                                        msgSent=msgSent+1;
                                        time.sleep(sleepInterval);

                                if (cancelOrders>0):
                                        queuedOrderListSize=len(self.queuedCancelOrdersList);
                                        if (queuedOrderListSize==0):
                                                continue;
                                        self.lockObj.acquire(True);
                                        execReport=self.queuedCancelOrdersList.pop(queuedOrderListSize-1);
                                        self.lockObj.release();
                                        self.removeTags(['336','386','44','1']);
                                        self.frameCancelOrderMsg(execReport['11'],execReport['54'],execReport['38'],execReport['55']);
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        cancelOrders=cancelOrders-1;
                                        msgSent=msgSent+1;
                                        time.sleep(sleepInterval);

                                if (modifyOrders>0):
                                        queuedOrderListSize=len(self.queuedModifyOrdersList);
                                        if (queuedOrderListSize==0):
                                                continue;
                                        self.lockObj.acquire(True);
                                        execReport=self.queuedModifyOrdersList.pop(queuedOrderListSize-1);
                                        self.lockObj.release();
                                        self.removeTags(['336','386']);
                                        qty=str(int(execReport['38'])+1);
                                        self.frameModifyOrderMsg(execReport['11'],execReport['54'],execReport['40'],qty,execReport['44'],execReport['55'],execReport['1']);
                                        self.fixSessionobj.sendFIXMsg(self.fixMsgDict);
                                        self.removeTags(['41']);
                                        modifyOrders=modifyOrders-1;
                                        msgSent=msgSent+1;
                                        time.sleep(sleepInterval);

          
                        self.printMsg("Number of messages send in this batch is "+str(msgSent) );
                        self.checkHeartBeatMsg();
                        #Clear of the queuedOrderList queus
                        self.lockObj.acquire(True);
                        nomodifyOrders=int(msgPerSec*int(self.modifyOrderPercent)*0.01);
                        queueSize=len(self.queuedModifyOrdersList);
                        #print(queueSize,nomodifyOrders,nocancelOrders);
                        if(queueSize > nomodifyOrders):
                            for i in list(range(queueSize-nomodifyOrders)):
                                 try:
                                     execReport=self.queuedModifyOrdersList.pop(i);
                                 except Exception:
                                     #self.printMsg("Exception Occured while popping out element at "+str(i));
                                     break;
                        self.lockObj.release();
                        self.lockObj.acquire(True);
                        nocancelOrders=int(msgPerSec*int(self.cancelOrderPercent)*0.01);
                        queueSize=len(self.queuedCancelOrdersList);
                        #print(queueSize,nomodifyOrders,nocancelOrders);
                        if(queueSize > nocancelOrders):
                            for i in list(range(queueSize-nocancelOrders)):
                                 try:
                                     execReport=self.queuedCancelOrdersList.pop(i);
                                 except Exception:
                                     #self.printMsg("Exception Occured while popping out element at "+str(i));
                                     break;
                        self.lockObj.release();
                        currentTime=datetime.datetime.now();
                        if(currentTime-batchStartTime).seconds < 1:
                           microsecondsLeft=1000000.0-((currentTime-batchStartTime).microseconds);
                           if microsecondsLeft>0:
                                self.printMsg("Sleeping before starting the next run");
                                time.sleep(float(microsecondsLeft/1000000));
                        currentTime=datetime.datetime.now();
                        totMsgSentInThisRun=totMsgSentInThisRun+msgSent;
                   self.printMsg("Number of messages send in run-"+str(run)+" is "+str(totMsgSentInThisRun));
                   run=run+1; 
                self.printMsg("Completed Runs..Going to shutdown..");
                self.shutDown=True;
                self.doCleanup();
                recvThread.join();
                self.closeFilePointers();
                return;