Exemple #1
0
    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!')
Exemple #2
0
    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)
Exemple #4
0
    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)
Exemple #5
0
 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
Exemple #6
0
    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)
Exemple #7
0
    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
Exemple #8
0
    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
Exemple #9
0
    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)
Exemple #10
0
    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))
Exemple #11
0
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
Exemple #12
0
    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
Exemple #13
0
 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
Exemple #14
0
    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)
Exemple #15
0
 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)
Exemple #16
0
    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
Exemple #17
0
 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!')
Exemple #18
0
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
Exemple #19
0
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
Exemple #20
0
 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
Exemple #22
0
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
Exemple #23
0
 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
Exemple #24
0
 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)
Exemple #25
0
 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
Exemple #26
0
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
Exemple #27
0
 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)
Exemple #28
0
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
Exemple #29
0
    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)
Exemple #30
0
	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()