Пример #1
0
    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()
Пример #2
0
    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()
Пример #3
0
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
Пример #4
0
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")
Пример #5
0
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())