Example #1
0
    def compose_market_data_request(self):
        market_data_request = quickfix44.MarketDataRequest()

        market_data_request.setField(quickfix.MDReqID('1'))
        market_data_request.setField(quickfix.SubscriptionRequestType(quickfix.SubscriptionRequestType_SNAPSHOT_PLUS_UPDATES))
        market_data_request.setField(quickfix.MarketDepth(0))
        market_data_request.setField(quickfix.NoMDEntryTypes(2))
        market_data_request.setField(quickfix.MDUpdateType(quickfix.MDUpdateType_INCREMENTAL_REFRESH))

        group = quickfix44.MarketDataRequest().NoMDEntryTypes()
        group.setField(quickfix.MDEntryType(quickfix.MDEntryType_BID))
        market_data_request.addGroup(group)
        group.setField(quickfix.MDEntryType(quickfix.MDEntryType_OFFER))
        market_data_request.addGroup(group)

        market_data_request.setField(quickfix.NoRelatedSym(self.reference_data.get_count()))

        symbol = quickfix44.MarketDataRequest().NoRelatedSym()

        for instrument in self.reference_data.get_instruments():
            symbol.setField(quickfix.SecurityExchange(instrument.exchange))
            symbol.setField(quickfix.Symbol(instrument.symbol))
            market_data_request.addGroup(symbol)

        return market_data_request
Example #2
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)
    def on_market_data_request(self, message):
        print('Market Data REQUEST!')
        message_fields = {
            'md_reqID': fix.MDReqID(),
            'depth': fix.MarketDepth(),
            'subscription_type': fix.SubscriptionRequestType(),
        }
        message_details = {}
        for k, v in message_fields.items():
            message_details[k] = self.get_field_value(message, v)

        message_details['entry_types'] = {}
        message_details['symbols'] = {}
        n_entry_types = self.get_field_value(message, fix.NoMDEntryTypes())
        group = fix44.MarketDataRequest().NoMDEntryTypes()
        for i in range(n_entry_types):
            message.getGroup(i + 1, group)
            message_details['entry_types'][i] = self.get_field_value(
                group, fix.MDEntryType())
        n_symbols = self.get_field_value(message, fix.NoRelatedSym())
        group = fix44.MarketDataRequest().NoRelatedSym()
        for i in range(n_symbols):
            message.getGroup(i + 1, group)
            message_details['symbols'][i] = self.get_field_value(
                group, fix.Symbol())
        orderID = self.gen_orderID()
        self.orders[orderID] = message_details

        # testing
        self.test_snaps(message_details, full=True)
        self.test_snaps(message_details, full=False)
    def process_security_list(self, security_list):

        no_related_sym = quickfix.NoRelatedSym()
        symbol_field = quickfix.Symbol()

        security_list.getField(no_related_sym)

        number_of_instruments = int(no_related_sym.getValue())

        for i in range(number_of_instruments):
            group = quickfix.Group(no_related_sym.getField(),
                                   symbol_field.getField())
            security_list.getGroup(i + 1, group)
            group.getField(symbol_field)

            security_exchange = quickfix.SecurityExchange()
            group.getField(security_exchange)

            exchange = security_exchange.getValue()
            symbol = symbol_field.getValue()

            instrument = self.reference_data.ins_instrument(exchange, symbol)
            print("New Instrument : " + str(instrument))

            text_field = quickfix.Text()
            if group.isSetField(text_field):
                group.getField(text_field)
                text = str(text_field.getValue())
                ref_data = json.loads(text)

                self.reference_data.ins_reference_data(instrument, ref_data)
Example #5
0
 def onMessage(self, message, sessionID):
     msg_type = get_header_value(message, fix.MsgType())
     if msg_type == fix.MsgType_MarketDataRequest:
         group = fix44.MarketDataRequest.NoRelatedSym()
         group_count = get_field_value(message, fix.NoRelatedSym())
         for group_idx in range(1, group_count + 1):
             message.getGroup(group_idx, group)
             symbol = get_field_value(group, fix.Symbol())
             if not sessionID.getTargetCompID().getString() in self.marketSubscribers[symbol]:
                 self.marketSubscribers[symbol].append(sessionID.getTargetCompID().getString())
Example #6
0
    def __remove_client(self, message, sessionID):
        no_of_symbols = fix.NoRelatedSym()
        no_related_symbols = fix44.MarketDataRequest.NoRelatedSym()
        message.getField(no_of_symbols)
        symbol = fix.Symbol()

        for i in range(no_of_symbols):
            message.getGroup(i + 1, no_related_symbols)
            no_related_symbols.getField(symbol)
            sym = symbol.getValue()

            if sym in self.clients:
                self.clients[sym].remove(sessionID)
Example #7
0
    def onMessage_SecurityList(self) -> dict:
        group = fix50.SecurityList().NoRelatedSym()
        # print(group)

        mktSegmentID = self.getValue(fix.MarketSegmentID())
        noRelatedSym = self.getValue(fix.NoRelatedSym())

        mktSegment = {}
        tickerData = {}
        #allSecurities = {}

        for tickers in range(1, noRelatedSym + 1):
            self.message.getGroup(tickers, group)
            aux = {
                'symbol':
                self.getValueGroup(group, fix.Symbol()),
                'factor':
                self.getValueGroup(group, fix.Factor()),
                'securityDesc':
                self.getValueGroup(group, fix.SecurityDesc()),
                'cfiCode':
                self.getValueGroup(group, fix.CFICode()),
                'contractMultiplier':
                self.getValueGroup(group, fix.ContractMultiplier()),
                'minPriceIncrement':
                self.getValueGroup(group, fix.MinPriceIncrement()),
                'tickSize':
                group.getField(5023),
                'instrumentPricePrecision':
                group.getField(5514),
                'instrumentSizePrecision':
                group.getField(7117),
                'currency':
                self.getValueGroup(group, fix.Currency()),
                'maxTradeVol':
                self.getValueGroup(group, fix.MaxTradeVol()),
                'minTradeVol':
                self.getValueGroup(group, fix.MinTradeVol()),
                'lowLimitPrice':
                self.getValueGroup(group, fix.LowLimitPrice()),
                'highLimitPrice':
                self.getValueGroup(group, fix.HighLimitPrice())
            }
            tickerData[self.getValueGroup(group, fix.Symbol())] = aux
        mktSegment[mktSegmentID] = tickerData

        # para unir todos los diccionarios en 1
        #allSecurities[mktSegmentID] = mktSegment
        return mktSegment
Example #8
0
    def __add_client(self, message, sessionID):
        no_of_symbols = fix.NoRelatedSym()
        no_related_symbols = fix44.MarketDataRequest().NoRelatedSym()
        message.getField(no_of_symbols)
        symbol = fix.Symbol()

        for i in range(no_of_symbols.getValue()):
            message.getGroup(i + 1, no_related_symbols)
            no_related_symbols.getField(symbol)
            sym = symbol.getValue()

            self.logger.debug(
                f"Got request for symbol {sym} from {sessionID}.")

            if sym in self.clients:
                self.clients[sym].append(sessionID)
            else:
                self.clients[sym] = [sessionID]
    def GetMarketData(self):
        message = fix.Message()
        header = message.getHeader()
        header.setField(fix.MsgType(fix.MsgType_MarketDataRequest))

        noRelatedSym = fix44.MarketDataRequest().NoRelatedSym()
        noRelatedSym.setField(fix.Symbol('XBTCNY'))
        message.addGroup(noRelatedSym)

        message.setField(fix.NoRelatedSym(1))
        message.setField(fix.MDReqID('1'))
        message.setField(fix.SubscriptionRequestType('0'))
        message.setField(fix.MarketDepth(10))
        group = fix44.MarketDataRequest().NoMDEntryTypes()
        group.setField(fix.MDEntryType('0'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('1'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('2'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('3'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('4'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('5'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('6'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('7'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('8'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('9'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('A'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('B'))
        message.addGroup(group)
        group.setField(fix.MDEntryType('C'))
        message.addGroup(group)

        fix.Session.sendToTarget(message, self.sessionID)
Example #10
0
    def marketDataRequest(self):
        # pag 63
        msg = fix50.MarketDataRequest()
        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"))

        # msg = self.buildMsgHeader("V")

        msg.setField(fix.MDReqID("ListaMktData2"))
        msg.setField(fix.SubscriptionRequestType('2'))
        msg.setField(fix.MarketDepth(1))
        msg.setField(fix.MDUpdateType(0))
        msg.setField(fix.AggregatedBook(True))

        # msg.setField(fix.NoMDEntryTypes(2))

        # ---- define Group

        group = fix50.MarketDataRequest().NoMDEntryTypes()
        group.setField(fix.MDEntryType('0'))
        msg.addGroup(group)

        # group = fix50.MarketDataRequest().NoMDEntryTypes()
        group.setField(fix.MDEntryType('1'))
        msg.addGroup(group)

        # group3 = fix50.MarketDataRequest().NoMDEntryTypes()
        # group3.setField(fix.MDEntryType('2'))
        # msg.addGroup(group3)
        # -----------------------------------------

        msg.setField(fix.NoRelatedSym(1))
        group = fix50.MarketDataRequest().NoRelatedSym()
        group.setField(fix.Symbol("RFX20Sep19"))
        msg.addGroup(group)

        fix.Session.sendToTarget(msg)