def setUp(self):
        print("\n\rstarting live test binance.com-futures")
        self.unicorn_fy = UnicornFy()
        ubwa = BinanceWebSocketApiManager(exchange="binance.com-futures")
        worker_thread = threading.Thread(
            target=print_stream_data_from_stream_buffer_futures, args=(ubwa, ))
        worker_thread.start()

        channels = {
            'aggTrade', 'trade', 'kline_1m', 'kline_5m', 'kline_15m',
            'kline_30m', 'kline_1h', 'kline_2h', 'kline_4h', 'kline_6h',
            'kline_8h', 'kline_12h', 'kline_1d', 'kline_3d', 'kline_1w',
            'kline_1M', 'miniTicker', 'ticker', 'bookTicker', 'depth5',
            'depth10', 'depth20', 'depth', 'depth@100ms'
        }
        arr_channels = {'!miniTicker', '!ticker', '!bookTicker'}
        markets = {
            'bnbbtc', 'ethbtc', 'btcusdt', 'bchabcusdt', 'xrpusdt', 'rvnbtc',
            'ltcusdt', 'adausdt', 'eosusdt', 'wanbnb', 'zrxbnb', 'agibnb',
            'funeth', 'arketh', 'engeth'
        }
        for channel in channels:
            ubwa.create_stream(channel, markets, stream_label=channel)
        ubwa.create_stream(arr_channels, "arr")
        stream_id_trade = ubwa.get_stream_id_by_label("trade")
        ubwa.get_stream_subscriptions(stream_id_trade)
        time.sleep(70)
        ubwa.stop_manager_with_all_streams()
Example #2
0
def create_binance_ws_stream(api_manager: BinanceWebSocketApiManager,
                             channels: str,
                             markets: str,
                             stream_label: str,
                             api_key=False,
                             api_secret=False,
                             symbols=False,
                             **kwargs):
    """
    Create a new Binance websocket stream and return the stream id.
    """
    stream_id = api_manager.create_stream(channels,
                                          markets,
                                          symbols=symbols,
                                          stream_label=stream_label,
                                          stream_buffer_name=True,
                                          api_key=api_key,
                                          api_secret=api_secret,
                                          **kwargs)

    if not stream_id:
        raise CreateBinanceStreamFailedException(
            f"Failed to create stream {stream_label}.")

    logging.info(
        f"Stream {stream_label} created. Channels: {channels}. Markets: {markets}. Symbols: {symbols}. Stream id: {stream_id}."
    )
    return stream_id
Example #3
0
def main():
    logging.basicConfig(
        level=logging.DEBUG,
        filename=os.path.basename(__file__) + '.log',
        format=
        "{asctime} [{levelname:8}] {process} {thread} {module}: {message}",
        style="{")

    binance_websocket_api_manager = BinanceWebSocketApiManager(
        exchange="binance.com-futures")

    config_open = open("./param.json", "r")
    param_json = json.load(config_open)
    param = robot_param(param_json)
    binance = Binance(api_key=param.api_key, api_secret=param.api_secret)

    worker_thread = threading.Thread(target=robot,
                                     args=(binance_websocket_api_manager,
                                           binance))
    worker_thread.start()

    print(
        "\r\n=========================== Starting aggTrade ===========================\r\n"
    )

    markets = [rename_pair(param.pair)]

    aggtrade_stream_id = binance_websocket_api_manager.create_stream(
        ["aggTrade", "depth5"], markets)
    time.sleep(7)
Example #4
0
def threaded_func(q1, conn, t):
    with conn:
        binance_websocket_api_manager = BinanceWebSocketApiManager(
            exchange="binance.com")
        binance_websocket_api_manager.create_stream(
            ['bookTicker'], [t['trade']['pair'].replace('.', '').lower()])
        while True:
            oldest_stream_data_from_stream_buffer = binance_websocket_api_manager \
                .pop_stream_data_from_stream_buffer()
            if oldest_stream_data_from_stream_buffer:
                res_bnb = oldest_stream_data_from_stream_buffer
                if 'result' not in res_bnb:
                    conn.sendall(res_bnb.encode())
                    conn.recv(2)
            else:
                continue
Example #5
0
async def main():
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.bind(('127.0.0.1', 45620))
        s.listen()
        conn, addr = s.accept()
        with conn:
            binance_websocket_api_manager = BinanceWebSocketApiManager(exchange="binance.com")
            binance_websocket_api_manager.create_stream(['depth5@100ms'], ['etheur'])
            while True:
                oldest_stream_data_from_stream_buffer = binance_websocket_api_manager\
                    .pop_stream_data_from_stream_buffer()
                if oldest_stream_data_from_stream_buffer:
                    res_bnb = oldest_stream_data_from_stream_buffer
                    if 'result' not in res_bnb:
                        conn.sendall(res_bnb.encode())
                else:
                    continue
Example #6
0
    def stream(self):  # streams 24hour ticker & Asks Bids

        binance_websocket_api_manager = BinanceWebSocketApiManager(
            exchange="binance.com")  # websocket connection
        binance_websocket_api_manager.create_stream(
            ["ticker", "trade"],
            [self.symbol_unicorn])  # TODO we might be able to put this in self
        i = 0
        while (self.stay_alive):
            oldest_stream_data_from_stream_buffer = binance_websocket_api_manager.pop_stream_data_from_stream_buffer(
            )
            if oldest_stream_data_from_stream_buffer:
                stream_data = UnicornFy.binance_com_websocket(
                    oldest_stream_data_from_stream_buffer)

                if (stream_data['event_type'] == "24hrTicker"):
                    # set 24hr change to the value there
                    self.change24hr = float(
                        stream_data['data'][0]['price_change_percent'])
                    self.bid = float(stream_data["data"][0]["best_bid_price"])
                    self.ask = float(stream_data["data"][0]["best_ask_price"])
                    self.ask_quantity = float(
                        stream_data["data"][0]["best_ask_quantity"])
                    self.bid_quantity = float(
                        stream_data["data"][0]["best_bid_quantity"])
                    if (i == 0):  # Will make loading boxes much faster
                        self.price = float(
                            stream_data['data'][0]['last_price'])
                        i += 1
                elif (stream_data["event_type"] == "trade"):
                    self.price = float(stream_data["price"])

            while (self.paused):
                time.sleep(5)

            time.sleep(self.SUPER.a * (1 / 4))

        binance_websocket_api_manager.stop_manager_with_all_streams()
        self.shut_down_count += 2
        if (self.messages):
            print(self.symbol_ccxt, "24hr stream succesfully shut down", "\n")
 def test_isolated_margin(self):
     binance_websocket_api_manager = BinanceWebSocketApiManager(
         exchange="binance.com-isolated_margin")
     stream_id = binance_websocket_api_manager.create_stream(
         'arr',
         '!userData',
         symbols="CELRBTC",
         api_key="key",
         api_secret="secret")
     time.sleep(10)
     binance_websocket_api_manager.print_stream_info(stream_id)
     binance_websocket_api_manager.stop_manager_with_all_streams()
class TestBinanceOrgManager(unittest.TestCase):
    # Test binance.org (Binance Chain Dex)

    def setUp(self):
        self.binance_org_testnet = BinanceWebSocketApiManager(
            exchange="binance.org-testnet")
        stream_id = self.binance_org_testnet.create_stream(
            ['orders', 'transfers', 'accounts'],
            "tbnb1unxhf8fat985ksajatfa5jea58j2kzg7mfy0e7")
        self.binance_org_testnet.unsubscribe_from_stream(
            stream_id, "tbnb1unxhf8fat985ksajatfa5jea58j2kzg7mfy0e7")

    def tearDown(self):
        self.binance_org_testnet.stop_manager_with_all_streams()
Example #9
0
class TickParser:
    symbols = [
        'ethusdt',
        'bnbusdt',
        'ltcusdt',
        'btcusdt',
        'ethupusdt',
        'bnbupusdt',
        'ltcupusdt',
        'btcupusdt',
        'ethdownusdt',
        'bnbdownusdt',
        'ltcdownusdt',
        'btcdownusdt',
    ]

    def __init__(self):
        self.binance_websocket_api_manager = BinanceWebSocketApiManager(
            exchange="binance.com", output_default="UnicornFy")
        self.binance_websocket_api_manager.create_stream(
            ['depth5'],
            self.symbols,
            stream_label="UnicornFy",
            output="UnicornFy")
Example #10
0
class UserStream:
    def __init__(self, api_key, api_secret, test=False):
        self.test = test
        self.key = api_key
        self.secret = api_secret
        self._queue = janus.Queue()
        threading.Thread(target=self._start, daemon=True).start()

    @asynccontextmanager
    async def message(self):
        try:
            msg = await self._queue.async_q.get()
            yield msg
        finally:
            self._queue.async_q.task_done()

    def _start(self):
        self.exchange = "binance.com-futures" + ("-testnet"
                                                 if self.test else "")
        self.manager = BinanceWebSocketApiManager(exchange=self.exchange)
        self.manager.create_stream("arr",
                                   "!userData",
                                   api_key=self.key,
                                   api_secret=self.secret)

        logging.info("Spawning listener for futures user data")
        while True:
            buf = self.manager.pop_stream_data_from_stream_buffer()
            if not buf:
                time.sleep(0.05)
                continue
            try:
                msg = json.loads(buf)
                self._queue.sync_q.put(msg)
            except Exception as err:
                logging.error(f"Failed to decode message {buf}: {err}")
            #print(oldest_stream_data_from_stream_buffer)


# create instance of BinanceWebSocketApiManager for Binance Chain DEX
binance_websocket_api_manager = BinanceWebSocketApiManager(exchange="binance.org")

print("starting monitoring api!")
binance_websocket_api_manager.start_monitoring_api()

# start a worker process to move the received stream_data from the stream_buffer to a print function
worker_thread = threading.Thread(target=print_stream_data_from_stream_buffer, args=(binance_websocket_api_manager,))
worker_thread.start()

# userAddress streams
binance_dex_user_address = ""
id = binance_websocket_api_manager.create_stream('orders', binance_dex_user_address)
binance_websocket_api_manager.create_stream('accounts', binance_dex_user_address)
binance_websocket_api_manager.create_stream('transfers', binance_dex_user_address)
user_address_multi_stream_id = binance_websocket_api_manager.create_stream(['orders', 'transfers', 'accounts'],
                                                                           binance_dex_user_address)

binance_websocket_api_manager.create_stream(["allTickers"], ["$all"])
binance_websocket_api_manager.create_stream(["allMiniTickers"], ["$all"])
binance_websocket_api_manager.create_stream(["blockheight"], ["$all"])

markets = 'RAVEN-F66_BNB'
binance_websocket_api_manager.create_stream(["trades"], markets)
binance_websocket_api_manager.create_stream(["marketDepth"], markets)
binance_websocket_api_manager.create_stream(["kline_1h"], markets)
binance_websocket_api_manager.create_stream(["kline_1h"], markets)
binance_websocket_api_manager.create_stream(["ticker"], markets)
Example #12
0
    'cmtbtc', 'cvcbtc', 'kncbtc', 'rpxbnb', 'zenbnb', 'cndbnb', 'ardrbnb',
    'bchabcbusd', 'ltcbnb', 'pivxeth', 'skybtc', 'tntbtc', 'poebtc',
    'steembtc', 'icxusdt', 'tfuelbtc', 'chzbtc', 'vibeth', 'winusdc', 'gtobtc',
    'linkusdc', 'batbusd', 'rdnbtc', 'dataeth', 'bttpax', 'zrxbnb', 'vibbtc',
    'neobnb', 'cosbtc', 'powreth', 'rlcusdt', 'hbarbnb', 'wabieth', 'bqxeth',
    'aionbtc', 'aeeth', 'mthbtc', 'wrxbtc', 'pptbtc', 'nknbtc', 'zecusdt',
    'stormeth', 'qtumusdt'
]

channels = [
    'kline_1m', 'kline_5m', 'kline_15m', 'kline_30m', 'kline_1h', 'kline_12h',
    'kline_1w', 'trade', 'miniTicker', 'depth20'
]

for channel in channels:
    binance_websocket_api_manager.create_stream(channel, markets)


def print_stream_data_from_stream_buffer(binance_websocket_api_manager):
    print("waiting 30 seconds, then we start flushing the stream_buffer")
    time.sleep(30)
    while True:
        if binance_websocket_api_manager.is_manager_stopping():
            exit(0)
        oldest_stream_data_from_stream_buffer = binance_websocket_api_manager.pop_stream_data_from_stream_buffer(
        )
        if oldest_stream_data_from_stream_buffer is False:
            time.sleep(0.01)
        else:
            try:
                # remove # to activate the print function:
Example #13
0
markets = []

try:
    binance_rest_client = Client(binance_api_key, binance_api_secret)
    binance_websocket_api_manager = BinanceWebSocketApiManager()
except requests.exceptions.ConnectionError:
    print("No internet connection?")
    sys.exit(1)

# start a worker process to move the received stream_data from the stream_buffer to a print function
worker_thread = threading.Thread(target=print_stream_data_from_stream_buffer,
                                 args=(binance_websocket_api_manager, ))
worker_thread.start()

data = binance_rest_client.get_all_tickers()
for item in data:
    markets.append(item['symbol'])

binance_websocket_api_manager.set_private_api_config(binance_api_key,
                                                     binance_api_secret)
binance_websocket_api_manager.create_stream(["!userData"], ["arr"])

binance_websocket_api_manager.create_stream(arr_channels, "arr")

for channel in channels:
    binance_websocket_api_manager.create_stream(channel, markets)

while True:
    binance_websocket_api_manager.print_summary()
    time.sleep(1)
# define some markets
markets = {
    'bnbbtc', 'ethbtc', 'btcusdt', 'bchabcusdt', 'xrpusdt', 'rvnbtc',
    'ltcusdt', 'adausdt', 'eosusdt', 'neousdt', 'bnbusdt', 'adabtc', 'ethusdt',
    'trxbtc', 'bchabcbtc', 'ltcbtc', 'xrpbtc', 'ontbtc', 'bttusdt', 'eosbtc',
    'xlmbtc', 'bttbtc', 'tusdusdt', 'xlmusdt', 'qkcbtc', 'zrxbtc', 'neobtc',
    'adaeth', 'icxusdt', 'btctusd', 'icxbtc', 'btcusdc', 'wanbtc', 'zecbtc',
    'wtcbtc', 'ethtusd', 'batusdt', 'mcobtc', 'neoeth', 'bntbtc', 'eostusd',
    'lrcbtc', 'funbtc', 'zecusdt', 'bnbpax', 'linkusdt', 'hceth', 'zrxeth',
    'icxeth', 'xmreth', 'neobnb', 'etceth', 'zeceth', 'xmrbnb', 'wanbnb',
    'zrxbnb', 'agibnb', 'funeth', 'arketh', 'engeth'
}

# create stream 1
binance_get_ticker_stream_id = binance_websocket_api_manager.create_stream(
    "arr", "!ticker")

# create stream 2
binance_get_kline_stream_id = binance_websocket_api_manager.create_stream(
    ['kline_1m', 'kline_5m', 'kline_30m', 'kline_1h', 'kline_15m'], markets)
binance_get_trade_stream_id = binance_websocket_api_manager.create_stream(
    ['trade'], markets)

time.sleep(5)

# replace stream 1 with stream 3 (stream 1 will not get stopped till stream 3 received its first data row
binance_get_multi_stream_id = binance_websocket_api_manager.replace_stream(
    binance_get_ticker_stream_id,
    ['trade', 'depth', 'depth10', 'aggTrade', 'miniTicker'], markets)

# subscribe new markets to a stream
Example #15
0
            time.sleep(0.01)
        else:
            #print(oldest_stream_data_from_stream_buffer)
            pass


# create instance of BinanceWebSocketApiManager for Binance Chain DEX
binance_websocket_api_manager = BinanceWebSocketApiManager(exchange="binance.com")

# start a worker process to move the received stream_data from the stream_buffer to a print function
worker_thread = threading.Thread(target=print_stream_data_from_stream_buffer, args=(binance_websocket_api_manager,))
worker_thread.start()

#markets = ['xrpusdt', 'rvnbtc']
markets = ['xrpusdt']
stream_id = binance_websocket_api_manager.create_stream(["kline_1m"], markets)


time.sleep(5)
binance_websocket_api_manager.get_stream_subscriptions(stream_id)
#binance_websocket_api_manager.subscribe_to_stream(stream_id,
#                                                  channels=['kline_1m', 'kline_5m', 'marketDepth',
#                                                            'ticker', 'miniTicker', 'marketDiff'])

#binance_websocket_api_manager.subscribe_to_stream(stream_id, channels="arr", markets="!miniTicker")

#time.sleep(5)
#binance_websocket_api_manager.get_stream_subscriptions(stream_id)
#binance_websocket_api_manager.unsubscribe_from_stream(stream_id,
#                                                      channels=['kline_1m', 'marketDepth',
#                                                                'ticker', 'miniTicker', 'marketDiff'],
Example #16
0
logging.basicConfig(
    filename=os.path.basename(__file__) + '.log',
    format="{asctime} [{levelname:8}] {process} {thread} {module}: {message}",
    style="{")
logging.getLogger('unicorn-log').addHandler(logging.StreamHandler())
logging.getLogger('unicorn-log').setLevel(logging.INFO)

# create instance of BinanceWebSocketApiManager
binance_websocket_api_manager = BinanceWebSocketApiManager()

# set api key and secret for userData stream
binance_api_key = ""
binance_api_secret = ""
binance_websocket_api_manager.set_private_api_config(binance_api_key,
                                                     binance_api_secret)
userdata_stream_id = binance_websocket_api_manager.create_stream(["arr"],
                                                                 ["!userData"])

ticker_all_stream_id = binance_websocket_api_manager.create_stream(["!ticker"],
                                                                   ["arr"])
miniticker_stream_id = binance_websocket_api_manager.create_stream(
    ["arr"], ["!miniTicker"])

markets = {
    'bnbbtc', 'ethbtc', 'btcusdt', 'bchabcusdt', 'xrpusdt', 'rvnbtc',
    'ltcusdt', 'adausdt', 'eosusdt', 'neousdt', 'bnbusdt', 'adabtc', 'ethusdt',
    'trxbtc', 'bchabcbtc', 'ltcbtc', 'xrpbtc', 'ontbtc', 'bttusdt', 'eosbtc',
    'xlmbtc', 'bttbtc', 'tusdusdt', 'xlmusdt', 'qkcbtc', 'zrxbtc', 'neobtc',
    'adaeth', 'icxusdt', 'btctusd', 'icxbtc', 'btcusdc', 'wanbtc', 'zecbtc',
    'wtcbtc', 'batbtc', 'adabnb', 'etcusdt', 'qtumusdt', 'xmrbtc', 'trxeth',
    'adatusd', 'trxxrp', 'trxbnb', 'dashbtc', 'rvnbnb', 'bchabctusd', 'etcbtc',
    'bnbeth', 'ethpax', 'nanobtc', 'xembtc', 'xrpbnb', 'bchabcpax', 'xrpeth',
Example #17
0
    'bnbbtc', 'ethbtc', 'btcusdt', 'bchabcusdt', 'xrpusdt', 'rvnbtc',
    'ltcusdt', 'adausdt', 'eosusdt', 'neousdt', 'bnbusdt', 'adabtc', 'ethusdt',
    'trxbtc', 'trxbtc', 'bchabcbtc', 'ltcbtc', 'xrpbtc', 'ontbtc', 'bttusdt',
    'eosbtc', 'xlmbtc', 'bttbtc', 'tusdusdt', 'xlmusdt', 'qkcbtc', 'zrxbtc',
    'neobtc', 'adaeth', 'icxusdt', 'btctusd', 'icxbtc', 'btcusdc', 'wanbtc',
    'zecbtc', 'wtcbtc'
]

channels = [
    'trade', 'kline_1m', 'kline_5m', 'kline_15m', 'kline_30m', 'kline_1h',
    'kline_12h', 'depth5'
]

markets_1 = ['bnbbtc', 'ethbtc']
channels_1 = ['trade', 'kline_1m', '!ticker']
stream_id = binance_websocket_api_manager.create_stream(channels_1, markets_1)

markets_2 = [
    'batbtc', 'adabnb', 'etcusdt', 'qtumusdt', 'xmrbtc', 'trxeth', 'adatusd',
    'trxxrp', 'trxbnb', 'dashbtc', 'rvnbnb', 'bchabctusd', 'etcbtc', 'bnbeth',
    'ethpax', 'nanobtc', 'xembtc'
]
binance_websocket_api_manager.subscribe_to_stream(stream_id, markets=markets_2)

markets_3 = ['!miniTicker']
binance_websocket_api_manager.subscribe_to_stream(stream_id, markets=markets_3)

markets_4 = [
    'engbtc', 'zileth', 'xlmeth', 'eosbnb', 'xrppax', 'lskbtc', 'npxsbtc',
    'xmrusdt', 'ltcpax', 'xmrusdt', 'ethtusd', 'batusdt', 'mcobtc', 'neoeth',
    'bntbtc', 'eostusd', 'lrcbtc', 'funbtc', 'zecusdt', 'bnbpax', 'linkusdt',
Example #18
0
import sys
import time
import os
try:
    from unicorn_fy.unicorn_fy import UnicornFy
except ImportError:
    print("Please install `unicorn-fy`! https://pypi.org/project/unicorn-fy/")
    sys.exit(1)

# https://docs.python.org/3/library/logging.html#logging-levels
logging.basicConfig(
    level=logging.ERROR,
    filename=os.path.basename(__file__) + '.log',
    format="{asctime} [{levelname:8}] {process} {thread} {module}: {message}",
    style="{")

# create instance of BinanceWebSocketApiManager
binance_websocket_api_manager = BinanceWebSocketApiManager(
    exchange="binance.com")

binance_api_key = "I25sjQLfPuTBzMGNiHGPFq7UpxSZ9kdjjvgBri20sDHxJqFG21WabzpHAk1P9To1"
binance_api_secret = "ogrjfEnUpokY8VKKtlPNNUS3iWTqX9QuwS5vYwcs8fBThIRhQn4AyNL35cRWhuz5"

binance_websocket_api_manager.set_private_api_config(binance_api_key,
                                                     binance_api_secret)
userdata_stream_id = binance_websocket_api_manager.create_stream(
    ["!userData"], ["arr"], "userData stream")

ubwa = binance_websocket_api_manager
IPython.embed()
            time.sleep(0.01)
        else:
            #pass
            print(oldest_stream_data_from_stream_buffer)


# start a worker process to move the received stream_data from the stream_buffer to a print function
worker_thread = threading.Thread(target=print_stream_data_from_stream_buffer,
                                 args=(binance_websocket_api_manager, ))
worker_thread.start()

# create streams
print(
    "\r\n========================================== Starting ticker all ========================================\r\n"
)
ticker_arr_stream_id = binance_websocket_api_manager.create_stream(
    "arr", "!ticker")
time.sleep(7)
binance_websocket_api_manager.stop_stream(ticker_arr_stream_id)
time.sleep(2)
print(
    "\r\n=========================================== Stopp ticker all ==========================================\r\n"
)

print(
    "\r\n============================================ Starting ticker ==========================================\r\n"
)
ticker_stream_id = binance_websocket_api_manager.create_stream(
    "ticker", ['bnbbtc', 'ethbtc'])
time.sleep(7)
binance_websocket_api_manager.stop_stream(ticker_stream_id)
time.sleep(2)
            exit(0)
        oldest_stream_data_from_stream_buffer = binance_websocket_api_manager.pop_stream_data_from_stream_buffer(
        )
        if oldest_stream_data_from_stream_buffer is False:
            time.sleep(0.01)


# create instance of BinanceWebSocketApiManager for Binance.com Futures
binance_websocket_api_manager = BinanceWebSocketApiManager(
    exchange="binance.com-futures")

# set api key and secret for userData stream
binance_je_api_key = ""
binance_je_api_secret = ""
userdata_stream_id = binance_websocket_api_manager.create_stream(
    ["arr"], ["!userData"],
    api_key=binance_je_api_key,
    api_secret=binance_je_api_secret)

bookticker_all_stream_id = binance_websocket_api_manager.create_stream(
    ["arr"], ["!bookTicker"])

# https://binance-docs.github.io/apidocs/futures/en/#mark-price-stream-for-all-market
binance_websocket_api_manager.create_stream(["!markPrice"],
                                            "arr@1s",
                                            stream_label="!markPrice@arr@1s")

markets = {'btcusdt', 'bchusdt', 'ethusdt'}
binance_websocket_api_manager.create_stream(["aggTrade"], markets)
binance_websocket_api_manager.create_stream(["markPrice"], markets)
binance_websocket_api_manager.create_stream(["kline_1m"], markets)
binance_websocket_api_manager.create_stream(["kline_5m"], markets)
# signs, if you want to get an active connection to a Binance webstream.
# https://github.com/oliver-zehentleitner/unicorn-binance-websocket-api/blob/master/tools/test_max_websocket_uri_length.py
if binance_websocket_api_manager.is_websocket_uri_length_valid(channels, markets):
    print("URI with `markets` length is valid!")
else:
    print("URI with `markets` length is too long!")

if binance_websocket_api_manager.is_websocket_uri_length_valid(channels, markets_mega_list):
    print("URI with `markets_mega_list` length is valid!")
else:
    print("URI with `markets_mega_list` length is too long!")

print("############################################################################################################\r\n")

# create and start some streams
first_multi_stream_id = binance_websocket_api_manager.create_stream(channels, markets)
ticker_stream_id = binance_websocket_api_manager.create_stream(["arr"], ["!miniTicker"])
miniticker_stream_id = binance_websocket_api_manager.create_stream(["arr"], ["!ticker"])
time.sleep(4)

first_multi_stream_info = binance_websocket_api_manager.get_stream_info(first_multi_stream_id)
print(first_multi_stream_id, "received", first_multi_stream_info['processed_receives_total'], "records till now! ##\r\n")

# stop the streams
binance_websocket_api_manager.stop_stream(first_multi_stream_id)
binance_websocket_api_manager.stop_stream(miniticker_stream_id)
print("############################################################################################################\r\n"
      "# waiting, till stream", first_multi_stream_id, "has stopped!\r\n"
      "############################################################################################################")
binance_websocket_api_manager.wait_till_stream_has_stopped(first_multi_stream_id)
print("############################################################################################################\r\n" 
binance_websocket_api_manager = BinanceWebSocketApiManager() # create instance of BinanceWebSocketApiManager and call progress_data

# define stream channels
channels = {'depth20', 'miniTicker'}

markets = ['ethbtc', 'ltcbtc', 'bnbbtc', 'neobtc', 'qtumeth', 'eoseth', 'snteth', 'bnteth', 'gasbtc', 'bnbeth', 'btcusdt', 'ethusdt', 'oaxeth', 'dnteth', 'mcoeth', 'mcobtc', 'wtcbtc', 'wtceth', 'lrcbtc', 'lrceth', 'qtumbtc', 'yoyobtc', 'omgbtc', 'omgeth', 'zrxbtc', 'zrxeth', 'stratbtc', 'strateth', 'snglsbtc', 'snglseth', 'bqxbtc', 'bqxeth', 'kncbtc', 'knceth', 'funbtc', 'funeth', 'snmbtc', 'snmeth', 'neoeth', 'iotabtc', 'iotaeth', 'linkbtc', 'linketh', 'xvgbtc', 'xvgeth', 'mdabtc', 'mdaeth', 'mtlbtc', 'mtleth', 'eosbtc', 'sntbtc', 'etceth', 'etcbtc', 'mthbtc', 'mtheth', 'engbtc', 'engeth', 'dntbtc', 'zecbtc', 'zeceth', 'bntbtc', 'astbtc', 'asteth', 'dashbtc', 'dasheth', 'oaxbtc', 'btgbtc', 'btgeth', 'evxbtc', 'evxeth', 'reqbtc', 'reqeth', 'vibbtc', 'vibeth', 'trxbtc', 'trxeth', 'powrbtc', 'powreth', 'arkbtc', 'arketh', 'yoyoeth', 'xrpbtc', 'xrpeth', 'enjbtc', 'enjeth', 'storjbtc', 'storjeth', 'bnbusdt', 'yoyobnb', 'powrbnb', 'kmdbtc', 'kmdeth', 'nulsbnb', 'rcnbtc', 'rcneth', 'rcnbnb', 'nulsbtc', 'nulseth', 'rdnbtc', 'rdneth', 'rdnbnb', 'xmrbtc', 'xmreth', 'dltbnb', 'wtcbnb', 'dltbtc', 'dlteth', 'ambbtc', 'ambeth', 'ambbnb', 'batbtc', 'bateth', 'batbnb', 'bcptbtc', 'bcpteth', 'bcptbnb', 'arnbtc', 'arneth', 'gvtbtc', 'gvteth', 'cdtbtc', 'cdteth', 'gxsbtc', 'gxseth', 'neousdt', 'neobnb', 'poebtc', 'poeeth', 'qspbtc', 'qspeth', 'qspbnb', 'btsbtc', 'btseth', 'btsbnb', 'xzcbtc', 'xzceth', 'xzcbnb', 'lskbtc', 'lsketh', 'lskbnb', 'tntbtc', 'tnteth', 'fuelbtc', 'fueleth', 'manabtc', 'manaeth', 'bcdbtc', 'bcdeth', 'dgdbtc', 'dgdeth', 'iotabnb', 'adxbtc', 'adxeth', 'adxbnb', 'adabtc', 'adaeth', 'pptbtc', 'ppteth', 'cmtbtc', 'cmteth', 'cmtbnb', 'xlmbtc', 'xlmeth', 'xlmbnb', 'cndbtc', 'cndeth', 'cndbnb', 'lendbtc', 'lendeth', 'wabibtc', 'wabieth', 'wabibnb', 'ltceth', 'ltcusdt', 'ltcbnb', 'tnbbtc', 'tnbeth', 'wavesbtc', 'waveseth', 'wavesbnb', 'gtobtc', 'gtoeth', 'gtobnb', 'icxbtc', 'icxeth', 'icxbnb', 'ostbtc', 'osteth', 'ostbnb', 'elfbtc', 'elfeth', 'aionbtc', 'aioneth', 'aionbnb', 'neblbtc', 'nebleth', 'neblbnb', 'brdbtc', 'brdeth', 'brdbnb', 'mcobnb', 'edobtc', 'edoeth', 'navbtc', 'naveth', 'navbnb', 'lunbtc', 'luneth', 'appcbtc', 'appceth', 'appcbnb', 'vibebtc', 'vibeeth']

""" markets = ['ethbtc', 'ltcbtc', 'bnbbtc', 'neobtc', 'qtumeth', 'eoseth', 'snteth', 'bnteth', 'gasbtc', 'bnbeth', 'btcusdt', 'ethusdt', 'oaxeth', 'dnteth', 'mcoeth', 'mcobtc', 'wtcbtc', 'wtceth', 'lrcbtc', 'lrceth', 'qtumbtc', 'yoyobtc', 'omgbtc', 'omgeth', 'zrxbtc', 'zrxeth', 'stratbtc', 'strateth', 'snglsbtc', 'snglseth', 'bqxbtc', 'bqxeth', 'kncbtc', 'knceth', 'funbtc', 'funeth', 'snmbtc', 'snmeth', 'neoeth', 'iotabtc', 'iotaeth', 'linkbtc', 'linketh', 'xvgbtc', 'xvgeth', 'mdabtc', 'mdaeth', 'mtlbtc', 'mtleth', 'eosbtc', 'sntbtc', 'etceth', 'etcbtc', 'mthbtc', 'mtheth', 'engbtc', 'engeth', 'dntbtc', 'zecbtc', 'zeceth', 'bntbtc', 'astbtc', 'asteth', 'dashbtc', 'dasheth', 'oaxbtc', 'btgbtc', 'btgeth', 'evxbtc', 'evxeth', 'reqbtc', 'reqeth', 'vibbtc', 'vibeth', 'trxbtc', 'trxeth', 'powrbtc', 'powreth', 'arkbtc', 'arketh', 'yoyoeth', 'xrpbtc', 'xrpeth', 'enjbtc', 'enjeth', 'storjbtc', 'storjeth', 'bnbusdt', 'yoyobnb', 'powrbnb', 'kmdbtc', 'kmdeth', 'nulsbnb', 'rcnbtc', 'rcneth', 'rcnbnb', 'nulsbtc', 'nulseth', 'rdnbtc', 'rdneth', 'rdnbnb', 'xmrbtc', 'xmreth', 'dltbnb', 'wtcbnb', 'dltbtc', 'dlteth', 'ambbtc', 'ambeth', 'ambbnb', 'batbtc', 'bateth', 'batbnb', 'bcptbtc', 'bcpteth', 'bcptbnb', 'arnbtc', 'arneth', 'gvtbtc', 'gvteth', 'cdtbtc', 'cdteth', 'gxsbtc', 'gxseth', 'neousdt', 'neobnb', 'poebtc', 'poeeth', 'qspbtc', 'qspeth', 'qspbnb', 'btsbtc', 'btseth', 'btsbnb', 'xzcbtc', 'xzceth', 'xzcbnb', 'lskbtc', 'lsketh', 'lskbnb', 'tntbtc', 'tnteth', 'fuelbtc', 'fueleth', 'manabtc', 'manaeth', 'bcdbtc', 'bcdeth', 'dgdbtc', 'dgdeth', 'iotabnb', 'adxbtc', 'adxeth', 'adxbnb', 'adabtc', 'adaeth', 'pptbtc', 'ppteth', 'cmtbtc', 'cmteth', 'cmtbnb', 'xlmbtc', 'xlmeth', 'xlmbnb', 'cndbtc', 'cndeth', 'cndbnb', 'lendbtc', 'lendeth', 'wabibtc', 'wabieth', 'wabibnb', 'ltceth', 'ltcusdt', 'ltcbnb', 'tnbbtc', 'tnbeth', 'wavesbtc', 'waveseth', 'wavesbnb', 'gtobtc', 'gtoeth', 'gtobnb', 'icxbtc', 'icxeth', 'icxbnb', 'ostbtc', 'osteth', 'ostbnb', 'elfbtc', 'elfeth', 'aionbtc', 'aioneth', 'aionbnb', 'neblbtc', 'nebleth', 'neblbnb', 'brdbtc', 'brdeth', 'brdbnb', 'mcobnb', 'edobtc', 'edoeth', 'navbtc', 'naveth', 'navbnb', 'lunbtc', 'luneth', 'appcbtc', 'appceth', 'appcbnb', 'vibebtc', 'vibeeth', 'rlcbtc', 'rlceth', 'rlcbnb', 'insbtc', 'inseth', 'pivxbtc', 'pivxeth', 'pivxbnb', 'iostbtc', 'iosteth', 'steembtc', 'steemeth', 'steembnb', 'nanobtc', 'nanoeth', 'nanobnb', 'viabtc', 'viaeth', 'viabnb', 'blzbtc', 'blzeth', 'blzbnb', 'aebtc', 'aeeth', 'aebnb', 'ncashbtc', 'ncasheth', 'ncashbnb', 'poabtc', 'poaeth', 'poabnb', 'zilbtc', 'zileth', 'zilbnb', 'ontbtc', 'onteth', 'ontbnb', 'stormbtc', 'stormeth', 'stormbnb', 'qtumbnb', 'qtumusdt', 'xembtc', 'xemeth', 'xembnb', 'wanbtc', 'waneth', 'wanbnb', 'wprbtc', 'wpreth', 'qlcbtc', 'qlceth', 'sysbtc', 'syseth', 'sysbnb', 'qlcbnb', 'grsbtc', 'grseth', 'adausdt', 'adabnb', 'gntbtc', 'gnteth', 'gntbnb', 'loombtc', 'loometh', 'loombnb', 'xrpusdt', 'repbtc', 'repeth', 'repbnb', 'btctusd', 'ethtusd', 'zenbtc', 'zeneth', 'zenbnb', 'skybtc', 'skyeth', 'skybnb', 'eosusdt', 'eosbnb', 'cvcbtc', 'cvceth', 'cvcbnb', 'thetabtc', 'thetaeth', 'thetabnb', 'xrpbnb', 'tusdusdt', 'iotausdt', 'xlmusdt', 'iotxbtc', 'iotxeth', 'qkcbtc', 'qkceth', 'agibtc', 'agieth', 'agibnb', 'nxsbtc', 'nxseth', 'nxsbnb', 'enjbnb', 'databtc', 'dataeth', 'ontusdt', 'trxbnb', 'trxusdt', 'etcusdt', 'etcbnb', 'icxusdt', 'scbtc', 'sceth', 'scbnb', 'npxsbtc', 'npxseth', 'keybtc', 'keyeth', 'nasbtc', 'naseth', 'nasbnb', 'mftbtc', 'mfteth', 'mftbnb', 'dentbtc', 'denteth', 'ardrbtc', 'ardreth', 'ardrbnb', 'nulsusdt', 'hotbtc', 'hoteth', 'vetbtc', 'veteth', 'vetusdt', 'vetbnb', 'dockbtc', 'docketh', 'polybtc', 'polybnb', 'hcbtc', 'hceth', 'gobtc', 'gobnb', 'paxusdt', 'rvnbtc', 'rvnbnb', 'dcrbtc', 'dcrbnb', 'mithbtc', 'mithbnb', 'bchabcbtc', 'bchabcusdt', 'bnbpax', 'btcpax', 'ethpax', 'xrppax', 'eospax', 'xlmpax', 'renbtc', 'renbnb', 'bnbtusd', 'xrptusd', 'eostusd', 'xlmtusd', 'bnbusdc', 'btcusdc', 'ethusdc', 'xrpusdc', 'eosusdc', 'xlmusdc', 'usdcusdt', 'adatusd', 'trxtusd', 'neotusd', 'trxxrp', 'xzcxrp', 'paxtusd', 'usdctusd', 'usdcpax', 'linkusdt', 'linktusd', 'linkpax', 'linkusdc', 'wavesusdt', 'wavestusd', 'wavespax', 'wavesusdc', 'bchabctusd', 'bchabcpax', 'bchabcusdc', 'ltctusd', 'ltcpax', 'ltcusdc', 'trxpax', 'trxusdc', 'bttbtc', 'bttbnb', 'bttusdt', 'bnbusds', 'btcusds', 'usdsusdt', 'usdspax', 'usdstusd', 'usdsusdc', 'bttpax', 'btttusd', 'bttusdc', 'ongbnb', 'ongbtc', 'ongusdt', 'hotbnb', 'hotusdt', 'zilusdt', 'zrxbnb', 'zrxusdt', 'fetbnb', 'fetbtc', 'fetusdt', 'batusdt', 'xmrbnb', 'xmrusdt', 'zecbnb', 'zecusdt', 'zecpax', 'zectusd', 'zecusdc', 'iostbnb', 'iostusdt', 'celrbnb', 'celrbtc', 'celrusdt', 'adapax', 'adausdc', 'neopax', 'neousdc', 'dashbnb', 'dashusdt', 'nanousdt', 'omgbnb', 'omgusdt', 'thetausdt', 'enjusdt', 'mithusdt', 'maticbnb', 'maticbtc', 'maticusdt', 'atombnb', 'atombtc', 'atomusdt', 'atomusdc', 'atompax', 'atomtusd', 'etcusdc', 'etcpax', 'etctusd', 'batusdc', 'batpax', 'battusd', 'phbbnb', 'phbbtc', 'phbusdc', 'phbtusd', 'phbpax', 'tfuelbnb', 'tfuelbtc', 'tfuelusdt', 'tfuelusdc', 'tfueltusd', 'tfuelpax', 'onebnb', 'onebtc', 'oneusdt', 'onetusd', 'onepax', 'oneusdc', 'ftmbnb', 'ftmbtc', 'ftmusdt', 'ftmtusd', 'ftmpax', 'ftmusdc']

Too long url, need to split later

markets = [] # Get all markets
r = requests.get(url='https://www.binance.com/api/v1/exchangeInfo')
data = r.json()
for elem in data['symbols']:
	if elem['status'] == 'TRADING':
		markets.append(elem['symbol'].lower()) """

print('Connecting to ' + str(len(markets)) + ' market')

binance_get_kline_stream_id1 = binance_websocket_api_manager.create_stream(channels, markets)

worker_thread = threading.Thread(target=progress_data, args=(binance_websocket_api_manager,))
worker_thread.start()
while True:
	runsince = int(time.time() - start_time)
	runsince = str(datetime.timedelta(seconds=runsince))
	your_text = runsince + '  Inserted rows: ' + str("{:,}".format(all_sql_wrote))
	binance_websocket_api_manager.print_summary(add_string=your_text)
	time.sleep(1)
binance_websocket_api_manager = BinanceWebSocketApiManager(exchange="binance.com")

markets = {'bnbbtc', 'ethbtc', 'btcusdt', 'bchabcusdt', 'xrpusdt', 'rvnbtc', 'ltcusdt', 'adausdt', 'eosusdt',
           'neousdt', 'bnbusdt', 'adabtc', 'ethusdt', 'trxbtc', 'bchabcbtc', 'ltcbtc', 'xrpbtc',
           'ontbtc', 'bttusdt', 'eosbtc', 'xlmbtc', 'bttbtc', 'tusdusdt', 'xlmusdt', 'qkcbtc', 'zrxbtc',
           'neobtc', 'adaeth', 'icxusdt', 'btctusd', 'icxbtc', 'btcusdc', 'wanbtc', 'zecbtc', 'wtcbtc',
           'batbtc', 'adabnb', 'etcusdt', 'qtumusdt', 'xmrbtc', 'trxeth', 'adatusd', 'trxxrp', 'trxbnb',
           'dashbtc', 'rvnbnb', 'bchabctusd', 'etcbtc', 'bnbeth', 'ethpax', 'nanobtc', 'xembtc', 'xrpbnb',
           'bchabcpax', 'xrpeth', 'bttbnb', 'ltcbnb', 'agibtc', 'zrxusdt', 'xlmbnb', 'ltceth', 'eoseth',
           'ltctusd', 'polybnb', 'scbtc', 'steembtc', 'trxtusd', 'npxseth', 'kmdbtc', 'polybtc', 'gasbtc',
           'engbtc', 'zileth', 'xlmeth', 'eosbnb', 'xrppax', 'lskbtc', 'npxsbtc', 'xmrusdt', 'ltcpax',
           'ethtusd', 'batusdt', 'mcobtc', 'neoeth', 'bntbtc', 'eostusd', 'lrcbtc', 'funbtc', 'zecusdt',
           'bnbpax', 'linkusdt', 'hceth', 'zrxeth', 'icxeth', 'xmreth', 'neobnb', 'etceth', 'zeceth', 'xmrbnb',
           'wanbnb', 'zrxbnb', 'agibnb', 'funeth', 'arketh', 'engeth'}

binance_get_kline_1m_bnbbtc = binance_websocket_api_manager.create_stream('kline_1m', markets=markets)

while True:
    if binance_websocket_api_manager.is_manager_stopping():
        exit(0)
    oldest_stream_data_from_stream_buffer = binance_websocket_api_manager.pop_stream_data_from_stream_buffer()
    if oldest_stream_data_from_stream_buffer is False:
        time.sleep(0.01)
    else:
        oldest_stream_data_from_stream_buffer = UnicornFy.binance_com_websocket(oldest_stream_data_from_stream_buffer)
        if oldest_stream_data_from_stream_buffer is not None:
            try:
                if oldest_stream_data_from_stream_buffer['event_time'] >= \
                        oldest_stream_data_from_stream_buffer['kline']['kline_close_time']:
                    print(oldest_stream_data_from_stream_buffer)
            except KeyError:
Example #24
0
from unicorn_binance_websocket_api.unicorn_binance_websocket_api_manager import BinanceWebSocketApiManager
from unicorn_fy.unicorn_fy import UnicornFy
import pprint
import xlsxwriter

binance_websocket_api_manager = BinanceWebSocketApiManager(
    exchange="binance.com")
binance_websocket_api_manager.create_stream(['trade', 'kline_1m'], ['bnbbtc'])

# while True:
#     oldest_stream_data_from_stream_buffer = binance_websocket_api_manager.pop_stream_data_from_stream_buffer()
#     if oldest_stream_data_from_stream_buffer:
#         #print(oldest_stream_data_from_stream_buffer)
#         unicorn_fied_stream_data = UnicornFy.binance_com_websocket(oldest_stream_data_from_stream_buffer)
#         print(unicorn_fied_stream_data)

workbook = xlsxwriter.Workbook('trades.xlsx')
worksheet = workbook.add_worksheet()

n = 0
worksheet.write(n, 0, "costs")
worksheet.write(n, 1, "quantity")
n += 1
while True:
    oldest_stream_data_from_stream_buffer = binance_websocket_api_manager.pop_stream_data_from_stream_buffer(
    )
    if oldest_stream_data_from_stream_buffer:
        stream_data = UnicornFy.binance_com_websocket(
            oldest_stream_data_from_stream_buffer)
        pprint.pprint(stream_data)
        if (stream_data['event_type'] == 'trade'):
Example #25
0

# create instance of BinanceWebSocketApiManager and provide the function for stream processing
binance_websocket_api_manager = BinanceWebSocketApiManager()

# start a worker process to process to move the received stream_data from the stream_buffer to a print function
worker_thread = threading.Thread(target=print_stream_data_from_stream_buffer,
                                 args=(binance_websocket_api_manager, ))
worker_thread.start()

print("testing ws/ single streams")

print(
    "\r\n========================================== Starting ticker all ========================================\r\n"
)
ticker_all_stream_id = binance_websocket_api_manager.create_stream(["arr"],
                                                                   ["!ticker"])
time.sleep(6)
binance_websocket_api_manager.stop_stream(ticker_all_stream_id)
time.sleep(2)
print(
    "\r\n=========================================== Stopped ticker all ========================================\r\n"
)

print(
    "\r\n========================================= Starting !miniticker ========================================\r\n"
)
miniticker_stream_id = binance_websocket_api_manager.create_stream(
    ["arr"], ["!miniTicker"])
time.sleep(5)
binance_websocket_api_manager.stop_stream(miniticker_stream_id)
time.sleep(2)
Example #26
0
        oldest_stream_data_from_stream_buffer = binance_websocket_api_manager.pop_stream_data_from_stream_buffer()
        if oldest_stream_data_from_stream_buffer is False:
            time.sleep(0.01)


# https://docs.python.org/3/library/logging.html#logging-levels
logging.basicConfig(level=logging.DEBUG,
                    filename=os.path.basename(__file__) + '.log',
                    format="{asctime} [{levelname:8}] {process} {thread} {module}: {message}",
                    style="{")

# create instance of BinanceWebSocketApiManager for Binance Jersey
binance_websocket_api_manager = BinanceWebSocketApiManager(exchange="jex.com")

# set api key and secret for userData stream
userdata_stream_id = binance_websocket_api_manager.create_stream(["arr"], ["!userData"], api_key="aaa", api_secret="bb")

omt_stream_id = binance_websocket_api_manager.create_stream(["arr"], ["!optionMiniTicker"])
smt_stream_id = binance_websocket_api_manager.create_stream(["arr"], ["!spotMiniTicker"])
st_stream_id = binance_websocket_api_manager.create_stream(["arr"], ["!spotTicker"])

spot_markets = {'eosbtc', 'ltcbtc', 'ethbtc', 'dashbtc'}
spot_channels = {'spotTrade', 'spotMiniTicker', 'spotDepth20', 'spotDepthUpdate', 'spotTicker'}
binance_websocket_api_manager.create_stream(["spotTrade"], spot_markets)
binance_websocket_api_manager.create_stream(["spotDepth10"], spot_markets)
binance_websocket_api_manager.create_stream(["spotDepth20"], spot_markets)
binance_websocket_api_manager.create_stream(spot_channels, spot_markets)

# start a worker process to move the received stream_data from the stream_buffer to a print function
worker_thread = threading.Thread(target=print_stream_data_from_stream_buffer, args=(binance_websocket_api_manager,))
worker_thread.start()
# start a worker process to move the received stream_data from the stream_buffer to a print function
worker_thread = threading.Thread(target=print_stream_data_from_stream_buffer,
                                 args=(binance_websocket_api_manager, ))
worker_thread.start()

print_summary_thread = threading.Thread(target=print_stream,
                                        args=(binance_websocket_api_manager, ))
print_summary_thread.start()

data = binance_rest_client.get_all_tickers()
for item in data:
    markets.append(item['symbol'])

binance_websocket_api_manager.create_stream(["!userData"], ["arr"],
                                            "Alice userData stream",
                                            api_key="aaa",
                                            api_secret="bbb")
binance_websocket_api_manager.create_stream(["!userData"], ["arr"],
                                            "Bobs userData stream",
                                            api_key="ccc",
                                            api_secret="ddd")

binance_websocket_api_manager.create_stream(arr_channels,
                                            "arr",
                                            stream_label="arr channels")

for channel in channels:
    binance_websocket_api_manager.create_stream(channel,
                                                markets,
                                                stream_label=channel)
Example #28
0
logging.getLogger('unicorn-log').addHandler(logging.StreamHandler())
logging.getLogger('unicorn-log').setLevel(logging.INFO)

# create instance of BinanceWebSocketApiManager for Binance.com Futures
binance_websocket_api_manager = BinanceWebSocketApiManager(
    exchange="binance.com-futures")

print("starting monitoring api!")
binance_websocket_api_manager.start_monitoring_api()

# set api key and secret for userData stream
binance_je_api_key = ""
binance_je_api_secret = ""
binance_websocket_api_manager.set_private_api_config(binance_je_api_key,
                                                     binance_je_api_secret)
userdata_stream_id = binance_websocket_api_manager.create_stream(["arr"],
                                                                 ["!userData"])

bookticker_all_stream_id = binance_websocket_api_manager.create_stream(
    ["arr"], ["!bookTicker"])

markets = {'btcusdt', 'bchusdt', 'ethusdt'}
binance_websocket_api_manager.create_stream(["aggTrade"], markets)
binance_websocket_api_manager.create_stream(["markPrice"], markets)
binance_websocket_api_manager.create_stream(["kline_1m"], markets)
binance_websocket_api_manager.create_stream(["kline_5m"], markets)
binance_websocket_api_manager.create_stream(["kline_15m"], markets)
binance_websocket_api_manager.create_stream(["kline_1h"], markets)
binance_websocket_api_manager.create_stream(["kline_12h"], markets)
binance_websocket_api_manager.create_stream(["kline_1w"], markets)
binance_websocket_api_manager.create_stream(["ticker"], markets)
binance_websocket_api_manager.create_stream(["miniTicker"], markets)
from unicorn_binance_websocket_api_process_streams import BinanceWebSocketApiProcessStreams

# https://docs.python.org/3/library/logging.html#logging-levels
logging.getLogger('unicorn-log').setLevel(logging.INFO)
logging.getLogger('unicorn-log').addHandler(logging.StreamHandler())

# create instance of BinanceWebSocketApiManager and provide the function for stream processing
binance_websocket_api_manager = BinanceWebSocketApiManager(
    BinanceWebSocketApiProcessStreams.process_stream_data)

print(
    "\r\n========================================== Starting aggTrade ==========================================\r\n"
)
# start
markets = {'bnbbtc', 'ethbtc', 'btcusdt', 'bchabcusdt', 'eosusdt'}
aggtrade_stream_id = binance_websocket_api_manager.create_stream(["aggTrade"],
                                                                 markets)
time.sleep(3)
# stop
binance_websocket_api_manager.stop_stream(aggtrade_stream_id)
time.sleep(2)
print(
    "\r\n=========================================== Stopped aggTrade ==========================================\r\n"
)

print(
    "\r\n====================================== Starting trade and kline_1m ====================================\r\n"
)
trade_stream_id = binance_websocket_api_manager.create_stream(
    ["trade"], ['bnbbtc', 'ethbtc', 'btcusdt', 'bchabcusdt'])
markets = {'xrpusdt', 'rvnbtc', 'ltcusdt', 'adausdt', 'eosusdt', 'neousdt'}
kline_1m_stream_id = binance_websocket_api_manager.create_stream(
    'bchabcbusd', 'ltcbnb', 'pivxeth', 'skybtc', 'tntbtc', 'poebtc',
    'steembtc', 'icxusdt', 'tfuelbtc', 'chzbtc', 'vibeth', 'winusdc', 'gtobtc',
    'linkusdc', 'batbusd', 'rdnbtc', 'dataeth', 'bttpax', 'zrxbnb', 'vibbtc',
    'neobnb', 'cosbtc', 'powreth', 'rlcusdt', 'hbarbnb', 'wabieth', 'bqxeth',
    'aionbtc', 'aeeth', 'mthbtc', 'wrxbtc', 'pptbtc', 'nknbtc', 'zecusdt',
    'stormeth', 'qtumusdt'
]

channels = [
    'kline_1m', 'kline_5m', 'kline_15m', 'kline_30m', 'kline_1h', 'kline_12h',
    'kline_1w', 'trade', 'miniTicker', 'depth20'
]

for channel in channels:
    binance_websocket_api_manager.create_stream(channel,
                                                markets,
                                                stream_buffer_name=channel)


def print_stream_data_from_stream_buffer(binance_websocket_api_manager):
    print("print trades only")
    time.sleep(10)
    while True:
        if binance_websocket_api_manager.is_manager_stopping():
            exit(0)
        oldest_stream_data_from_stream_buffer = binance_websocket_api_manager.pop_stream_data_from_stream_buffer(
            "trade")
        if oldest_stream_data_from_stream_buffer is False:
            time.sleep(0.01)
        else:
            try: