def _send_trades(self, symbol, since):
        md_subscriber = MarketDataSubscriber.get(symbol, self.application)
        trades = []

        for trade in md_subscriber.get_trades(symbol, since):
            trades.append({
                'tid': trade.id,
                'price': trade.price/1e8,
                'amount': trade.size/1e8,
                'date': calendar.timegm(trade.created.timetuple()),
            })

        self.write(json.dumps(trades))
Ejemplo n.º 2
0
    def _send_trades(self, symbol, since):
        md_subscriber = MarketDataSubscriber.get(symbol, self.application)
        trades = []

        for trade in md_subscriber.get_trades(symbol, since):
            trades.append({
                'tid': trade.id,
                'price': trade.price / 1e8,
                'amount': trade.size / 1e8,
                'date': calendar.timegm(trade.created.timetuple()),
            })

        self.write(json.dumps(trades))
Ejemplo n.º 3
0
    def _send_tiker(self, symbol):
      md_subscriber = MarketDataSubscriber.get(symbol, self.application)

      ticker = {
        "pair": symbol,
        "high": md_subscriber.inst_status.max_price / 1e8,
        "low": md_subscriber.inst_status.min_price / 1e8,
        "last": md_subscriber.inst_status.last_price / 1e8,
        "vol_" + symbol[3:].lower(): md_subscriber.inst_status.volume_price / 1e8,
        "vol": md_subscriber.inst_status.volume_size / 1e8,
        "buy": md_subscriber.inst_status.bid / 1e8,
        "sell": md_subscriber.inst_status.ask / 1e8
      }
      self.write( json.dumps(ticker))
Ejemplo n.º 4
0
    def _send_tiker(self, symbol):
        md_subscriber = MarketDataSubscriber.get(symbol, self.application)

        ticker = {
            "pair": symbol,
            "high": md_subscriber.inst_status.max_price / 1e8,
            "low": md_subscriber.inst_status.min_price / 1e8,
            "last": md_subscriber.inst_status.last_price / 1e8,
            "vol_" + symbol[3:].lower():
            md_subscriber.inst_status.volume_price / 1e8,
            "vol": md_subscriber.inst_status.volume_size / 1e8,
            "buy": md_subscriber.inst_status.bid / 1e8,
            "sell": md_subscriber.inst_status.ask / 1e8
        }
        self.write(json.dumps(ticker))
Ejemplo n.º 5
0
    def _send_order_book(self, symbol):
        md_subscriber = MarketDataSubscriber.get(symbol,
                                                 self.application.db_session)

        bids = []
        asks = []

        for order in md_subscriber.buy_side:
            bids.append(
                [order['price'] / 1e8, order['qty'] / 1e8, order['user_id']])

        for order in md_subscriber.sell_side:
            asks.append(
                [order['price'] / 1e8, order['qty'] / 1e8, order['user_id']])

        self.write({'pair': symbol, 'bids': bids, 'asks': asks})
  def setUp(self):
    self.application = mock.Mock()
    self.application.db_session = mock.Mock()

    self.md_subscriber = {}
    self.md_subscriber["BTCUSD"] = MarketDataSubscriber.get("BTCUSD", self.application)
    self.md_subscriptions = {}

    self.zmq_context = mock.Mock()
    self.zmq_context.socket = mock.MagicMock()
    self.zmq_context.connect = mock.MagicMock()
    self.zmq_context.setsockopt = mock.MagicMock()

    self.application_trade_client = mock.Mock()

    self.trade_pub = "XXX"

    self.on_send_json_msg_to_user = mock.Mock(name='send_json_msg_to_user', return_value=None)
Ejemplo n.º 7
0
    def _send_order_book(self, symbol):
       md_subscriber = MarketDataSubscriber.get(symbol, self.application.db_session)

       bids = []
       asks = []

       for order in md_subscriber.buy_side:
           bids.append([order['price']/1e8, order['qty']/1e8, order['username']])

       for order in md_subscriber.sell_side:
           asks.append([order['price']/1e8, order['qty']/1e8, order['username']])

       self.write(
            {
                'pair': symbol,
                'bids': bids,
                'asks': asks
            }
        )
Ejemplo n.º 8
0
    def setUp(self):
        self.application = mock.Mock()
        self.application.db_session = mock.Mock()

        self.md_subscriber = {}
        self.md_subscriber["BTCUSD"] = MarketDataSubscriber.get(
            "BTCUSD", self.application)
        self.md_subscriptions = {}

        self.zmq_context = mock.Mock()
        self.zmq_context.socket = mock.MagicMock()
        self.zmq_context.connect = mock.MagicMock()
        self.zmq_context.setsockopt = mock.MagicMock()

        self.application_trade_client = mock.Mock()

        self.trade_pub = "XXX"

        self.on_send_json_msg_to_user = mock.Mock(name='send_json_msg_to_user',
                                                  return_value=None)
Ejemplo n.º 9
0
    def __init__(self, opt, instance_name):
        self.options = opt
        self.instance_name = instance_name

        handlers = [
            (r'/', WebSocketHandler),
            (r'/get_deposit(.*)', DepositHandler),
            (r'/_webhook/verification_form', VerificationWebHookHandler),
            (r'/_webhook/deposit_receipt', DepositReceiptWebHookHandler),
            (r'/process_deposit(.*)', ProcessDepositHandler),
            (r'/api/(?P<version>[^\/]+)/(?P<symbol>[^\/]+)/(?P<resource>[^\/]+)', RestApiHandler)
        ]
        settings = dict(
            cookie_secret='cookie_secret'
        )
        tornado.web.Application.__init__(self, handlers, **settings)


        self.allowed_origins = json.loads(self.options.allowed_origins)
        self.allow_all_origins = self.allowed_origins[0] == '*'

        input_log_file_handler = logging.handlers.TimedRotatingFileHandler(
          os.path.expanduser(self.options.gateway_log), when='MIDNIGHT')
        formatter = logging.Formatter('%(asctime)s - %(message)s')
        input_log_file_handler.setFormatter(formatter)

        self.replay_logger = logging.getLogger(self.instance_name)
        self.replay_logger.setLevel(logging.INFO)
        self.replay_logger.addHandler(input_log_file_handler)

        ch = logging.StreamHandler(sys.stdout)
        ch.setLevel(logging.DEBUG)
        ch.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
        self.replay_logger.addHandler(ch)

        self.replay_logger.info('START')
        self.log_start_data()

        from models import Base, db_bootstrap
        db_engine = self.options.sqlalchemy_engine + ':///' +\
                    os.path.expanduser(self.options.sqlalchemy_connection_string)
        engine = create_engine( db_engine, echo=self.options.db_echo)
        Base.metadata.create_all(engine)
        self.db_session = scoped_session(sessionmaker(bind=engine))
        db_bootstrap(self.db_session)


        self.zmq_context = zmq.Context()

        self.trade_in_socket = self.zmq_context.socket(zmq.REQ)
        self.trade_in_socket.connect(self.options.trade_in)

        self.application_trade_client = TradeClient(
            self.zmq_context,
            self.trade_in_socket)
        self.application_trade_client.connect()

        self.security_list = self.application_trade_client.getSecurityList()
        self.md_subscriber = {}

        for instrument in self.security_list.get('Instruments'):
            symbol = instrument['Symbol']
            self.md_subscriber[symbol] = MarketDataSubscriber.get(symbol, self)
            self.md_subscriber[symbol].subscribe(
                self.zmq_context,
                self.options.trade_pub,
                self.application_trade_client)

        last_trade_id = Trade.get_last_trade_id(self.db_session)
        trade_list = self.application_trade_client.getLastTrades(last_trade_id)

        for trade in trade_list:
            msg = dict()
            msg['id']               = trade[0]
            msg['symbol']           = trade[1]
            msg['side']             = trade[2]
            msg['price']            = trade[3]
            msg['size']             = trade[4]
            msg['buyer_id']         = trade[5]
            msg['seller_id']        = trade[6]
            msg['buyer_username']   = trade[7]
            msg['seller_username']  = trade[8]
            msg['created']          = trade[9]
            msg['trade_date']       = trade[9][:10]
            msg['trade_time']       = trade[9][11:]
            msg['order_id']         = trade[10]
            msg['counter_order_id'] = trade[11]
            Trade.create( self.db_session, msg)

        all_trades = Trade.get_all_trades(self.db_session)
        for t in all_trades:
          trade_info = dict()
          trade_info['price'] = t.price
          trade_info['size'] = t.size
          trade_info['trade_date'] = t.created.strftime('%Y-%m-%d')
          trade_info['trade_time'] = t.created.strftime('%H:%M:%S')
          self.md_subscriber[ t.symbol ].inst_status.push_trade(trade_info)

        for symbol, subscriber in self.md_subscriber.iteritems():
            subscriber.ready()

        self.connections = {}

        self.heart_beat_timer = tornado.ioloop.PeriodicCallback(
            self.send_heartbeat_to_trade,
            30000)
        self.heart_beat_timer.start()
Ejemplo n.º 10
0
    def __init__(self, opt, instance_name):
        self.options = opt
        self.instance_name = instance_name

        handlers = [
            (r'/', WebSocketHandler), (r'/get_deposit(.*)', DepositHandler),
            (r'/_webhook/verification_form', VerificationWebHookHandler),
            (r'/_webhook/deposit_receipt', DepositReceiptWebHookHandler),
            (r'/process_deposit(.*)', ProcessDepositHandler),
            (r'/api/(?P<version>[^\/]+)/(?P<symbol>[^\/]+)/(?P<resource>[^\/]+)',
             RestApiHandler)
        ]
        settings = dict(cookie_secret='cookie_secret')
        tornado.web.Application.__init__(self, handlers, **settings)

        self.allowed_origins = json.loads(self.options.allowed_origins)
        self.allow_all_origins = self.allowed_origins[0] == '*'

        input_log_file_handler = logging.handlers.TimedRotatingFileHandler(
            os.path.expanduser(self.options.gateway_log), when='MIDNIGHT')
        formatter = logging.Formatter('%(asctime)s - %(message)s')
        input_log_file_handler.setFormatter(formatter)

        self.replay_logger = logging.getLogger(self.instance_name)
        self.replay_logger.setLevel(logging.INFO)
        self.replay_logger.addHandler(input_log_file_handler)

        ch = logging.StreamHandler(sys.stdout)
        ch.setLevel(logging.DEBUG)
        ch.setFormatter(
            logging.Formatter(
                '%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
        self.replay_logger.addHandler(ch)

        self.replay_logger.info('START')
        self.log_start_data()

        self.update_tor_nodes()

        from models import Base, db_bootstrap
        db_engine = self.options.sqlalchemy_engine + ':///' +\
                    os.path.expanduser(self.options.sqlalchemy_connection_string)
        engine = create_engine(db_engine, echo=self.options.db_echo)
        Base.metadata.create_all(engine)
        self.db_session = scoped_session(sessionmaker(bind=engine))
        db_bootstrap(self.db_session)

        self.zmq_context = zmq.Context()

        self.trade_in_socket = self.zmq_context.socket(zmq.REQ)
        self.trade_in_socket.connect(self.options.trade_in)

        self.application_trade_client = TradeClient(self.zmq_context,
                                                    self.trade_in_socket)
        self.application_trade_client.connect()

        self.security_list = self.application_trade_client.getSecurityList()
        self.md_subscriber = {}

        for instrument in self.security_list.get('Instruments'):
            symbol = instrument['Symbol']
            self.md_subscriber[symbol] = MarketDataSubscriber.get(symbol, self)
            self.md_subscriber[symbol].subscribe(self.zmq_context,
                                                 self.options.trade_pub,
                                                 self.application_trade_client)

        last_trade_id = Trade.get_last_trade_id(self.db_session)
        trade_list = self.application_trade_client.getLastTrades(last_trade_id)

        for trade in trade_list:
            msg = dict()
            msg['id'] = trade[0]
            msg['symbol'] = trade[1]
            msg['side'] = trade[2]
            msg['price'] = trade[3]
            msg['size'] = trade[4]
            msg['buyer_id'] = trade[5]
            msg['seller_id'] = trade[6]
            msg['buyer_username'] = trade[7]
            msg['seller_username'] = trade[8]
            msg['created'] = trade[9]
            msg['trade_date'] = trade[9][:10]
            msg['trade_time'] = trade[9][11:]
            msg['order_id'] = trade[10]
            msg['counter_order_id'] = trade[11]
            Trade.create(self.db_session, msg)

        all_trades = Trade.get_all_trades(self.db_session)
        for t in all_trades:
            trade_info = dict()
            trade_info['price'] = t.price
            trade_info['size'] = t.size
            trade_info['trade_date'] = t.created.strftime('%Y-%m-%d')
            trade_info['trade_time'] = t.created.strftime('%H:%M:%S')
            self.md_subscriber[t.symbol].inst_status.push_trade(trade_info)

        for symbol, subscriber in self.md_subscriber.iteritems():
            subscriber.ready()

        self.connections = {}

        self.heart_beat_timer = tornado.ioloop.PeriodicCallback(
            self.send_heartbeat_to_trade, 30000)
        self.heart_beat_timer.start()

        self.update_tor_nodes_timer = tornado.ioloop.PeriodicCallback(
            self.update_tor_nodes, 3600000)
        self.update_tor_nodes_timer.start()
Ejemplo n.º 11
0
    def __init__(self, opt):
        handlers = [
            (r'/', WebSocketHandler),
            (r'/get_deposit(.*)', DepositHandler),
            (r'/_webhook/verification_form', VerificationWebHookHandler),
            (r'/_webhook/deposit_receipt', DepositReceiptWebHookHandler),
            (r'/process_deposit(.*)', ProcessDepositHandler),
            (r'/api/(?P<version>[^\/]+)/(?P<symbol>[^\/]+)/(?P<resource>[^\/]+)', RestApiHandler)
        ]
        settings = dict(
            cookie_secret='cookie_secret'
        )
        tornado.web.Application.__init__(self, handlers, **settings)

        self.replay_logger = logging.getLogger("REPLAY")
        self.replay_logger.setLevel(logging.INFO)
        self.replay_logger.addHandler(input_log_file_handler)
        self.replay_logger.info('START')
        self.log_start_data()


        from models import ENGINE, db_bootstrap
        self.db_session = scoped_session(sessionmaker(bind=ENGINE))
        db_bootstrap(self.db_session)


        self.zmq_context = zmq.Context()

        self.trade_in_socket = self.zmq_context.socket(zmq.REQ)
        self.trade_in_socket.connect(opt.trade_in)

        self.application_trade_client = TradeClient(
            self.zmq_context,
            self.trade_in_socket)
        self.application_trade_client.connect()

        instruments = self.application_trade_client.getSecurityList()
        self.md_subscriber = {}

        for instrument in instruments:
            symbol = instrument['Symbol']
            self.md_subscriber[symbol] = MarketDataSubscriber.get(symbol, self)
            self.md_subscriber[symbol].subscribe(
                self.zmq_context,
                options.trade_pub,
                self.application_trade_client)

        last_trade_id = Trade.get_last_trade_id()
        trade_list = self.application_trade_client.getLastTrades(last_trade_id)

        for trade in trade_list:
            msg = dict()
            msg['id']               = trade[0]
            msg['symbol']           = trade[1]
            msg['side']             = trade[2]
            msg['price']            = trade[3]
            msg['size']             = trade[4]
            msg['buyer_username']   = trade[5]
            msg['seller_username']  = trade[6]
            msg['created']          = trade[7]
            msg['trade_date']       = trade[7][:10]
            msg['trade_time']       = trade[7][11:]
            msg['order_id']         = trade[8]
            msg['counter_order_id'] = trade[9]
            Trade.create( self.db_session, msg)

        all_trades = Trade.get_all_trades(self.db_session)
        for t in all_trades:
          trade_info = dict()
          trade_info['price'] = t.price
          trade_info['size'] = t.size
          trade_info['trade_date'] = t.created.strftime('%Y-%m-%d')
          trade_info['trade_time'] = t.created.strftime('%H:%M:%S')
          self.md_subscriber[ t.symbol ].inst_status.push_trade(trade_info)

        for symbol, subscriber in self.md_subscriber.iteritems():
            subscriber.ready()

        self.connections = {}

        self.heart_beat_timer = tornado.ioloop.PeriodicCallback(
            self.send_heartbeat_to_trade,
            30000)
        self.heart_beat_timer.start()
Ejemplo n.º 12
0
    def __init__(self, opt):
        handlers = [
            (r'/', WebSocketHandler), (r'/get_deposit(.*)', DepositHandler),
            (r'/_webhook/verification_form', VerificationWebHookHandler),
            (r'/_webhook/deposit_receipt', DepositReceiptWebHookHandler),
            (r'/process_deposit(.*)', ProcessDepositHandler),
            (r'/api/(?P<version>[^\/]+)/(?P<symbol>[^\/]+)/(?P<resource>[^\/]+)',
             RestApiHandler)
        ]
        settings = dict(cookie_secret='cookie_secret')
        tornado.web.Application.__init__(self, handlers, **settings)

        self.replay_logger = logging.getLogger("REPLAY")
        self.replay_logger.setLevel(logging.INFO)
        self.replay_logger.addHandler(input_log_file_handler)
        self.replay_logger.info('START')
        self.log_start_data()

        from models import ENGINE, db_bootstrap
        self.db_session = scoped_session(sessionmaker(bind=ENGINE))
        db_bootstrap(self.db_session)

        self.zmq_context = zmq.Context()

        self.trade_in_socket = self.zmq_context.socket(zmq.REQ)
        self.trade_in_socket.connect(opt.trade_in)

        self.application_trade_client = TradeClient(self.zmq_context,
                                                    self.trade_in_socket)
        self.application_trade_client.connect()

        instruments = self.application_trade_client.getSecurityList()
        self.md_subscriber = {}

        for instrument in instruments:
            symbol = instrument['Symbol']
            self.md_subscriber[symbol] = MarketDataSubscriber.get(symbol, self)
            self.md_subscriber[symbol].subscribe(self.zmq_context,
                                                 options.trade_pub,
                                                 self.application_trade_client)

        last_trade_id = Trade.get_last_trade_id()
        trade_list = self.application_trade_client.getLastTrades(last_trade_id)

        for trade in trade_list:
            msg = dict()
            msg['id'] = trade[0]
            msg['symbol'] = trade[1]
            msg['side'] = trade[2]
            msg['price'] = trade[3]
            msg['size'] = trade[4]
            msg['buyer_username'] = trade[5]
            msg['seller_username'] = trade[6]
            msg['created'] = trade[7]
            msg['trade_date'] = trade[7][:10]
            msg['trade_time'] = trade[7][11:]
            msg['order_id'] = trade[8]
            msg['counter_order_id'] = trade[9]
            Trade.create(self.db_session, msg)

        all_trades = Trade.get_all_trades(self.db_session)
        for t in all_trades:
            trade_info = dict()
            trade_info['price'] = t.price
            trade_info['size'] = t.size
            trade_info['trade_date'] = t.created.strftime('%Y-%m-%d')
            trade_info['trade_time'] = t.created.strftime('%H:%M:%S')
            self.md_subscriber[t.symbol].inst_status.push_trade(trade_info)

        for symbol, subscriber in self.md_subscriber.iteritems():
            subscriber.ready()

        self.connections = {}

        self.heart_beat_timer = tornado.ioloop.PeriodicCallback(
            self.send_heartbeat_to_trade, 30000)
        self.heart_beat_timer.start()