def main(port=9000, debug=None): """FIX gateway Accepts orders over a FIX session. """ if debug: logger.setLevel(logging.DEBUG) logger.info(f"Logging set to debug.") else: logger.setLevel(logging.INFO) logger.info(f"Logging set to info.") settings = fix.SessionSettings("configs/exchange.cfg") log = fix.FileLogFactory(settings) store = fix.FileStoreFactory(settings) app = MessageBroker() address = ("localhost", port) app.set_logging(logger) acceptor = fix.SocketAcceptor(app, store, settings, log) try: acceptor.start() logger.info("FIX.4.2 server started.") conn = Client(address, authkey=b"Dj$0.Jkx1@") logger.info(f"Started market data publisher at port {port}.") while True: sleep(1) if MARKETS: for market in MARKETS: # remove the comment below to print debug orderbook # logger.debug(f"\n{MARKETS[market]._show_orderbook()}") if market in FLUSH_BOOK: bids, asks = MARKETS[market].book() trades = [] if FLUSH_BOOK[market]: # trades trades = list(set(FLUSH_BOOK[market])) book = Book(market, bids, asks, trades) conn.send(book) FLUSH_BOOK.pop(market) except (fix.ConfigError, fix.RuntimeError) as error: raise fix.RuntimeError(error) except KeyboardInterrupt: logger.info(f"Got signal interrupt, exiting...") acceptor.stop()
def main(): try: settings = fix.SessionSettings('config/executor.cfg') application = Executor() storeFactory = fix.FileStoreFactory(settings) logFactory = fix.FileLogFactory(settings) executor = fix.SocketAcceptor(application, storeFactory, settings, logFactory) executor.start() while True: time.sleep(1) except (fix.ConfigError, fix.RuntimeError), e: print(e)
def main(config_file): try: settings = fix.SessionSettings("acceptor.conf") application = Application() storeFactory = fix.FileStoreFactory(settings) logFactory = fix.FileLogFactory(settings) initiator = fix.SocketAcceptor(application, storeFactory, settings, logFactory) initiator.start() while 1: pass except (fix.ConfigError, fix.RuntimeError), e: print e
def main(config_file): try: settings = fix.SessionSettings(config_file) application = Application() storefactory = fix.FileStoreFactory(settings) logfactory = fix.FileLogFactory(settings) acceptor = fix.SocketAcceptor(application, storefactory, settings, logfactory) acceptor.start() while (1): time.sleep(10) except (fix.ConfigError, fix.RuntimeError) as e: print(e) sys.exit()
def main(file_name): try: settings = fix.SessionSettings(file_name) application = Application() storeFactory = fix.FileStoreFactory( settings ) logFactory = fix.FileLogFactory( settings ) print 'creating acceptor' acceptor = fix.SocketAcceptor( application, storeFactory, settings, logFactory ) print 'starting acceptor' acceptor.start() while 1: time.sleep(1) except (fix.ConfigError, fix.RuntimeError), e: print e
def main(fileName): if len(sys.argv) < 2: return fileName = sys.argv[1] try: settings = quickfix.SessionSettings(fileName) application = quickfix.MyApplication() storeFactory = quickfix.FileStoreFactory(settings) logFactory = quickfix.FileLogFactory(settings) acceptor = quickfix.SocketAcceptor(application, storeFactory, settings, logFactory) acceptor.start() # while condition == true: do something acceptor.stop() except quickfix.ConfigError, e: print e
def create_acceptor(acceptor_config, simulation_config): def create_subscriptions(sources): subscriptions = Subscriptions() for source in sources: variation = source.get('variation', None) if variation: step, limit = variation.get('step', 0), variation.get('limit', 0) else: step, limit = 0, 0 subscription = Subscription(source['symbol'], SnapshotGenerator(step, limit)) for quote in source['bid']: subscription.generator.addQuote( Quote(Quote.BID, quote['price'], quote['size'])) for quote in source['ask']: subscription.generator.addQuote( Quote(Quote.ASK, quote['price'], quote['size'])) subscriptions.add(subscription) return subscriptions settings = quickfix.SessionSettings(acceptor_config) config = load_yaml(simulation_config) fix_version = create_fix_version(config) publish_interval = config.get("publish_interval", 1) subscriptions = create_subscriptions(config['instruments']) logger = create_logger(config) rejectRate = config.get("reject_rate", 0) application = Server(fix_version, logger, publish_interval, rejectRate, subscriptions) storeFactory = quickfix.FileStoreFactory(settings) logFactory = quickfix.ScreenLogFactory(settings) acceptor = quickfix.SocketAcceptor(application, storeFactory, settings, logFactory) return acceptor
def main(config_file): """Main""" try: settings = quickfix.SessionSettings(config_file) application = Application() storefactory = quickfix.FileStoreFactory(settings) logfactory = quickfix.FileLogFactory(settings) acceptor = quickfix.SocketAcceptor(application, storefactory, settings, logfactory) acceptor.start() application.run() acceptor.stop() except (quickfix.ConfigError, quickfix.RuntimeError) as e: print(e) acceptor.stop() sys.exit()
def main(file_name): """run an acceptor application service""" log.info("-->> executor main file_name:{}".format(file_name)) try: settings = fix.SessionSettings(file_name) application = Application() storeFactory = fix.FileStoreFactory(settings) logFactory = fix.FileLogFactory(settings) acceptor = fix.SocketAcceptor(application, storeFactory, settings, logFactory) log.info('-->> starting acceptor') acceptor.start() while 1: time.sleep(1) except (fix.ConfigError, fix.RuntimeError) as e: print(e)
def main(port=9000, debug=None): """FIX price gateway Sends market data snapshot over FIX. """ if debug: logger.setLevel(logging.DEBUG) logger.info("Logging set to debug.") else: logger.setLevel(logging.INFO) logger.info("Logging set to info.") settings = fix.SessionSettings("configs/price.cfg") log = fix.FileLogFactory(settings) store = fix.FileStoreFactory(settings) app = MarketDataAdapter() address = ("localhost", port) book = Book("Market", [(1, 1)], [(1, 1)], []) app.set_logging(logger) acceptor = fix.SocketAcceptor(app, store, settings, log) try: acceptor.start() logger.info("FIX.4.2 maarket data server started.") logger.debug(f"Starting listener on port {port}.") conn = Listener(address, authkey=b"Dj$0.Jkx1@").accept() logger.debug(f"Accepted orderbook connection on port {port}.") while True: book = conn.recv() app.dispatch(book) except (fix.ConfigError, fix.RuntimeError) as error: raise fix.RuntimeError(error) except KeyboardInterrupt: logger.info(f"Got signal interrupt, exiting...") acceptor.stop()
def start_fix(file_name): try: settings = fix.SessionSettings(file_name) application = FixApplication() storeFactory = fix.FileStoreFactory(settings) logFactory = fix.FileLogFactory(settings) print('Creating FIX Acceptor') acceptor = fix.SocketAcceptor(application, storeFactory, settings, logFactory) print('Starting FIX Acceptor') acceptor.start() while 1: time.sleep(1) acceptor.stop() except (fix.ConfigError, fix.RuntimeError) as e: print(e)
def main(debug=None): """FIX gateway Accepts orders over a FIX session. """ if debug: logger.setLevel(logging.DEBUG) logger.info(f"Logging set to debug.") else: logger.setLevel(logging.INFO) logger.info(f"Logging set to info.") settings = fix.SessionSettings("configs/exchange.cfg") log = fix.FileLogFactory(settings) store = fix.FileStoreFactory(settings) app = MessageBroker() app.set_logging(logger) acceptor = fix.SocketAcceptor(app, store, settings, log) try: acceptor.start() logger.info("FIX4.2 server started.") while True: sleep(1) if MARKETS: for market in MARKETS: logger.debug(f"\n{MARKETS[market]._show_orderbook()}") except (fix.ConfigError, fix.RuntimeError) as error: raise fix.RuntimeError(error) except KeyboardInterrupt: logger.info(f"Got signal interrupt, exiting...") acceptor.stop()
executionReport.setField( fix.ExecType(fix.ExecType_FILL) ) executionReport.setField( fix.LeavesQty(0) ) time.sleep(5) try: fix.Session.sendToTarget( executionReport, sessionID ) except SessionNotFound as e: return def genOrderID(self): self.orderID = self.orderID+1 return self.orderID def genExecID(self): self.execID = self.execID+1 return self.execID try: file = sys.argv[1] settings = fix.SessionSettings( file ) application = Application() storeFactory = fix.FileStoreFactory( settings ) logFactory = fix.ScreenLogFactory( settings ) acceptor = fix.SocketAcceptor( application, storeFactory, settings, logFactory ) acceptor.start() while 1: time.sleep(1) except (fix.ConfigError, fix.RuntimeError) as e: print(e)
def start(self): """""" self.register_event() # For child app child_settings = fix.SessionSettings() child_dict = fix.Dictionary() child_dict.setString("ConnectionType", "acceptor") child_dict.setString("ResetOnLogon", "Y") child_dict.setString("FileLogPath", "./genus_log/child") child_dict.setString("LogonTimeout", "30") child_dict.setString("StartTime", "00:00:00") child_dict.setString("EndTime", "00:00:00") child_dict.setString("HeartBtInt", "30") child_dict.setString("CheckLatency", "N") child_dict.setString("UseDataDictionary", "N") child_dict.setString("FileStorePath", "./genus_store/child") child_dict.setString("ScreenLogShowIncoming", "N") child_dict.setString("ScreenLogShowOutgoing", "N") child_dict.setString("ScreenLogShowEvents", "N") child_dict.setString("SocketAcceptHost", SETTINGS["genus.child_host"]) child_dict.setString("SocketAcceptPort", SETTINGS["genus.child_port"]) child_session = fix.SessionID("FIX.4.2", SETTINGS["genus.child_sender"], SETTINGS["genus.child_target"]) child_settings.set(child_session, child_dict) child_store_factory = fix.FileStoreFactory(child_settings) child_log_factory = fix.ScreenLogFactory(child_settings) self.child_app: GenusChildApp = GenusChildApp(self) self.child_socket = fix.SocketAcceptor(self.child_app, child_store_factory, child_settings, child_log_factory) self.child_socket.start() # For parent app parent_settings = fix.SessionSettings() parent_dict = fix.Dictionary() parent_dict.setString("ConnectionType", "initiator") parent_dict.setString("ResetOnLogon", "Y") parent_dict.setString("FileLogPath", "./genus_log/parent") parent_dict.setString("LogonTimeout", "30") parent_dict.setString("StartTime", "00:00:00") parent_dict.setString("EndTime", "00:00:00") parent_dict.setString("HeartBtInt", "30") parent_dict.setString("CheckLatency", "N") parent_dict.setString("UseDataDictionary", "N") parent_dict.setString("FileStorePath", "./genus_store/parent") parent_dict.setString("ScreenLogShowIncoming", "N") parent_dict.setString("ScreenLogShowOutgoing", "N") parent_dict.setString("ScreenLogShowEvents", "N") parent_dict.setString("SocketConnectHost", SETTINGS["genus.parent_host"]) parent_dict.setString("SocketConnectPort", SETTINGS["genus.parent_port"]) parent_session = fix.SessionID("FIX.4.2", SETTINGS["genus.parent_sender"], SETTINGS["genus.parent_target"]) parent_settings.set(parent_session, parent_dict) parent_store_factory = fix.FileStoreFactory(parent_settings) parent_log_factory = fix.ScreenLogFactory(parent_settings) self.parent_app: GenusParentApp = GenusParentApp(self) self.parent_socket = fix.SocketInitiator(self.parent_app, parent_store_factory, parent_settings, parent_log_factory) self.parent_socket.start()
from __future__ import print_function import sys import time import quickfix as fix import at_application if len(sys.argv) == 0: print("usage: at.py -f FILE") exit file = sys.argv[1] settings = fix.SessionSettings(file) application = at_application.Application() factory = fix.FileStoreFactory("store") acceptor = fix.SocketAcceptor(application, factory, settings) acceptor.start() while 1: time.sleep(1) acceptor.stop()
table = texttable.Texttable() table.set_cols_width([16, 32]) for key in self.orders[orderID]: table.add_row([key, self.orders[orderID][key]]) print table.draw() if len(sys.argv) > 1: configFile = sys.argv[1] else: configFile = 'mfs-quickfix.cfg' settings = quickfix.SessionSettings(configFile) application = FIXServer() logFactory = quickfix.ScreenLogFactory(settings) storeFactory = quickfix.FileStoreFactory(settings) acceptor = quickfix.SocketAcceptor(application, storeFactory, settings) fixServer = threading.Thread(target=acceptor.start()) fixServer.start() def help(): print "Commands are: " print "\tbook ## Shows current order book" print "\tack [orderID] ## Sends acknowledgement on orderID" print "\tcancel [orderID] ## Sends cancel ack on orderID" print "\tfill [orderID] [quantity] ## Sends a fill on orderID with quantity" print "\torder [orderID] ## Provides details about the order" print "\tremove [orderID] ## Removes the order from the book" print "\treplace [orderID] ## Sends a ReplaceAck on orderID" print "\treplacepend [orderID] ## Sends a ReplacePending message for orderID" print "\texit ## Shuts down this server"