Exemplo n.º 1
0
    def execution_report(self, message, filled_qty, trasaction_type, order_id,
                         symbol):

        parser = Parser()
        parser.append_buffer(message)
        message_recv = parser.get_message()

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, int(message_recv.get(34)) + 1)  # sequence no
        msg.append_pair(35, '8')  # msgType = logon
        msg.append_pair(49, message_recv.get(56))
        msg.append_time(52)  # timestamp
        msg.append_pair(56, message_recv.get(49))
        msg.append_pair(14, filled_qty)
        msg.append_pair(31, message_recv.get(44))
        msg.append_pair(32, message_recv.get(38))
        msg.append_pair(54, message_recv.get(54))
        msg.append_pair(37, order_id)  # orderID
        msg.append_pair(39, '0')  # order status, now it's all filled
        msg.append_pair(55, symbol)  # subscribed ticker

        if str.lower(trasaction_type) == 'new':
            msg.append_pair(279, '0')
        elif str.lower(trasaction_type) == 'cancel':
            msg.append_pair(279, '2')
        elif str.lower(trasaction_type) == 'amend':
            msg.append_pair(279, '1')

        return msg.encode()
Exemplo n.º 2
0
    def new_order(self, ticker, price, volume, order_type, side, sender,
                  target, seq_no):

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, seq_no)  # sequence no
        msg.append_pair(35, 'D')  # msgType = logon
        msg.append_pair(49, sender)
        msg.append_time(52)  # timestamp
        msg.append_pair(56, target)
        msg.append_pair(55, ticker)  # subscribed ticker
        msg.append_pair(38, volume)
        msg.append_pair(21, '3')
        msg.append_pair(44, price)

        # side
        if str.lower(side) == 'bid':
            msg.append_pair(54, '0')  # order side
        else:
            msg.append_pair(54, '1')

        # order type
        if str.lower(order_type) == 'market':
            msg.append_pair(40, '1')
        elif str.lower(order_type) == 'limit':
            msg.append_pair(40, '2')

        return msg.encode()
Exemplo n.º 3
0
    def full_refresh(self, message, price, volume, side):

        parser = Parser()
        parser.append_buffer(message)
        message_recv = parser.get_message()

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, int(message_recv.get(34)) + 1)  # sequence no
        msg.append_pair(35, 'W')  # msgType = logon
        msg.append_pair(49, message_recv.get(56))
        msg.append_time(52)  # timestamp
        msg.append_pair(56, message_recv.get(49))
        msg.append_pair(55, message_recv.get(55))  # subscribed ticker
        msg.append_pair(268, 1)

        # side
        if str.lower(side) == 'bid':
            msg.append_pair(269, '0')  # order side
        elif str.lower(side) == 'ask':
            msg.append_pair(269, '1')
        else:
            print('[FIXMESSAGE]Unknown side..')
            return

        msg.append_pair(271, volume)  #volume
        msg.append_pair(270, price)  #price

        return msg.encode()
Exemplo n.º 4
0
 def test_time_datetime(self):
     """Test use of built-in datetime timestamp values"""
     msg = FixMessage()
     t = 1484581872.933458
     dt = datetime.datetime.utcfromtimestamp(t)
     msg.append_time(52, dt)
     self.assertEqual(fix_str("20170116-15:51:12.933"), msg.get(52))
Exemplo n.º 5
0
    def test_time_bad_precision(self):
        msg = FixMessage()
        t = 1484581872.933458

        with self.assertRaises(ValueError):
           msg.append_time(52, t, 9)
        return
Exemplo n.º 6
0
    def test_time_microseconds(self):
        msg = FixMessage()
        t = 1484581872.933458
        msg.append_time(52, t, 6)

        self.assertEqual("2017-01-16-15:51:12.933458", msg.get(52))
        return
Exemplo n.º 7
0
    def test_time_float(self):
        msg = FixMessage()
        t = 1484581872.933458
        msg.append_time(52, t)

        self.assertEqual("2017-01-16-15:51:12.933", msg.get(52))
        return
Exemplo n.º 8
0
    def test_time_float(self):
        """Test floating point timestamp values"""
        msg = FixMessage()
        t = 1484581872.933458
        msg.append_time(52, t)

        self.assertEqual(fix_str("20170116-15:51:12.933"), msg.get(52))
        return
Exemplo n.º 9
0
    def test_time_datetime(self):
        msg = FixMessage()
        t = 1484581872.933458
        dt = datetime.datetime.utcfromtimestamp(t)
        msg.append_time(52, dt)

        self.assertEqual("2017-01-16-15:51:12.933", msg.get(52))
        return
Exemplo n.º 10
0
    def test_time_microseconds(self):
        """Test formatting of time values with microseconds"""
        msg = FixMessage()
        t = 1484581872.933458
        msg.append_time(52, t, 6)

        self.assertEqual(fix_str("20170116-15:51:12.933458"), msg.get(52))
        return
Exemplo n.º 11
0
    def test_time_seconds_only(self):
        """Test formatting of time values with no decimal component"""
        msg = FixMessage()
        t = 1484581872.933458
        msg.append_time(52, t, 0)

        self.assertEqual(fix_str("20170116-15:51:12"), msg.get(52))
        return
Exemplo n.º 12
0
    def test_time_localtime(self):
        msg = FixMessage()
        t = 1484581872.933458
        msg.append_time(52, t, utc=False)

        test = time.localtime(t)
        s = "%04u-%02u-%02u-%02u:%02u:%02u.%03u" % (test.tm_year, test.tm_mon, test.tm_mday, test.tm_hour, test.tm_min, test.tm_sec, int((t - int(t)) * 1000))
        self.assertEqual(s, msg.get(52))
        return
Exemplo n.º 13
0
    def goodbye(self, sender, target, seq_no):

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, seq_no)  # sequence no
        msg.append_pair(35, '5')  # msgType = logout
        msg.append_pair(49, sender)
        msg.append_time(52)  # timestamp
        msg.append_pair(56, target)
        return msg.encode()
Exemplo n.º 14
0
    def test_time_bad_precision(self):
        """Test bad time precision values"""
        if VERSION == 26:
            return

        msg = FixMessage()
        t = 1484581872.933458

        with self.assertRaises(ValueError):
            msg.append_time(52, t, 9)
Exemplo n.º 15
0
    def test_time_localtime(self):
        """Test non-UTC supplied time values"""
        msg = FixMessage()
        t = 1484581872.933458
        msg.append_time(52, t, utc=False)

        test = time.localtime(t)
        s = "%04u%02u%02u-%02u:%02u:%02u.%03u" % \
            (test.tm_year, test.tm_mon, test.tm_mday,
             test.tm_hour, test.tm_min, test.tm_sec,
             int((t - int(t)) * 1000))
        self.assertEqual(fix_str(s), msg.get(52))
Exemplo n.º 16
0
    def aloha(self, sender, target, seq_no=1):

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, seq_no)  # sequence no
        msg.append_pair(35, 'A')  # msgType = logon
        msg.append_pair(49, sender)
        msg.append_time(52)  # timestamp
        msg.append_pair(56, target)
        msg.append_pair(98, 0)  # encrypt type
        msg.append_pair(108, 30)  # heart beat
        msg.append_pair(141, 'N')  # reset sequence number
        return msg.encode()
Exemplo n.º 17
0
    def cancel_order(self, order_id, sender, target, sequence_no):

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, sequence_no)  # sequence no
        msg.append_pair(35, 'F')  # msgType = logon
        msg.append_pair(49, sender)
        msg.append_time(52)  # timestamp
        msg.append_pair(56, target)
        # cancel order by order_id
        msg.append_pair(37, order_id)  # orderID

        return msg.encode()
Exemplo n.º 18
0
    def goodbye_back(self, message):

        parser = Parser()
        parser.append_buffer(message)
        message_recv = parser.get_message()

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, int(message_recv.get(34)) + 1)  # sequence no
        msg.append_pair(35, '5')  # msgType = logout
        msg.append_pair(49, message_recv.get(56))
        msg.append_time(52)  # timestamp
        msg.append_pair(56, message_recv.get(49))
        return msg.encode()
Exemplo n.º 19
0
    def subscribe(self, ticker, sender, target, seq_no=1, rep_seq=1):

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, seq_no)  # sequence no
        msg.append_pair(35, 'V')  # msgType = logon
        msg.append_pair(49, sender)
        msg.append_time(52)  # timestamp
        msg.append_pair(56, target)
        msg.append_pair(146, rep_seq)  # repeating sequence
        msg.append_pair(55, ticker)  # subscribed ticker
        msg.append_pair(262, 1)
        msg.append_pair(263, 1)
        msg.append_pair(264, 1)
        msg.append_pair(265, 1)
        msg.append_pair(267, 2)
        msg.append_pair(269, 0)

        return msg.encode()
Exemplo n.º 20
0
    def update(self,
               ticker,
               price,
               volume,
               side,
               order_id,
               seq_no,
               sender,
               target,
               update_type='change'):

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, seq_no)  # sequence no
        msg.append_pair(35, 'X')  # msgType
        msg.append_pair(49, sender)
        msg.append_time(52)  # timestamp
        msg.append_pair(56, target)
        msg.append_pair(55, ticker)  # subscribed ticker
        msg.append_pair(37, order_id)  # orderID
        msg.append_pair(268, 1)  # number of message

        # if new order
        if str.lower(update_type) == 'new':
            msg.append_pair(279, '0')
        elif str.lower(update_type) == 'change':
            msg.append_pair(279, '1')
        else:
            msg.append_pair(279, '2')

        # side
        if str.lower(side) == 'bid':
            msg.append_pair(269, '0')  # order side
        else:
            msg.append_pair(269, '1')

        msg.append_pair(271, volume)  #volume
        msg.append_pair(270, price)
        return msg.encode()
Exemplo n.º 21
0
    def amend_order(self, order_id, price, volume, order_type, sender, target,
                    sequence_no):

        msg = Message()
        msg.append_pair(8, self.header)
        msg.append_pair(34, sequence_no)  # sequence no
        msg.append_pair(35, 'G')  # msgType = logon
        msg.append_pair(49, sender)
        msg.append_time(52)  # timestamp
        msg.append_pair(56, target)
        # cancel order by order_id
        msg.append_pair(37, order_id)  # orderID
        msg.append_pair(44, price)
        msg.append_pair(38, volume)

        # side
        if str.lower(order_type) == 'market':
            msg.append_pair(40, '1')  # order side
        else:
            msg.append_pair(40, '2')

        return msg.encode()
Exemplo n.º 22
0
    def aloha_back(self, message):

        parser = Parser()
        parser.append_buffer(message)
        message_recv = parser.get_message()

        # compile new message
        msg = Message()
        msg.append_pair(8, self.header)

        # reset sequence number?
        if message_recv.get(141) == 'Y':
            msg.append_pair(34, 1)
        else:
            msg.append_pair(34, int(message_recv.get(34)) + 1)

        msg.append_pair(35, 'A')
        msg.append_pair(49, message_recv.get(56))
        msg.append_time(52)
        msg.append_pair(56, message_recv.get(49))
        msg.append_pair(98, 0)
        msg.append_pair(108, 30)
        msg.append_pair(141, 'Y')
        return msg.encode()
Exemplo n.º 23
0
 def test_time_defaults(self):
     msg = FixMessage()
     msg.append_time(52)
     return
Exemplo n.º 24
0
 def test_time_explicit_none(self):
     msg = FixMessage()
     msg.append_time(52, None)
     return
Exemplo n.º 25
0
 def test_time_explicit_none(self):
     """Test explicit None as timestamp value"""
     msg = FixMessage()
     msg.append_time(52, None)
     return
Exemplo n.º 26
0
 def test_time_defaults(self):
     """Test no supplied timestamp value"""
     msg = FixMessage()
     msg.append_time(52)
     return
Exemplo n.º 27
0
 def test_time_defaults(self):
     """Test no supplied timestamp value"""
     msg = FixMessage()
     msg.append_time(52)
     self.assertIsNotNone(msg.get(52))
Exemplo n.º 28
0
 def test_time_explicit_none(self):
     """Test explicit None as timestamp value"""
     msg = FixMessage()
     msg.append_time(52, None)
     self.assertIsNotNone(msg.get(52))