def order_status_request(self,cl_ord_id=None): if cl_ord_id is None: fix_orders = pd.read_csv(f'{self.write_path}/fix_orders.csv',index_col=0) for idx in fix_orders.index: ord_status_request = fix.Message() ord_status_request.getHeader().setField(fix.BeginString(fix.BeginString_FIX42)) # ord_status_request.getHeader().setField(fix.MsgType('H')) #39=D ord_status_request.getHeader().setField(fix.SendingTime(1)) # ord_status_request.setField(fix.Symbol('EUR')) #55 # ord_status_request.setField(fix.Account('U01049')) # ord_status_request.setField(fix.SecurityReqID('1')) ord_status_request.setField(fix.ClOrdID(str(idx))) #11= # ord_status_request.setField(fix.ClOrdID(str('*'))) #11= # ord_status_request.setField(fix.ClOrdID(datetime.utcnow().strftime('%Y%m%d%H%M%S')+ 'statReq' + self.genExecID())) #11= # ord_status_request.setField(fix.OrderID(datetime.utcnow().strftime('%Y%m%d%H%M%S')+ 'statReq' + self.genExecID())) # ord_status_request.setField(fix.OrderID('*')) # ord_status_request.setField(fix.SecurityType('CASH')) #167 # ord_status_request.setField(fix.Side(fix.Side_SELL)) print(f'Order status message \n {ord_status_request}') fix.Session.sendToTarget(ord_status_request,self.sessionID) print('order status request for open orders sent!') else: ord_status_request = fix.Message() ord_status_request.getHeader().setField(fix.BeginString(fix.BeginString_FIX42)) # ord_status_request.getHeader().setField(fix.MsgType('H')) # 39=D ord_status_request.getHeader().setField(fix.SendingTime(1)) ord_status_request.setField(fix.ClOrdID(str(cl_ord_id))) # 11= print(f'ORDER STATUS MESSAGE \n {ord_status_request}') fix.Session.sendToTarget(ord_status_request, self.sessionID) print(f'ORDER STATUS REQUEST FOR {cl_ord_id} SENT!')
def run(self): logon = fix44.Logon() #Keep sending a sample set of messages to server, where the second message while (1): message = fix.Message() header = message.getHeader() header.setField(fix.BeginString("FIX.4.4")) header.setField(fix.SenderCompID("COEPUSER")) header.setField(fix.TargetCompID("COEPEXCH")) header.setField(fix.MsgType("D")) message.setField(fix.ClOrdID("3")) message.setField(fix.Symbol("amzn")) message.setField(fix.Side(Side_BUY)) message.setField(58, "Buy shares") message.setField(fix.Price(87)) message.setField(fix.OrderQty(2)) transact_time = datetime.utcnow() message.setField(60, transact_time.strftime("%Y%m%d-22:29:00.000")) message.setField(fix.Account("EXECLINKS")) message.setField(40, "2") status = fix.Session.sendToTarget(message, self.sessionID) print("Status: ", status) print(message) time.sleep(5) message = fix.Message() header = message.getHeader() header.setField(fix.BeginString("FIX.4.4")) header.setField(fix.SenderCompID("COEPUSER")) header.setField(fix.TargetCompID("COEPEXCH")) header.setField(fix.MsgType("D")) message.setField(fix.ClOrdID("3")) message.setField(fix.Symbol("amzn")) message.setField(fix.Side(Side_SELL)) message.setField(58, "Sell shares") message.setField(fix.Price(87)) message.setField(fix.OrderQty(2)) transact_time = datetime.utcnow() message.setField(60, transact_time.strftime("%Y%m%d-22:29:00.000")) message.setField(fix.Account("EXECLINKS")) message.setField(40, "2") status = fix.Session.sendToTarget(message, self.sessionID) print("Status: ", status) print(message) time.sleep(100)
def sendOrder(self, ticker, side, type, px, qty): nos = fix.Message() nos.getHeader().setField(fix.BeginString(fix.BeginString_FIX44)) nos.getHeader().setField(fix.MsgType(fix.MsgType_NewOrderSingle)) symbol = fix.Symbol(ticker) nos.setField(symbol) if side == "BUY": side = fix.Side(fix.Side_BUY) if side == "SELL": side = fix.Side(fix.Side_SELL) nos.setField(side) if type == "MARKET": ordType = fix.OrdType(fix.OrdType_MARKET) px = fix.Price(0) if type == "LIMIT": ordType = fix.OrdType(fix.OrdType_MARKET) px = fix.Price(px) nos.setField(ordType) nos.setField(px) orderQty = fix.OrderQty(qty) clOrdID = fix.ClOrdID(self.genOrderID()) nos.setField(orderQty) nos.setField(clOrdID) TimeInForce = fix.TimeInForce(fix.TimeInForce_GOOD_TILL_CANCEL) TransactTime = fix.TransactTime() nos.setField(TimeInForce) nos.setField(TransactTime) fix.Session.sendToTarget(nos, self.sessionID)
def onLogon(self, sessionID): self.sessionID = sessionID print("onLogon - sessionID: " + sessionID.toString()) currency_pairs = ['GBP/USD', 'EUR/USD'] for ccy in currency_pairs: mdr = fix.Message() mdr.getHeader().setField(fix.BeginString(fix.BeginString_FIX44)) mdr.getHeader().setField(fix.MsgType(fix.MsgType_MarketDataRequest)) current_milli_time = lambda: int(round(time.time() * 1000)) mdr.setField(fix.MDReqID(str(current_milli_time()))) # a random string mdr.setField(fix.SubscriptionRequestType(fix.SubscriptionRequestType_SNAPSHOT_PLUS_UPDATES)) # what stater required mdr.setField(fix.MarketDepth(1)) # what stater required mdr.setField(fix.AggregatedBook(True)) mdr.setField(fix.NoMDEntryTypes(1)) # what stater required mdr.setField(fix.MDUpdateType(fix.MDUpdateType_INCREMENTAL_REFRESH)) # what stater required group = fix44.MarketDataRequest().NoMDEntryTypes() group.setField(fix.MDEntryType(fix.MDEntryType_BID)) mdr.addGroup(group) group.setField(fix.MDEntryType(fix.MDEntryType_OFFER)) mdr.addGroup(group) mdr.setField(fix.NoRelatedSym(1)) symbol = fix44.MarketDataRequest().NoRelatedSym() symbol.setField(fix.Symbol(ccy)) mdr.addGroup(symbol) fix.Session.sendToTarget(mdr, sessionID)
def new_order(self): print("Creating the following order: ") trade = fix.Message() trade.getHeader().setField(fix.BeginString(fix.BeginString_FIX42)) # trade.getHeader().setField(fix.MsgType( fix.MsgType_NewOrderSingle)) #35=D trade.setField(fix.ClOrdID(self.genOrderID())) #11=Unique order id trade.setField(fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION) ) #21=3 (Manual order, best executiona) trade.setField(fix.Symbol("ethbtc")) #55=ethbtc trade.setField(fix.Side(fix.Side_BUY)) #54=1 Buy trade.setField(fix.OrdType(fix.OrdType_LIMIT)) #40=2 Limit order trade.setField(fix.OrderQty(9)) #38=9 trade.setField(fix.Price(1.5)) #44=1.5 trade.setField( fix.StringField( 60, (datetime.utcnow().strftime("%Y%m%d-%H:%M:%S.%f"))[:-3]) ) #60 TransactTime, not supported in python, so use tag number trade.setField(fix.Text("New Order")) #58 text print(trade.toString()) try: fix.Session.sendToTarget(trade, self.sessionID) except (fix.ConfigError, fix.RuntimeError) as e: print(e)
def new_order(sender_comp_id, target_comp_id, symbol, quantity, price, side, order_type): if side.lower() == "buy": side = fix.Side_BUY else: side = fix.Side_SELL message = Message() header = message.getHeader() header.setField(fix.BeginString("FIX.4.2")) header.setField(fix.SenderCompID(sender_comp_id)) header.setField(fix.TargetCompID(target_comp_id)) header.setField(fix.MsgType("D")) ord_id = get_order_id(sender_comp_id, symbol) message.setField(fix.ClOrdID(ord_id)) message.setField(fix.Symbol(symbol)) message.setField(fix.Side(side)) message.setField(fix.Price(float(price))) if order_type.lower() == "market": message.setField(fix.OrdType(fix.OrdType_MARKET)) else: message.setField(fix.OrdType(fix.OrdType_LIMIT)) message.setField(fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION)) message.setField(fix.TransactTime()) message.setField(fix.OrderQty(float(quantity))) message.setField(fix.Text(f"{side} {symbol} {quantity}@{price}")) return message
def test_checkIsInMessage(self): self.object.setVersion(fix.BeginString_FIX40) self.object.addField(fix.BeginString().getTag()) self.object.addField(fix.BodyLength().getTag()) self.object.addField(fix.MsgType().getTag()) self.object.addField(fix.CheckSum().getTag()) self.object.addField(fix.TestReqID().getTag()) self.object.addField(fix.Symbol().getTag()) self.object.addMsgType(fix.MsgType_TestRequest) self.object.addMsgField(fix.MsgType_TestRequest, fix.TestReqID().getTag()) testReqID = fix.TestReqID("1") message = fix40.TestRequest() message.setField(testReqID) try: self.object.validate(message) self.failUnless(1) except fix.Exception as e: self.failUnless(0) message.setField(fix.Symbol("MSFT")) try: self.object.validate(message) self.failUnless(0) except fix.Exception as e: self.failUnless(1)
def getOrderCancelReject(self, message): beginString = fix.BeginString() message.getHeader().getField(beginString) clOrdID = fix.ClOrdID() orderID = fix.OrderID() origClOrdID = fix.OrigClOrdID() message.getField(clOrdID) message.getField(orderID) message.getField(origClOrdID) orderCancelReject = fix.Message() orderCancelReject.getHeader().setField(beginString) orderCancelReject.getHeader().setField( fix.MsgType(fix.MsgType_OrderCancelReject)) orderCancelReject.setField(clOrdID) orderCancelReject.setField(orderID) orderCancelReject.setField(origClOrdID) orderCancelReject.setField(fix.OrdStatus( fix.OrdStatus_FILLED)) #39 = 2 FILLED orderCancelReject.setField( fix.CxlRejReason(0)) #102=0 TOO_LATE_TO_CANCEL orderCancelReject.setField( fix.CxlRejResponseTo(1)) #434=1 ORDER_CANCEL_REQUEST return orderCancelReject
def securityDefinitionRequest(self): msg = fix50.SecurityDefinitionRequest() header = msg.getHeader() header.setField(fix.BeginString(fix.BeginString_FIXT11)) # header.setField(fix.MsgType(msgType)) header.setField(fix.SenderCompID("pjseoane232")) header.setField(fix.TargetCompID("ROFX"))
def fromAdmin(self, message, sessionID): if SKIP_AUTHENTICATION: print("Received the following admin message: %s" % message.toString()) return beginString = fix.BeginString() msgType = fix.MsgType() msgSeqNum = fix.MsgSeqNum() message.getHeader().getField(beginString) message.getHeader().getField(msgType) message.getHeader().getField(msgSeqNum) if msgType.getString() == fix.MsgType_Logon: try: rawData = fix.RawData() message.getField(rawData) jsonStr = json.loads(rawData.getValue()) self.accessKey = jsonStr['AccessKey'] self.secretKey = jsonStr['SecretKey'] response = authenticateMe(self.accessKey, self.secretKey) jResponse = json.loads(response) if 'error' in jResponse and jResponse['error']: raise fix.RejectLogon("wrong signature") except KeyboardInterrupt: return except Exception as e: print(e) raise fix.RejectLogon( "failed to authenticate on server. Please contact istox IT!" ) print("Received the following admin message: %s" % message.toString()) return
def scrip_msg(scrip_element: Scrip): scrip_subscription = fix.Message() # 8, BeginString scrip_subscription.getHeader().setField(fix.BeginString(fix.BeginString_FIXT11)) # 35, Message Type scrip_subscription.getHeader().setField(fix.MsgType(fix.MsgType_MarketDataRequest)) # 49, SenderCompId scrip_subscription.getHeader().setField(fix.SenderCompID(sender_id)) # 56, TargetCompId scrip_subscription.getHeader().setField(fix.TargetCompID(target_id)) # 34, Message SeqNumber scrip_subscription.setField(fix.MsgSeqNum(1)) # 50, SenderSubID scrip_subscription.setField(fix.SenderSubID(scrip_element.exchange)) # 924, UserRequestType scrip_subscription.setField(fix.UserRequestType(1)) # 115 ,doubtful, but may be gateway id according to examples # NSECM = 2, NSEFO = 1 scrip_subscription.setField(115, "%s" % scrip_element.gatewayID) # 55, Symbol scrip_subscription.setField(fix.Symbol(scrip_element.symbol)) # 1775, price divisor scrip_subscription.setField(1775, "0") # 167, Instrument scrip_subscription.setField(167, scrip_element.instrument) # 48, Token No. scrip_subscription.setField(48, "%s" % scrip_element.token_no) # 263, Broadcast type scrip_subscription.setField(263, "0") scrip_subscription = bytes(scrip_subscription.toString(), encoding="UTF-8") return scrip_subscription
def getExecutionReportForNewOrder(self, message): beginString = fix.BeginString() message.getHeader().getField(beginString) symbol = fix.Symbol() side = fix.Side() ordType = fix.OrdType() orderQty = fix.OrderQty() price = fix.Price() clOrdID = fix.ClOrdID() message.getField(ordType) if ordType.getValue() != fix.OrdType_LIMIT: raise fix.IncorrectTagValue(ordType.getField()) message.getField(symbol) message.getField(side) message.getField(orderQty) message.getField(price) message.getField(clOrdID) executionReport = fix.Message() executionReport.getHeader().setField(beginString) executionReport.getHeader().setField( fix.MsgType(fix.MsgType_ExecutionReport)) executionReport.setField(fix.OrderID(self.genOrderID())) executionReport.setField(fix.ExecID(self.genExecID())) executionReport.setField(fix.OrdStatus(fix.OrdStatus_FILLED)) executionReport.setField(symbol) executionReport.setField(side) executionReport.setField(fix.CumQty(orderQty.getValue())) executionReport.setField(fix.AvgPx(price.getValue())) executionReport.setField(fix.LastShares(orderQty.getValue())) executionReport.setField(fix.LastPx(price.getValue())) executionReport.setField(clOrdID) executionReport.setField(orderQty) executionReport.setField(fix.Text("New order accepted!")) # Since FIX 4.3, ExecTransType is killed and the values are moved to ExecType if beginString.getValue( ) == fix.BeginString_FIX40 or beginString.getValue( ) == fix.BeginString_FIX41 or beginString.getValue( ) == fix.BeginString_FIX42: executionReport.setField(fix.ExecTransType(fix.ExecTransType_NEW)) # ExecType and LeavesQty fields only existsince FIX 4.1 if beginString.getValue() >= fix.BeginString_FIX41: if beginString.getValue() <= fix.BeginString_FIX42: executionReport.setField(fix.ExecType( fix.ExecType_FILL)) #150=2 FILL (or 1 PARTIAL_FILL) else: # FILL and PARTIAL_FILL are removed and replaced by TRADE (F) since FIX 4.3 as these info can be retrieved from OrdStatus field executionReport.setField(fix.ExecType( fix.ExecType_TRADE)) #150=F TRADE executionReport.setField(fix.LeavesQty(0)) return executionReport
def buildMsgHeader(self, msgType): self.msg = msg = fix.Message() header = msg.getHeader() header.setField(fix.BeginString(fix.BeginString_FIXT11)) header.setField(fix.MsgType(msgType)) header.setField(fix.SenderCompID("pjseoane232")) header.setField(fix.TargetCompID("ROFX")) return self.msg
def fromApp(self, message, sessionID): print("Received the following message: %s" % message.toString()) beginString = fix.BeginString() msgType = fix.MsgType() msgSeqNum = fix.MsgSeqNum() message.getHeader().getField(beginString) message.getHeader().getField(msgType) message.getHeader().getField(msgSeqNum) print("Message type = %s" % msgType.getString()) if msgType.getString() == fix.MsgType_NewOrderSingle: print("New Order received") if SKIP_AUTHENTICATION: executionReport = self.getExecutionReportForNewOrder(message) else: executionReport = self.getExecutionReportForNewOrder2(message) print("Execution report to send: %s" % executionReport.toString()) self.sendReport(executionReport, sessionID) elif msgType.getString() == fix.MsgType_OrderCancelRequest: print("Cancel Order received") if SKIP_AUTHENTICATION: executionReport = self.getExecutionReportForCancelOrder( message) # use below 3 lines and comment out above 3 if you want to send order cancel reject message # orderCancelReject = self.getOrderCancelReject(message) # print("Order cancel reject to send: %s" % orderCancelReject.toString()) # self.sendReport(orderCancelReject, sessionID) else: executionReport = self.getExecutionReportForCancelOrder2( message) print("Execution report to send: %s" % executionReport.toString()) self.sendReport(executionReport, sessionID) elif msgType.getString() == fix.MsgType_OrderStatusRequest: print("Order status request received") if SKIP_AUTHENTICATION: executionReport = self.getExecutionReportForStatusRequest( message) else: executionReport = self.getExecutionReportForStatusRequest2( message) print("Execution report to send: %s" % executionReport.toString()) self.sendReport(executionReport, sessionID) else: print("Unsupported MsgType") reject = fix.Message() reject.getHeader().setField(beginString) reject.getHeader().setField(fix.MsgType(fix.MsgType_Reject)) reject.setField(fix.RefMsgType(msgType.getString())) reject.setField(fix.RefSeqNum( msgSeqNum.getValue())) #45 = RefSeqNum reject.setField( fix.SessionRejectReason(fix.SessionRejectReason_INVALID_MSGTYPE )) #373 = 11 INVALID_MSGTYPE reject.setField( fix.Text("iSTOX FIX API does not support this message type")) self.sendReport(reject, sessionID)
def start_new_message(self, msg_type): new_message = fix.Message() message_fields = [ fix.BeginString(fix.BeginString_FIX44), fix.MsgType(msg_type), fix.TransactTime() ] for field in message_fields: new_message.getHeader().setField(field) return new_message
def buildMsgHeader(self, msgType): self.msg = msg = fix.Message() header = msg.getHeader() header.setField(fix.BeginString(fix.BeginString_FIXT11)) header.setField(fix.ApplVerID(fix.ApplVerID_FIX50SP2)) header.setField(fix.MsgType(msgType)) header.setField(fix.SenderCompID(self.usrId)) header.setField(fix.TargetCompID("ROFX")) return self.msg
def fromApp(self, message, sessionID): beginString = fix.BeginString() msgType = fix.MsgType() message.getHeader().getField(beginString) message.getHeader().getField(msgType) symbol = fix.Symbol() side = fix.Side() ordType = fix.OrdType() orderQty = fix.OrderQty() price = fix.Price() clOrdID = fix.ClOrdID() message.getField(ordType) print(ordType) if ordType.getValue() != fix.OrdType_LIMIT: raise fix.IncorrectTagValue(ordType.getField()) message.getField(symbol) message.getField(side) message.getField(orderQty) message.getField(price) message.getField(clOrdID) executionReport = fix.Message() executionReport.getHeader().setField(beginString) executionReport.getHeader().setField( fix.MsgType(fix.MsgType_ExecutionReport)) executionReport.setField(fix.OrderID(self.genOrderID())) executionReport.setField(fix.ExecID(self.genExecID())) executionReport.setField(fix.OrdStatus(fix.OrdStatus_FILLED)) executionReport.setField(symbol) executionReport.setField(side) executionReport.setField(fix.CumQty(orderQty.getValue())) executionReport.setField(fix.AvgPx(price.getValue())) executionReport.setField(fix.LastShares(orderQty.getValue())) executionReport.setField(fix.LastPx(price.getValue())) executionReport.setField(clOrdID) executionReport.setField(orderQty) if beginString.getValue( ) == fix.BeginString_FIX40 or beginString.getValue( ) == fix.BeginString_FIX41 or beginString.getValue( ) == fix.BeginString_FIX42: executionReport.setField(fix.ExecTransType(fix.ExecTransType_NEW)) if beginString.getValue() >= fix.BeginString_FIX41: executionReport.setField(fix.ExecType(fix.ExecType_FILL)) executionReport.setField(fix.LeavesQty(0)) try: fix.Session.sendToTarget(executionReport, sessionID) except (SessionNotFound, e): return
def buildMsgHeader(self, msgType): """ Message Header Builder """ self.msg = msg = fix.Message() header = msg.getHeader() header.setField(fix.BeginString(fix.BeginString_FIXT11)) header.setField(fix.MsgType(msgType)) header.setField(fix.SenderCompID(self.usrID)) header.setField(fix.TargetCompID(self.targetCompID)) return self.msg
def fromApp(self, message, sessionID): print('fromApp') beginString = fix.BeginString() msgType = fix.MsgType() message.getHeader().getField(beginString) message.getHeader().getField(msgType) if msgType.getValue() == fix.MsgType_NewOrderSingle: self.new_order(message, beginString, sessionID) if msgType.getValue() == fix.MsgType_OrderCancelRequest: self.cancel(message, sessionID)
def fromApp(self, message, sessionID): print "FROM APP" fixMsgType = quickfix.MsgType() beginString = quickfix.BeginString() message.getHeader().getField(beginString) message.getHeader().getField(fixMsgType) msgType = fixMsgType.getValue() self.logger.info("FixSimApplication.fromApp: Message type %s", str(msgType)) self.dispatchFromApp(msgType, message, beginString, sessionID)
def logout_msg(sender_comp_id, target_comp_id, username_client, ): global ntwk_id logout_req = fix.Message() logout_req.getHeader().setField(fix.BeginString(fix.BeginString_FIXT11)) logout_req.getHeader().setField(fix.MsgType(fix.MsgType_Logout)) logout_req.setField(fix.SenderCompID(sender_comp_id)) logout_req.setField(fix.TargetCompID(target_comp_id)) logout_req.setField(fix.MsgSeqNum(5)) logout_req.setField(fix.Username(username_client)) logout_req.setField(fix.NetworkResponseID("%s" % ntwk_id)) logout_req = bytes(logout_req.toString(), encoding="UTF-8") return logout_req
def derivativeSecurityListRequest(self): msg = fix.Message() header = msg.getHeader() header.setField(fix.BeginString(fix.BeginString_FIXT11)) header.setField(fix.MsgType("z")) header.setField(fix.SenderCompID("pjseoane232")) header.setField(fix.TargetCompID("ROFX")) msg.setField(fix.SecurityReqID(self.ListaContratos)) msg.setField(fix.SecurityListRequestType(4)) #msg.setField(fix.MarketID("ROFX")) #msg.setField(fix.MarketSegmentID("DDF")) fix.Session.sendToTarget(msg)
def get_quote(self,curr): print("\nSubscribe {} Quote:".format(curr)) quote = fix.Message() quote.getHeader().setField(fix.BeginString(fix.BeginString_FIX44)) quote.getHeader().setField(fix.MsgType(fix.MsgType_QuoteRequest)) quote.setField(fix.MsgType(fix.MsgType_QuoteRequest)) quote.setField(fix.Symbol(curr)) quote.setField(fix.QuoteReqID(curr)) quote.setField(fix.QuoteRequestType(True)) fix.Session.sendToTarget(quote, self.sessionID)
def new_message(msg_type: int) -> fix.Message: """""" message = fix.Message() header = message.getHeader() header.setField(fix.BeginString("FIX.4.2")) header.setField(fix.MsgType(msg_type)) utc_now = datetime.utcnow() utc_timestamp = utc_now.strftime("%Y%m%d-%H:%M:%S") message.setField(60, utc_timestamp) return message
def toAdmin(self, message, sessionID): self.sessionID = sessionID self.message = message print("toAdmin - message: " + message.toString() + " sessionID:" + sessionID.toString()) beginString = fix.BeginString() msgType = fix.MsgType() message.getHeader().getField(beginString) message.getHeader().getField(msgType) if msgType.getValue() == 'A': message.setField(fix.Username('sgmmDEMOSOMFXTRADESTR1')) message.setField(fix.Password('Stater123')) pass
def request_order(self): message = fix.Message() header = message.getHeader() header.setField(fix.BeginString(fix.BeginString_FIX42)) header.setField(fix.MsgType(fix.MsgType_OrderStatusRequest)) #35=H message.setField(fix.ClOrdID("*")) message.setField(fix.OrderID("375")) message.setField(fix.Side(fix.Side_BUY)) #54=1 Buy message.setField(fix.Symbol("ABCD")) #55=ABCD print(message.toString()) try: fix.Session.sendToTarget(message, self.sessionID) except (fix.ConfigError, fix.RuntimeError) as e: print(e)
def sendOrderCancelRequest(self): message = fix.Message() header = message.getHeader() header.setField(fix.BeginString("FIX.4.2")) header.setField(fix.SenderCompID("CLIENT1")) header.setField(fix.TargetCompID("EXECUTOR")) header.setField(fix.MsgType("D")) message.setField(fix.OrigClOrdID("123")) message.setField(fix.ClOrdID("321")) message.setField(fix.Symbol("LNUX")) message.setField(fix.Side(fix.Side_BUY)) message.setField(fix.Text("Cancel My Order!")) fix.Session.sendToTarget(message, self.sessionID)
def fromApp(self, message, sessionID): beginString = fix.BeginString() msgType = fix.MsgType() message.getHeader().getField( beginString ) message.getHeader().getField( msgType ) if msgType.getValue() == 'F': print 'Cancel Request' symbol = fix.Symbol() side = fix.Side() clOrdID = fix.ClOrdID() origClOrdID = fix.OrigClOrdID() orderQty = fix.OrderQty() message.getField( orderQty ) message.getField( clOrdID ) message.getField( origClOrdID ) message.getField( symbol ) message.getField( side ) executionReport = fix.Message() executionReport.getHeader().setField( beginString ) executionReport.getHeader().setField( fix.MsgType(fix.MsgType_ExecutionReport) ) executionReport.setField( symbol ) executionReport.setField( side ) executionReport.setField( clOrdID ) executionReport.setField( origClOrdID ) executionReport.setField( fix.ExecID(self.genExecID()) ) executionReport.setField( fix.OrderID(self.genOrderID()) ) executionReport.setField( fix.AvgPx(0)) executionReport.setField( fix.LastShares(0)) executionReport.setField( fix.CumQty(0)) if beginString.getValue() == fix.BeginString_FIX40 or beginString.getValue() == fix.BeginString_FIX41 or beginString.getValue() == fix.BeginString_FIX42: executionReport.setField( fix.ExecTransType(fix.ExecTransType_CANCEL) ) executionReport.setField( fix.OrdStatus(fix.OrdStatus_CANCELED) ) if beginString.getValue() >= fix.BeginString_FIX41: executionReport.setField( fix.ExecType(fix.ExecType_CANCELED) ) executionReport.setField( fix.LeavesQty(0) ) else: executionReport.setField( fix.ExecType(fix.ExecType_CANCELED) ) executionReport.setField( fix.LeavesQty(0) ) try: print executionReport fix.Session.sendToTarget( executionReport, sessionID ) except SessionNotFound, e: return
def test_isEmpty(self): message = fix.Message() self.assertTrue( message.isEmpty() ) message.getHeader().setField( fix.BeginString("FIX.4.2") ) self.assertTrue( message.isEmpty() == 0 ) message.clear() self.assertTrue( message.isEmpty() ) message.setField( fix.Symbol("MSFT") ) self.assertTrue( message.isEmpty() == 0 ) message.clear() self.assertTrue( message.isEmpty() ) message.getTrailer().setField( fix.CheckSum(10) ) self.assertTrue( message.isEmpty() == 0 ) message.clear() self.assertTrue( message.isEmpty() )
def fromApp(self, message, sessionID): msg = message.toString().replace(__SOH__, "|") log.info('fromApp sessionID:{}, message:{}'.format(sessionID, msg)) beginString = fix.BeginString() msgType = fix.MsgType() message.getHeader().getField(beginString) message.getHeader().getField(msgType) if msgType.getValue() == fix.MsgType_NewOrderSingle: log.info("********** fromApp [NewOrderSingle] MsgType **********") self.new_order(message, beginString, sessionID) if msgType.getValue() == fix.MsgType_OrderCancelRequest: log.info( "********** fromApp [OrderCancelRequest] MsgType **********") self.cancel(message, sessionID)