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 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 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 newOrderSingle(self): try: LOG_EVENT("New Order Single") orderMsg = fix.Message() orderMsg.getHeader().setField(self.sessionID.getBeginString()) orderMsg.getHeader().setField( fix.MsgType(fix.MsgType_NewOrderSingle)) orderMsg.getHeader().setField(self.sessionID.getSenderCompID()) orderMsg.getHeader().setField(self.sessionID.getTargetCompID()) orderMsg.getHeader().setField(fix.MsgSeqNum(self.genOrderID())) sendingTime = fix.SendingTime() sendingTime.setString( datetime.utcnow().strftime("%Y%m%d-%H:%M:%S.%f")) orderMsg.getHeader().setField(sendingTime) orderMsg.setField(fix.Account("17018382")) orderMsg.setField(fix.ClOrdID(self.genExecID())) orderMsg.setField(fix.OrderQty(100)) orderMsg.setField(fix.OrdType(fix.TriggerOrderType_LIMIT)) orderMsg.setField(fix.Price(1.216)) orderMsg.setField(fix.Symbol("X.US.OREURUSD")) orderMsg.setField(fix.Side(fix.Side_BUY)) tranactionTime = fix.TransactTime() tranactionTime.setString( datetime.utcnow().strftime("%Y%m%d-%H:%M:%S.%f")) orderMsg.setField(tranactionTime) orderMsg.setField(fix.OpenClose(fix.OpenClose_OPEN)) LOG_PACKET(orderMsg.toString()) fix.Session.sendToTarget(orderMsg, self.sessionID) except Exception as e: print(e)
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 queryNewOrderSingle42(self): ordType = fix.OrdType() message = fix.Message() message.setField(self.queryClOrdID()) message.setField(fix.HandlInst('1')) message.setField(self.querySymbol()) message.setField(self.querySide()) message.setField(fix.TransactTime()) ordType = self.queryOrdType() message.setField(ordType) message.setField(self.queryOrderQty()) message.setField(self.queryTimeInForce()) if abc.getValue() == fix.OrdType_LIMIT or abc.getValue( ) == fix.OrdType_STOP_LIMIT: message.setField(self.queryPrice()) if abc.getValue() == fix.OrdType_STOP or abc.getValue( ) == fix.OrdType_STOP_LIMIT: message.setField(self.queryStopPx()) header = message.getHeader() self.queryHeader(header) newOrderSingle = fix42.NewOrderSingle(message) return newOrderSingle
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 toAdmin(self, m: fix.Message, session_id: fix.SessionID): if self.username and self.password: if m.getHeader().getField( fix.MsgType().getTag()) == fix.MsgType_Logon: m.setField(fix.Username(self.username)) m.setField(fix.Password(self.password)) if self.autofix_sequence_numbers: text_tag = fix.Text().getTag() is_seqnum_too_low = ( m.getHeader().getField(fix.MsgType().getTag()) == fix.MsgType_Logout and m.isSetField(text_tag) and m.getField(text_tag).startswith("MsgSeqNum too low")) if is_seqnum_too_low: needed_seqnum = int( re.match( "MsgSeqNum too low, expecting (\d+) but received (\d+)", m.getField(text_tag))[2]) self.log_message("toAdmin", m, session_id, levelize=False) logger.warning( f"Resetting MsgSeqNum to {needed_seqnum} as needed. Wait for reconnect..." ) self.session.setNextTargetMsgSeqNum(needed_seqnum) return self.log_message("toAdmin", m, session_id) self.outgoing_messages.put(fix.Message(m))
async def read_broadcast_msg(broadcast_message: str): global residue if broadcast_message.__contains__(begin_string_str): broadcast_message = broadcast_message.replace( begin_string_str, splitter + begin_string_str) msgs = broadcast_message.split(splitter) if residue is not None: msgs[0] = residue + msgs[0] # _parser_logger.debug("Residue and first of next: %s" % msgs[0]) residue = None try: if len(msgs) == 1: _parser_logger.info(msgs[0]) meghdoot.ramadhir(read_msg(msgs[0])) elif len(msgs) > 1: for cmpl_msg in msgs: if cmpl_msg == '': pass else: try: # _parser_logger.debug("Created: %s" % cmpl_msg) fix.Message(cmpl_msg, dd, False) meghdoot.ramadhir(read_msg(cmpl_msg)) except fix.InvalidMessage: residue = cmpl_msg except fix.InvalidMessage: _parser_logger.warning("Invalid Message") else: _parser_logger.debug("residue is not none: %s" % broadcast_message) if residue is not None: residue += residue
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 GetAccountInfo(self, accessKey, secretKey): message = fix.Message() header = message.getHeader() header.setField(fix.MsgType('U1000')) account = GenAccountString(accessKey, secretKey).getAccountString() message.setField(fix.Account(account)) accReqID = str(uuid.uuid1()) message.setField(myfix.AccReqID(accReqID)) fix.Session.sendToTarget(message, self.sessionID)
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 test_req(self): print("Creating testing message... ") test_message = fix.Message() test_message.getHeader().setField(fix.MsgType('1')) test_message.setField(fix.TestReqID('test')) print('sending Test message...') print (f'test message: {test_message.toString()}') # print(f'session ID: {self.sessionID}') fix.Session.sendToTarget(test_message, self.sessionID) print('test message sent!')
def get_quoterequest(quotereq_id): """ Retorna QuoteRequest (message) e QuoteRequest (fix). """ quoterequest_fix = fix.Message() quoterequest_msg, _ = get_transaction(messages.QuoteRequest.getMsgType(), quotereq_id) if quoterequest_msg is None: raise RuntimeError(f"Failed to retrieve QuoteRequest {quotereq_id} from databus") quoterequest_fix.setString(quoterequest_msg.OriginalStr) # NOTE: ñ está utilizando dicionário. return quoterequest_msg, quoterequest_fix
def get_newordersingle(clorder_id): """ Retorna NewOrderSingle (message) e NewOrderSingle (fix). """ newordersingle_fix = fix.Message() newordersingle_msg, _ = get_transaction(messages.NewOrderSingle.getMsgType(), clorder_id) if newordersingle_msg is None: raise RuntimeError(f"Failed to retrieve NewOrderSingle {clorder_id} from databus") newordersingle_fix.setString(newordersingle_msg.OriginalStr) # NOTE: ñ está utilizando dicionário. return newordersingle_msg, newordersingle_fix
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 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 read_msg(message): try: rec = fix.Message(message, dd, False) if rec.isAdmin(): return read_admin_msg(rec) elif rec.isApp(): return read_app_msg(rec) except fix.InvalidMessage as e: _parser_logger.warning("Error %s" % e) _parser_logger.info("Error while reading message: %s" % message) return None
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 put_order(self): print("Creating the following order: ") trade = fix.Message() trade.setField(fix.ClOrdID(self.genExecID())) # 11=Unique order trade.setField(fix.HandlInst(fix.HandlInst_MANUAL_ORDER_BEST_EXECUTION)) trade.setField(fix.Symbol('SMBL')) trade.setField(fix.Side(fix.Side_BUY)) trade.setField(fix.OrdType(fix.OrdType_LIMIT)) trade.setField(fix.OrderQty(100)) trade.setField(fix.Price(10)) print trade.toString() fix.Session.sendToTarget(trade, self.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 process_line(line_num, line): # within each line we are looking for a start and end: # start should be '8=FIX'... # end should be last SOH character separator '\x01' msg = line[line.find('8=FIX'):line.rfind('\x01') + 1] if not msg: return False msg_bars = msg.replace('\x01', '|') print('\nFound FIX message at line {}: {}\n'.format(line_num, msg_bars)) msg = fix.Message(msg, dd) print_msg(msg, dd) return True
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 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 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 fromApp(self, message, sessionID): msgType = fix.MsgType() message.getHeader().getField( msgType ) if( msgType.getValue() == fix.MsgType_NewOrderSingle ): echo = fix.Message( message ) possResend = fix.PossResend( 0 ) if( message.getHeader().isSetField( possResend ) ): message.getHeader().getField( possResend ) clOrdID = fix.ClOrdID() message.getField( clOrdID ) if( possResend.getValue() ): if( self.orderIDs.has_key(clOrdID.getString()) ): return self.orderIDs[clOrdID.getString()] = clOrdID.getString() fix.Session.sendToTarget( echo, sessionID ) elif( msgType.getValue() == fix.MsgType_SecurityDefinition ): echo = fix.Message( message ) fix.Session.sendToTarget( echo, sessionID ) else: raise fix.UnsupportedMessageType()