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
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;
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;