def test_subscribing_to_data_works(self): wss = BtfxWss(log_level=logging.DEBUG) wss.start() time.sleep(1) wss.subscribe_to_ticker('BTCUSD') wss.subscribe_to_candles('BTCUSD') wss.subscribe_to_order_book('BTCUSD') wss.subscribe_to_raw_order_book('BTCUSD') wss.subscribe_to_trades('BTCUSD') time.sleep(10) try: wss.tickers('BTCUSD').get(block=False) except Empty: self.fail("No ticker data arrived!") try: wss.candles('BTCUSD', '1m').get(block=False) except Empty: self.fail("No candles data arrived!") except KeyError: self.fail("No candles data arrived, key not found! %s" % list(wss.queue_processor.candles.keys())) try: wss.books('BTCUSD').get(block=False) except Empty: self.fail("No book data arrived!") try: wss.raw_books('BTCUSD').get(block=False) except Empty: self.fail("No war book data arrived!") try: wss.trades('BTCUSD').get(block=False) except Empty: self.fail("No trades data arrived!") wss.stop()
def test_subscribing_to_data_works(self): wss = BtfxWss() wss.start() time.sleep(1) wss.subscribe_to_ticker('BTCUSD') wss.subscribe_to_candles('BTCUSD') wss.subscribe_to_order_book('BTCUSD') wss.subscribe_to_raw_order_book('BTCUSD') wss.subscribe_to_trades('BTCUSD') time.sleep(10) try: wss.tickers('BTCUSD').get(block=False) except Empty: self.fail("No ticker data arrived!") try: wss.candles('BTCUSD', '1m').get(block=False) except Empty: self.fail("No candles data arrived!") try: wss.books('BTCUSD').get(block=False) except Empty: self.fail("No book data arrived!") try: wss.raw_books('BTCUSD').get(block=False) except Empty: self.fail("No war book data arrived!") try: wss.trades('BTCUSD').get(block=False) except Empty: self.fail("No trades data arrived!") wss.stop()
def get_candle_q(symbol): """ candle_format: ([[1515066900000, 3.1354, 3.1457, 3.1459, 3.1261, 41373.42748331]], 1515066939.756591) ([[candle_time, O, H, L, C]], timestamp) """ wss = BtfxWss() wss.start() while not wss.conn.connected.is_set(): time.sleep(1) valid_candles = [ '1m', '5m', '15m', '30m', '1h', '3h', '6h', '12h', '1D', '7D', '14D', '1M' ] wss.subscribe_to_candles(symbol, '1m') time.sleep(15) candles_q = wss.candles(symbol, '1m') return candles_q
def main(logger): # Fetch available pairs & timeframes from DB pairs_timeframes = Pair_Timeframe.objects.all() if pairs_timeframes.exists() is False: logger.error("No pairs in a database.") return None wss = BtfxWss() wss.start() time.sleep(1) # give the client some prep time to set itself up last_mts = dict() pairs_timeframes_tuples = pairs_timeframes.values_list( "id", "pair", "timeframe") for pairs_timeframes_id, pair, timeframe in pairs_timeframes_tuples: wss.subscribe_to_candles(pair, timeframe=timeframe) last_mts.update({pairs_timeframes_id: None}) time.sleep(5) candles_queue = {} for pairs_timeframes_id, pair, timeframe in pairs_timeframes_tuples: candles_queue.update( {pair + timeframe: wss.candles(pair=pair, timeframe=timeframe)}) logger.info( "Collecting CANDLES of pair '%s' with timeframe '%s' has been started" % (pair, timeframe)) try: while True: for pairs_timeframes_id, pair, timeframe in pairs_timeframes_tuples: if not candles_queue[pair + timeframe].empty(): q_candles = candles_queue[pair + timeframe].get() """ ([ [4345.5, 16.7770791, 4345.6, 12.74414776, 77.6, 0.0182, 4345.6, 15220.55529737, 4397.5, 4248.4] ], 1503992628.42302) # MTS int millisecond time stamp # OPEN float First execution during the time frame # CLOSE float Last execution during the time frame # HIGH integer Highest execution during the time frame # LOW float Lowest execution during the timeframe # VOLUME float Quantity of symbol traded within the timeframe """ data = [] if isinstance(q_candles[0][0][0], list): mass = sorted(q_candles[0][0], key=lambda x: x[0]) for c in mass: mts = datetime.datetime.utcfromtimestamp( float(str(c[0])[:-3])) if should_update(mts, last_mts, pairs_timeframes_id): data.append({ "mts": mts, "open": c[1], "close": c[2], "high": c[3], "low": c[4], "volume": c[5] }) else: mts = datetime.datetime.utcfromtimestamp( float(str(q_candles[0][0][0])[:-3])) if should_update(mts, last_mts, pairs_timeframes_id): data.append({ "mts": mts, "open": q_candles[0][0][1], "close": q_candles[0][0][2], "high": q_candles[0][0][3], "low": q_candles[0][0][4], "volume": q_candles[0][0][5] }) # Important: # UPSERT works well. # If you have missed rows -> check volume upsert(data=data, pairs_timeframes_id=pairs_timeframes_id) except Exception: logger.error(str(traceback.format_exc())) for pairs_timeframes_id, pair, timeframe in pairs_timeframes_tuples: wss.unsubscribe_from_candles(pair, timeframe=timeframe) # Shutting down the client wss.stop() logger.info("Process terminated")
def worker_function(quit_flag, launch_flag, globalz): counter = 0 established = False wss = None qq = None first = True order = False OCHLVlast = 0 OCHLVcur = 0 while not quit_flag.value: if launch_flag.value == 5: if established == False: wss = BtfxWss(key=API_KEY, secret=API_SECRET) wss.start() while not wss.conn.connected.is_set(): time.sleep(1) established = True wss.authenticate() # Subscribe to some channels wss.subscribe_to_ticker('BTCUSD') wss.subscribe_to_candles('BTCUSD', '15m') wss.subscribe_to_candles('BTCUSD', '1m') wss.subscribe_to_order_book('BTCUSD') # Do something else t = time.time() while time.time() - t < 2: pass # Accessing data stored in BtfxWss: ticker_q = wss.candles( 'BTCUSD', '1m') # returns a Queue object for the pair. wallet = wss.wallets while not ticker_q.empty(): qq = np.asarray(ticker_q.get()) #globalz[0] = int(np.asarray(qq)[1]) if type(qq[0][0][0]) == list: first = True if first: globalz[0] = int(((qq)[0][0][0][0]) / 1000) #globalz[1] = logging.debug(((qq)[0][0][0][0]) / 1000) #loggin.debug() #logging.debug(type((qq)[0][0][0][0])) #logging.debug(type((qq)[0][0][0])) #logging.debug(type((qq)[0][0])) #logging.debug(type((qq)[0])) #logging.debug(type((qq))) with open('my.ts', 'w') as file: for i in range(len(qq[0][0])): stri = (str(qq[0][0][i])) file.write((stri)) file.write("\n") first = False else: globalz[30] = int(((qq)[1])) globalz[0] = int(((qq)[0][0][0]) / 1000) globalz[5] = int(((qq)[0][0][5]) * 1000) globalz[6] = int(((qq)[0][0][5]) * 1000) #globalz[0] = for i in range(1, 5): globalz[i] = int((np.asarray(qq)[0][0][i])) #logging.debug(counter) logging.debug((np.asarray(qq)[0][0])) #logging.debug((np.asarray(qq)[0][0][1])) if wallet.empty() == False: logging.debug(wallet.get()) #ticker_q = wss.candles('BTCUSD') # returns a Queue object for the pair. counter += 1 logging.debug("Tick # %s" % counter) #var.set() #time.sleep(0.01) elif launch_flag.value == -1: if established == True: logging.info("Stopping kekush at # %s" % counter) time.sleep(0.01) wss.unsubscribe_from_ticker('BTCUSD') wss.unsubscribe_from_candles('BTCUSD') wss.unsubscribe_from_order_book('BTCUSD') # Shutting down the client: wss.stop() wss = None counter = 0 established = False first = True elif launch_flag.value == 6: if order == False: logging.info("Ordering some shit at # %s" % counter) order = { "cid": 373617, #change to the API_Key Number "type": "LIMIT", "symbol": "tEOSUSD", "amount": "2", "price": "14", "hidden": 0, "postonly": 1 } wss.new_order(**order) launch_flag.value = 7 order = True time.sleep(3) logging.info(wss.orders.get())