Esempio n. 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!')
Esempio n. 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)
Esempio n. 4
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)
Esempio n. 5
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)
Esempio n. 6
0
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
Esempio n. 7
0
    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)
Esempio n. 8
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
Esempio n. 9
0
 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"))
Esempio n. 10
0
    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
Esempio n. 11
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
Esempio n. 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
Esempio n. 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
Esempio n. 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)
Esempio n. 15
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
Esempio n. 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
    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
Esempio n. 18
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
Esempio n. 19
0
    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)
Esempio n. 20
0
    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)
Esempio n. 21
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
Esempio n. 22
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)
Esempio n. 23
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)
Esempio n. 24
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
Esempio n. 25
0
 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
Esempio n. 26
0
 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)
Esempio n. 27
0
    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)
Esempio n. 28
0
    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
Esempio n. 29
0
 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() )
Esempio n. 30
0
    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)