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()
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()
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()
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))
def test_time_bad_precision(self): msg = FixMessage() t = 1484581872.933458 with self.assertRaises(ValueError): msg.append_time(52, t, 9) return
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
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
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
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
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
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
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
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()
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)
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))
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()
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()
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()
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()
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()
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()
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()
def test_time_defaults(self): msg = FixMessage() msg.append_time(52) return
def test_time_explicit_none(self): msg = FixMessage() msg.append_time(52, None) return
def test_time_explicit_none(self): """Test explicit None as timestamp value""" msg = FixMessage() msg.append_time(52, None) return
def test_time_defaults(self): """Test no supplied timestamp value""" msg = FixMessage() msg.append_time(52) return
def test_time_defaults(self): """Test no supplied timestamp value""" msg = FixMessage() msg.append_time(52) self.assertIsNotNone(msg.get(52))
def test_time_explicit_none(self): """Test explicit None as timestamp value""" msg = FixMessage() msg.append_time(52, None) self.assertIsNotNone(msg.get(52))