The easiest way to see your crypto: Open-High-Low-Close charts | Deephaven

The easiest way to see your crypto: Open-High-Low-Close charts | Deephaven


Pulling real-time data into tables only shows you part of the story when it comes to making valuable insights about your stocks. Well-designed plots help you interpret market conditions quickly, and the faster you can make choices, the better. Deephaven not only provides a variety of convenient plotting tools but syncs your plots to your updating source data – as the data changes in real time, your plot changes as well.

We’ve been discussing crypto as one exemplary real-time use case over a series of blog posts. We’ve covered ingesting streaming crypto data, performing calculations on that data, and using sentiment analysis to make informed choices about when / what to buy and sell. In this iteration, we show you how to easily see your crypto assets in candle (AKA Open-High-Low-Close) charts, this time using a new data source (Finnhub). OHLC charts are a popular choice for showing the price fluctuations of a financial instrument over time, and Deephaven’s query methods make them easy to render.

Not all crypto data is the same, and having a full picture of your assets is extremely important. We’ve been tracking Dogecoin throughout our series, and as Bitcoin’s value plummets, we can use our charts to monitor how the market is changing as a result. Deephaven plots change dynamically, reacting immediately to these fluctuations based on the asset you pick. For this program to run, all you need to do is pick a search term – be it BTC, ETH, etc. The end result is several plots – one for each asset that has the chosen term. Crypto assets are complicated, but Deephaven is easy.

Getting started

Finnhub is a great tool for Real-Time RESTful APIs and Websocket for Stocks, Currencies, and Crypto. I like how easy it is to pull OHLC data for Crypto. In order to follow this example, you will need a free Finnhub API key.

Launch Deephaven

Once Deephaven is up and running, navigate to http://localhost:10000/ide. If you’re a new user, see our Docker installation guide. Our crypto example is a great starting point, as there are no large packages needed: a simple pip-install and you’re ready to work with the data.

Full code block

We’ll start with the code itself. If you just want the code without the full explanations, expand the block below.

Complete program code
import os
os.system("pip install finnhub-python")

import finnhub
finnhub_client = finnhub.Client(api_key="<INPUT YOUR TOKEN HERE>")

import pandas as pd
import time
import re

from deephaven.DateTimeUtils import currentTime, secondsToTime, convertDateTime, millis, minus, convertPeriod

from deephaven import DynamicTableWriter
import deephaven.dtypes as dht
import threading

from deephaven import Plot

search_term = 'DOGE'
time_history = 7

def pull_coins(search_term):
exchanges = finnhub_client.crypto_exchanges()
temp_ids = []
for exchange in exchanges:
long_list = finnhub_client.crypto_symbols(exchange)
symbols = pd.DataFrame(long_list).loc[:,'symbol']
temp_ids.append(symbols.values.tolist())

ids = [item for sublist in temp_ids for item in sublist]

r=re.compile(".*({}).*".format(search_term))
return list(filter(r.match, ids))#[12:]

ids = pull_coins(search_term)

def thread_func(time_history, tableWriter):
for i in range(50):
for id in ids:
data = finnhub_client.crypto_candles(id, 15, int(millis(minus(currentTime(),convertPeriod("T"+str(int((24*time_history)))+"H")))/1000), int(millis(currentTime())/1000))
coin = id

if data['s'] =='ok' and len(data['s'])>0:
c = (data['c'])
h = (data['h'])
l = (data['l'])
o = (data['o'])
t = (data['t'])
v = (data['v'])
if c != None:
for i in range(len(c)):
tableWriter.logRow(coin, float(c[i]), float(h[i]), float(l[i]), float(o[i]), secondsToTime(t[i]), float(v[i]))
time.sleep(1)



coin_tableWriter = DynamicTableWriter(
["Coin", "Close", "High", "Low", "Open", "DateTime", "Volume"],
[dht.string, dht.float64, dht.float64, dht.float64, dht.float64, dht.datetime, dht.float64]
)

coin_data = coin_tableWriter.getTable().formatColumns("Close = Decimal(`#,###.##############`)")
.formatColumns("High = Decimal(`#,###.##############`)")
.formatColumns("Low = Decimal(`#,###.##############`)")
.formatColumns("Open = Decimal(`#,###.##############`)")

thread = threading.Thread(target=thread_func, args=[time_history, coin_tableWriter])
thread.start()

pulled_ids = []
for value in coin_data.selectDistinct("Coin").getColumn("Coin").getDirect():
pulled_ids.append(value)


from deephaven import Plot

for i in range(len(pulled_ids)):
coin = pulled_ids[i]
globals()[f"ohlc_{pulled_ids[i]}"] = Plot.ohlcPlot("coins", coin_data.where("Coin= coin"), "DateTime", "Open", "High", "Low", "Close")
.show()

What the code does

The Finnhub data has a lot of crypto symbols available – as of right now that count is 8,307 symbols over 14 different exchanges. With data on that scale, it’s obvious how visualizing the data properly is essential to making informed decisions. This program will pull the list of available exchanges and then search each exchange for the keyword of those symbols. The end product is a table with all the symbols from each exchange and an OHLC chart for each symbol.

Install packages

First, we need to install the Finnhub package. Here, we do that in the Deephaven IDE so that this is ready to go for the rest of the program. Note that this command needs to be re-done with each new session. For more information on installing Python packages, see How to install Python packages.

import os
os.system("pip install finnhub-python")

Imports and keys

The next step is to define the imports for everything needed in the script and to initialize the Finnhub client with your API key. Take note that the Finnhub API has a rate limit for the data, but it’s pretty generous. This API key can be an environmental variable or hard-coded.

import finnhub
import pandas as pd
import time
import re

from deephaven.DateTimeUtils import currentTime, secondsToTime, convertDateTime, millis, minus, convertPeriod

from deephaven import DynamicTableWriter
import deephaven.dtypes as dht
import threading

from deephaven import Plot

finnhub_api_key = os.environ.get('FINNHUB_API_KEY')
#finnhub_api_key = "<INPUT YOUR TOKEN HERE>"

finnhub_client = finnhub.Client(api_key=finnhub_api_key)

Personal settings

Next, assign a search term for that asset you want to monitor and a time frame for how many days to go back in history. Throughout our crypto-examples, we’ve used Dogecoin, so we’ve specified our search_term accordingly.

search_term = 'DOGE'
time_history = 7

Pull asset names

To get a full picture of the dynamic data set, I like to search for every exchange currently available and then limit the assets to those that match my search_term. This function returns all of the ids that I want to use to make an OHLC chart.

def pull_coins(search_term):
exchanges = finnhub_client.crypto_exchanges()
temp_ids = []
for exchange in exchanges:
long_list = finnhub_client.crypto_symbols(exchange)
symbols = pd.DataFrame(long_list).loc[:,'symbol']
temp_ids.append(symbols.values.tolist())

ids = [item for sublist in temp_ids for item in sublist]

r=re.compile(".*({}).*".format(search_term))
return list(filter(r.match, ids))#[12:]

ids = pull_coins(search_term)

Here are the current exchanges searched:

  • KRAKEN
  • BITFINEX
  • OKEX
  • FXPIG
  • BITTREX
  • COINBASE
  • HUOBI
  • BITMEX
  • BINANCE
  • POLONIEX
  • ZB
  • HITBTC
  • KUCOIN
  • GEMINI

Each exchange has its own set of symbols. To provide you with the type of data this pulls, we’ve listed all the symbols on Coinbase and Binance.

Warning! These lists are long – if you do not limit by a certain term, you will get A LOT of data and reach the rate limit.

COINBASE assets

[‘COINBASE:EOS-EUR’, ‘COINBASE:CLV-GBP’, ‘COINBASE:QUICK-USD’, ‘COINBASE:DDX-EUR’, ‘COINBASE:LTC-GBP’, ‘COINBASE:CHZ-EUR’, ‘COINBASE:XTZ-BTC’, ‘COINBASE:ZEC-BTC’, ‘COINBASE:ICP-GBP’, ‘COINBASE:ORN-USD’, ‘COINBASE:ANKR-EUR’, ‘COINBASE:ZEC-USDC’, ‘COINBASE:BAND-BTC’, ‘COINBASE:ZRX-BTC’, ‘COINBASE:MIR-USD’, ‘COINBASE:ADA-USD’, ‘COINBASE:USDC-GBP’, ‘COINBASE:ORN-USDT’, ‘COINBASE:RAD-USDT’, ‘COINBASE:OMG-GBP’, ‘COINBASE:LTC-BTC’, ‘COINBASE:RGT-USD’, ‘COINBASE:WLUNA-USD’, ‘COINBASE:USDT-USDC’, ‘COINBASE:1INCH-EUR’, ‘COINBASE:MLN-USD’, ‘COINBASE:FIL-GBP’, ‘COINBASE:AGLD-USD’, ‘COINBASE:USDT-EUR’, ‘COINBASE:YFII-USD’, ‘COINBASE:BCH-USD’, ‘COINBASE:BAND-EUR’, ‘COINBASE:QNT-USD’, ‘COINBASE:MATIC-BTC’, ‘COINBASE:KEEP-USD’, ‘COINBASE:MANA-EUR’, ‘COINBASE:GRT-GBP’, ‘COINBASE:WLUNA-BTC’, ‘COINBASE:UMA-BTC’, ‘COINBASE:WBTC-BTC’, ‘COINBASE:LPT-USD’, ‘COINBASE:DOT-EUR’, ‘COINBASE:PLA-USD’, ‘COINBASE:ETH-DAI’, ‘COINBASE:LTC-USD’, ‘COINBASE:BTC-USDC’, ‘COINBASE:SOL-EUR’, ‘COINBASE:FIL-EUR’, ‘COINBASE:DOT-USDT’, ‘COINBASE:FET-USD’, ‘COINBASE:AXS-USD’, ‘COINBASE:LRC-BTC’, ‘COINBASE:MANA-BTC’, ‘COINBASE:XYO-BTC’, ‘COINBASE:ATOM-BTC’, ‘COINBASE:MASK-EUR’, ‘COINBASE:REQ-USD’, ‘COINBASE:NU-BTC’, ‘COINBASE:PAX-USD’, ‘COINBASE:DDX-USD’, ‘COINBASE:SKL-BTC’, ‘COINBASE:RLC-USD’, ‘COINBASE:AXS-BTC’, ‘COINBASE:BAT-BTC’, ‘COINBASE:WLUNA-USDT’, ‘COINBASE:MANA-USD’, ‘COINBASE:RLY-USDT’, ‘COINBASE:FIL-USD’, ‘COINBASE:CLV-EUR’, ‘COINBASE:CTSI-BTC’, ‘COINBASE:XYO-USD’, ‘COINBASE:DOGE-GBP’, ‘COINBASE:MASK-USDT’, ‘COINBASE:DOGE-BTC’, ‘COINBASE:RAD-BTC’, ‘COINBASE:ZEN-USD’, ‘COINBASE:AAVE-EUR’, ‘COINBASE:IOTX-USD’, ‘COINBASE:BAT-EUR’, ‘COINBASE:CTSI-USD’, ‘COINBASE:NKN-BTC’, ‘COINBASE:REQ-BTC’, ‘COINBASE:ZEC-USD’, ‘COINBASE:COTI-USD’, ‘COINBASE:CLV-USDT’, ‘COINBASE:AVAX-USDT’, ‘COINBASE:ZEN-USDT’, ‘COINBASE:LINK-EUR’, ‘COINBASE:BNT-USD’, ‘COINBASE:AMP-USD’, ‘COINBASE:GRT-USD’, ‘COINBASE:GRT-EUR’, ‘COINBASE:ARPA-EUR’, ‘COINBASE:DOT-BTC’, ‘COINBASE:AAVE-USD’, ‘COINBASE:AXS-EUR’, ‘COINBASE:SUSHI-ETH’, ‘COINBASE:IOTX-BTC’, ‘COINBASE:REP-BTC’, ‘COINBASE:BAT-USD’, ‘COINBASE:CHZ-USDT’, ‘COINBASE:LINK-GBP’, ‘COINBASE:SOL-USD’, ‘COINBASE:EOS-BTC’, ‘COINBASE:XLM-BTC’, ‘COINBASE:ASM-USDT’, ‘COINBASE:BOND-USD’, ‘COINBASE:MIR-BTC’, ‘COINBASE:TRB-USD’, ‘COINBASE:RAD-EUR’, ‘COINBASE:ACH-USD’, ‘COINBASE:AUCTION-USDT’, ‘COINBASE:BTC-USDT’, ‘COINBASE:CRV-USD’, ‘COINBASE:ICP-EUR’, ‘COINBASE:ANKR-GBP’, ‘COINBASE:DASH-USD’, ‘COINBASE:AXS-USDT’, ‘COINBASE:BTC-EUR’, ‘COINBASE:NKN-GBP’, ‘COINBASE:CGLD-GBP’, ‘COINBASE:CRV-BTC’, ‘COINBASE:DNT-USDC’, ‘COINBASE:CGLD-EUR’, ‘COINBASE:ADA-ETH’, ‘COINBASE:BADGER-USD’, ‘COINBASE:WCFG-USD’, ‘COINBASE:ANKR-BTC’, ‘COINBASE:1INCH-GBP’, ‘COINBASE:GTC-USD’, ‘COINBASE:CGLD-BTC’, ‘COINBASE:SKL-USD’, ‘COINBASE:ENJ-USD’, ‘COINBASE:DOT-USD’, ‘COINBASE:SUSHI-EUR’, ‘COINBASE:CLV-USD’, ‘COINBASE:REQ-GBP’, ‘COINBASE:XTZ-EUR’, ‘COINBASE:SUSHI-BTC’, ‘COINBASE:MKR-USD’, ‘COINBASE:JASMY-USD’, ‘COINBASE:NU-EUR’, ‘COINBASE:MIR-GBP’, ‘COINBASE:ETC-BTC’, ‘COINBASE:ALGO-USD’, ‘COINBASE:DDX-USDT’, ‘COINBASE:SNX-GBP’, ‘COINBASE:XTZ-USD’, ‘COINBASE:SHIB-USD’, ‘COINBASE:OMG-BTC’, ‘COINBASE:RLY-GBP’, ‘COINBASE:PERP-EUR’, ‘COINBASE:USDC-EUR’, ‘COINBASE:ZRX-USD’, ‘COINBASE:WCFG-GBP’, ‘COINBASE:BAT-ETH’, ‘COINBASE:BTRST-USD’, ‘COINBASE:REQ-EUR’, ‘COINBASE:SUSHI-GBP’, ‘COINBASE:ETC-GBP’, ‘COINBASE:UMA-EUR’, ‘COINBASE:REN-USD’, ‘COINBASE:OXT-USD’, ‘COINBASE:WCFG-BTC’, ‘COINBASE:SOL-USDT’, ‘COINBASE:PERP-USD’, ‘COINBASE:LINK-ETH’, ‘COINBASE:CHZ-USD’, ‘COINBASE:SKL-GBP’, ‘COINBASE:BADGER-USDT’, ‘COINBASE:BNT-BTC’, ‘COINBASE:CVC-USDC’, ‘COINBASE:UST-USD’, ‘COINBASE:ETH-BTC’, ‘COINBASE:ASM-USD’, ‘COINBASE:UNI-BTC’, ‘COINBASE:DOT-GBP’, ‘COINBASE:BTC-USD’, ‘COINBASE:YFI-BTC’, ‘COINBASE:ETC-USD’, ‘COINBASE:LOOM-USDC’, ‘COINBASE:IOTX-USDT’, ‘COINBASE:ENJ-BTC’, ‘COINBASE:ARPA-USDT’, ‘COINBASE:SOL-GBP’, ‘COINBASE:FX-USD’, ‘COINBASE:WCFG-USDT’, ‘COINBASE:CRV-EUR’, ‘COINBASE:YFI-USD’, ‘COINBASE:SNX-BTC’, ‘COINBASE:MATIC-GBP’, ‘COINBASE:ALGO-EUR’, ‘COINBASE:BTC-GBP’, ‘COINBASE:MKR-BTC’, ‘COINBASE:ETH-USD’, ‘COINBASE:AGLD-USDT’, ‘COINBASE:USDT-USD’, ‘COINBASE:BADGER-EUR’, ‘COINBASE:ETH-USDT’, ‘COINBASE:NMR-USD’, ‘COINBASE:ETH-GBP’, ‘COINBASE:AVAX-EUR’, ‘COINBASE:ICP-USDT’, ‘COINBASE:MASK-USD’, ‘COINBASE:NMR-EUR’, ‘COINBASE:PAX-USDT’, ‘COINBASE:REQ-USDT’, ‘COINBASE:BTRST-EUR’, ‘COINBASE:MANA-ETH’, ‘COINBASE:LRC-USD’, ‘COINBASE:COMP-BTC’, ‘COINBASE:NMR-BTC’, ‘COINBASE:STORJ-BTC’, ‘COINBASE:MIR-EUR’, ‘COINBASE:REN-BTC’, ‘COINBASE:GNT-USDC’, ‘COINBASE:FORTH-USD’, ‘COINBASE:UST-EUR’, ‘COINBASE:UMA-GBP’, ‘COINBASE:UMA-USD’, ‘COINBASE:MANA-USDC’, ‘COINBASE:LINK-USD’, ‘COINBASE:BTRST-GBP’, ‘COINBASE:BCH-GBP’, ‘COINBASE:1INCH-USD’, ‘COINBASE:EOS-USD’, ‘COINBASE:DAI-USD’, ‘COINBASE:TRIBE-USD’, ‘COINBASE:RARI-USD’, ‘COINBASE:UNI-USD’, ‘COINBASE:OGN-USD’, ‘COINBASE:WBTC-USD’, ‘COINBASE:BAL-BTC’, ‘COINBASE:MATIC-USD’, ‘COINBASE:STORJ-USD’, ‘COINBASE:DOGE-EUR’, ‘COINBASE:FORTH-EUR’, ‘COINBASE:AUCTION-EUR’, ‘COINBASE:XYO-EUR’, ‘COINBASE:1INCH-BTC’, ‘COINBASE:OGN-BTC’, ‘COINBASE:ADA-BTC’, ‘COINBASE:FORTH-BTC’, ‘COINBASE:NU-GBP’, ‘COINBASE:RLY-USD’, ‘COINBASE:CRV-GBP’, ‘COINBASE:BNT-GBP’, ‘COINBASE:NKN-USD’, ‘COINBASE:ZEN-BTC’, ‘COINBASE:ANKR-USD’, ‘COINBASE:ICP-USD’, ‘COINBASE:BCH-EUR’, ‘COINBASE:DAI-USDC’, ‘COINBASE:RLY-EUR’, ‘COINBASE:BNT-EUR’, ‘COINBASE:NU-USD’, ‘COINBASE:TRU-USDT’, ‘COINBASE:ZRX-EUR’, ‘COINBASE:RAD-GBP’, ‘COINBASE:TRU-BTC’, ‘COINBASE:FIL-BTC’, ‘COINBASE:BAND-USD’, ‘COINBASE:ICP-BTC’, ‘COINBASE:BAT-USDC’, ‘COINBASE:MASK-GBP’, ‘COINBASE:SKL-EUR’, ‘COINBASE:BTRST-BTC’, ‘COINBASE:DOGE-USD’, ‘COINBASE:DOGE-USDT’, ‘COINBASE:NKN-EUR’, ‘COINBASE:NMR-GBP’, ‘COINBASE:CGLD-USD’, ‘COINBASE:KNC-USD’, ‘COINBASE:SUSHI-USD’, ‘COINBASE:SNX-USD’, ‘COINBASE:BTC-UST’, ‘COINBASE:POLY-USD’, ‘COINBASE:WCFG-EUR’, ‘COINBASE:WLUNA-EUR’, ‘COINBASE:FARM-USD’, ‘COINBASE:TRB-BTC’, ‘COINBASE:BAL-USD’, ‘COINBASE:TRU-EUR’, ‘COINBASE:UST-USDT’, ‘COINBASE:ALGO-GBP’, ‘COINBASE:PERP-USDT’, ‘COINBASE:ARPA-USD’, ‘COINBASE:AUCTION-USD’, ‘COINBASE:WLUNA-GBP’, ‘COINBASE:AAVE-BTC’, ‘COINBASE:DASH-BTC’, ‘COINBASE:OMG-USD’, ‘COINBASE:SHIB-USDT’, ‘COINBASE:LTC-EUR’, ‘COINBASE:BAND-GBP’, ‘COINBASE:OMG-EUR’, ‘COINBASE:RAI-USD’, ‘COINBASE:RAD-USD’, ‘COINBASE:ADA-USDC’, ‘COINBASE:MATIC-EUR’, ‘COINBASE:AAVE-GBP’, ‘COINBASE:BTRST-USDT’, ‘COINBASE:RLC-BTC’, ‘COINBASE:ETH-EUR’, ‘COINBASE:POLY-USDT’, ‘COINBASE:FORTH-GBP’, ‘COINBASE:XLM-EUR’, ‘COINBASE:GRT-BTC’, ‘COINBASE:ETH-USDC’, ‘COINBASE:USDT-GBP’, ‘COINBASE:XYO-USDT’, ‘COINBASE:XLM-USD’, ‘COINBASE:FET-USDT’, ‘COINBASE:ALGO-BTC’, ‘COINBASE:CHZ-GBP’, ‘COINBASE:KNC-BTC’, ‘COINBASE:AVAX-USD’, ‘COINBASE:ADA-GBP’, ‘COINBASE:LINK-BTC’, ‘COINBASE:TRU-USD’, ‘COINBASE:REP-USD’, ‘COINBASE:IOTX-EUR’, ‘COINBASE:ORN-BTC’, ‘COINBASE:SNX-EUR’, ‘COINBASE:SOL-BTC’, ‘COINBASE:ADA-EUR’, ‘COINBASE:BCH-BTC’, ‘COINBASE:XTZ-GBP’, ‘COINBASE:ETC-EUR’, ‘COINBASE:ATOM-USD’, ‘COINBASE:COMP-USD’]

BINANCE assets
[‘BINANCE:AVABUSD’, ‘BINANCE:SNXBNB’, ‘BINANCE:MATICGBP’, ‘BINANCE:GXSBTC’, ‘BINANCE:BTCBIDR’, ‘BINANCE:HOTBNB’, ‘BINANCE:EPSBUSD’, ‘BINANCE:STMXETH’, ‘BINANCE:BONDUSDT’, ‘BINANCE:YGGBNB’, ‘BINANCE:WRXBTC’, ‘BINANCE:PSGBUSD’, ‘BINANCE:YFIDOWNUSDT’, ‘BINANCE:KLAYBNB’, ‘BINANCE:GBPUSDT’, ‘BINANCE:AXSAUD’, ‘BINANCE:DEXEETH’, ‘BINANCE:SUPERBUSD’, ‘BINANCE:KSMBTC’, ‘BINANCE:FLOWBUSD’, ‘BINANCE:HIVEBUSD’, ‘BINANCE:WABIBNB’, ‘BINANCE:GNTETH’, ‘BINANCE:PROSETH’, ‘BINANCE:CKBUSDT’, ‘BINANCE:DGDBTC’, ‘BINANCE:NEBLETH’, ‘BINANCE:AEBNB’, ‘BINANCE:FLMBUSD’, ‘BINANCE:SCETH’, ‘BINANCE:ETHTUSD’, ‘BINANCE:ARBNB’, ‘BINANCE:MTLETH’, ‘BINANCE:IOTXBTC’, ‘BINANCE:RPXBTC’, ‘BINANCE:EOSBUSD’, ‘BINANCE:NUUSDT’, ‘BINANCE:BNTBUSD’, ‘BINANCE:RVNBTC’, ‘BINANCE:OXTBTC’, ‘BINANCE:STXBTC’, ‘BINANCE:BTCSTUSDT’, ‘BINANCE:BCPTPAX’, ‘BINANCE:PIVXETH’, ‘BINANCE:CELRBTC’, ‘BINANCE:QTUMETH’, ‘BINANCE:HBARUSDT’, ‘BINANCE:MTHETH’, ‘BINANCE:BUSDBRL’, ‘BINANCE:DYDXUSDT’, ‘BINANCE:FIDABUSD’, ‘BINANCE:CHESSBUSD’, ‘BINANCE:TUSDBTUSD’, ‘BINANCE:BKRWUSDT’, ‘BINANCE:EVXETH’, ‘BINANCE:STORMETH’, ‘BINANCE:SOLETH’, ‘BINANCE:ADXBUSD’, ‘BINANCE:BCHUSDT’, ‘BINANCE:AUTOUSDT’, ‘BINANCE:USDTBIDR’, ‘BINANCE:EOSUSDT’, ‘BINANCE:MATICBUSD’, ‘BINANCE:BEARUSDT’, ‘BINANCE:COMPBNB’, ‘BINANCE:XRPDOWNUSDT’, ‘BINANCE:DREPUSDT’, ‘BINANCE:WINUSDT’, ‘BINANCE:CHESSBTC’, ‘BINANCE:SOLBIDR’, ‘BINANCE:BCHDOWNUSDT’, ‘BINANCE:TRXETH’, ‘BINANCE:KMDETH’, ‘BINANCE:XECUSDT’, ‘BINANCE:BARBUSD’, ‘BINANCE:FTTUSDT’, ‘BINANCE:AXSBRL’, ‘BINANCE:AVAXAUD’, ‘BINANCE:HARDBNB’, ‘BINANCE:MATICRUB’, ‘BINANCE:MANABUSD’, ‘BINANCE:IRISBTC’, ‘BINANCE:FILBTC’, ‘BINANCE:CREAMBUSD’, ‘BINANCE:HCBTC’, ‘BINANCE:AUCTIONBTC’, ‘BINANCE:BNBBULLUSDT’, ‘BINANCE:GRSETH’, ‘BINANCE:XRPUSDT’, ‘BINANCE:MITHBTC’, ‘BINANCE:BIFIBNB’, ‘BINANCE:BTCSTBUSD’, ‘BINANCE:STORJUSDT’, ‘BINANCE:BEAMBTC’, ‘BINANCE:BTCUAH’, ‘BINANCE:LTCBTC’, ‘BINANCE:DIABTC’, ‘BINANCE:XVSUSDT’, ‘BINANCE:HARDUSDT’, ‘BINANCE:KEYETH’, ‘BINANCE:FARMBNB’, ‘BINANCE:OMGBTC’, ‘BINANCE:TVKUSDT’, ‘BINANCE:SNXBTC’, ‘BINANCE:NUBNB’, ‘BINANCE:NANOBNB’, ‘BINANCE:UMABTC’, ‘BINANCE:AUDBUSD’, ‘BINANCE:LINABTC’, ‘BINANCE:CTXCBTC’, ‘BINANCE:BNBDAI’, ‘BINANCE:TKOBIDR’, ‘BINANCE:WRXBUSD’, ‘BINANCE:BTCSTBTC’, ‘BINANCE:LTOBUSD’, ‘BINANCE:SRMBIDR’, ‘BINANCE:LINAUSDT’, ‘BINANCE:BAKEUSDT’, ‘BINANCE:PAXGBNB’, ‘BINANCE:LENDUSDT’, ‘BINANCE:XMRETH’, ‘BINANCE:CTKUSDT’, ‘BINANCE:C98BUSD’, ‘BINANCE:EOSEUR’, ‘BINANCE:SUNBUSD’, ‘BINANCE:MASKBUSD’, ‘BINANCE:HOTETH’, ‘BINANCE:DOGETRY’, ‘BINANCE:SRMBNB’, ‘BINANCE:UTKBUSD’, ‘BINANCE:TRIBEBUSD’, ‘BINANCE:GNOBTC’, ‘BINANCE:SOLUSDC’, ‘BINANCE:SOLAUD’, ‘BINANCE:LTCETH’, ‘BINANCE:NEOBTC’, ‘BINANCE:VGXETH’, ‘BINANCE:HBARBNB’, ‘BINANCE:CNDBTC’, ‘BINANCE:CHATETH’, ‘BINANCE:ETHGBP’, ‘BINANCE:DOCKBTC’, ‘BINANCE:BTCZAR’, ‘BINANCE:DIAUSDT’, ‘BINANCE:ZECBNB’, ‘BINANCE:FTTBUSD’, ‘BINANCE:MINABNB’, ‘BINANCE:OMGUSDT’, ‘BINANCE:TRXXRP’, ‘BINANCE:EOSTRY’, ‘BINANCE:AGIXBTC’, ‘BINANCE:1INCHBTC’, ‘BINANCE:DEGOBUSD’, ‘BINANCE:TRIGETH’, ‘BINANCE:BTCGYEN’, ‘BINANCE:SALTETH’, ‘BINANCE:LSKBUSD’, ‘BINANCE:ONEUSDT’, ‘BINANCE:JSTBNB’, ‘BINANCE:VENETH’, ‘BINANCE:NEOUSDT’, ‘BINANCE:USDTBKRW’, ‘BINANCE:DOTNGN’, ‘BINANCE:REQETH’, ‘BINANCE:CAKEGBP’, ‘BINANCE:PHXBTC’, ‘BINANCE:YFIBUSD’, ‘BINANCE:WAVESBUSD’, ‘BINANCE:ELFBTC’, ‘BINANCE:DOGEGBP’, ‘BINANCE:TRIBEUSDT’, ‘BINANCE:TRXDOWNUSDT’, ‘BINANCE:XLMBTC’, ‘BINANCE:USDTRUB’, ‘BINANCE:BCHTUSD’, ‘BINANCE:SUPERUSDT’, ‘BINANCE:COMPBUSD’, ‘BINANCE:IOSTUSDT’, ‘BINANCE:NANOBTC’, ‘BINANCE:SANDBNB’, ‘BINANCE:ETHUPUSDT’, ‘BINANCE:REEFBUSD’, ‘BINANCE:DCRBNB’, ‘BINANCE:CELOBTC’, ‘BINANCE:DREPBTC’, ‘BINANCE:BUSDVAI’, ‘BINANCE:OGNBTC’, ‘BINANCE:NUBUSD’, ‘BINANCE:STPTBNB’, ‘BINANCE:CELRUSDT’, ‘BINANCE:MBLUSDT’, ‘BINANCE:MODBTC’, ‘BINANCE:KSMBUSD’, ‘BINANCE:DNTBTC’, ‘BINANCE:MATICAUD’, ‘BINANCE:BTTUSDC’, ‘BINANCE:BTTTRY’, ‘BINANCE:WINGSETH’, ‘BINANCE:NEARUSDT’, ‘BINANCE:ARDRBTC’, ‘BINANCE:RENBUSD’, ‘BINANCE:TUSDBNB’, ‘BINANCE:WINTRX’, ‘BINANCE:WINGBUSD’, ‘BINANCE:WAXPBUSD’, ‘BINANCE:VITEBNB’, ‘BINANCE:SNMETH’, ‘BINANCE:POLYBTC’, ‘BINANCE:DATAUSDT’, ‘BINANCE:XRPBIDR’, ‘BINANCE:KLAYBUSD’, ‘BINANCE:USDTUAH’, ‘BINANCE:IOTABTC’, ‘BINANCE:ILVUSDT’, ‘BINANCE:FIROBTC’, ‘BINANCE:POABNB’, ‘BINANCE:BCHSVUSDC’, ‘BINANCE:MFTBTC’, ‘BINANCE:ATABTC’, ‘BINANCE:PAXBTC’, ‘BINANCE:PPTETH’, ‘BINANCE:MANAETH’, ‘BINANCE:OMGBUSD’, ‘BINANCE:BTTTRX’, ‘BINANCE:ETHEUR’, ‘BINANCE:DOTBRL’, ‘BINANCE:1INCHUSDT’, ‘BINANCE:MDXUSDT’, ‘BINANCE:AMBBNB’, ‘BINANCE:THETABUSD’, ‘BINANCE:ETHTRY’, ‘BINANCE:STORJBTC’, ‘BINANCE:CVCBTC’, ‘BINANCE:BTCIDRT’, ‘BINANCE:GVTBTC’, ‘BINANCE:SKYBTC’, ‘BINANCE:ONGBTC’, ‘BINANCE:RAYBNB’, ‘BINANCE:CDTETH’, ‘BINANCE:ADATUSD’, ‘BINANCE:AGIETH’, ‘BINANCE:LUNBTC’, ‘BINANCE:BNBUSDT’, ‘BINANCE:ATOMPAX’, ‘BINANCE:DNTUSDT’, ‘BINANCE:BTSBTC’, ‘BINANCE:NKNUSDT’, ‘BINANCE:BETABTC’, ‘BINANCE:TRIBEBNB’, ‘BINANCE:MINABUSD’, ‘BINANCE:QNTBNB’, ‘BINANCE:PHBPAX’, ‘BINANCE:SOLBTC’, ‘BINANCE:EDOETH’, ‘BINANCE:XRPBULLUSDT’, ‘BINANCE:BARUSDT’, ‘BINANCE:SNTETH’, ‘BINANCE:FIROETH’, ‘BINANCE:FETBTC’, ‘BINANCE:POLYBUSD’, ‘BINANCE:WAVESUSDT’, ‘BINANCE:QSPETH’, ‘BINANCE:IOSTBTC’, ‘BINANCE:CRVBNB’, ‘BINANCE:ZENBNB’, ‘BINANCE:WINBRL’, ‘BINANCE:WAVESETH’, ‘BINANCE:FETUSDT’, ‘BINANCE:FLMBNB’, ‘BINANCE:BTTTUSD’, ‘BINANCE:IOTXUSDT’, ‘BINANCE:MANAUSDT’, ‘BINANCE:HSRBTC’, ‘BINANCE:FISBTC’, ‘BINANCE:AGIBTC’, ‘BINANCE:SUNUSDT’, ‘BINANCE:VIBEETH’, ‘BINANCE:LRCBUSD’, ‘BINANCE:XVGETH’, ‘BINANCE:POABTC’, ‘BINANCE:BNTBTC’, ‘BINANCE:ALICEBTC’, ‘BINANCE:RSRBTC’, ‘BINANCE:ASTBTC’, ‘BINANCE:LOOMETH’, ‘BINANCE:MODETH’, ‘BINANCE:BRDBTC’, ‘BINANCE:RDNETH’, ‘BINANCE:DOTAUD’, ‘BINANCE:DCRBTC’, ‘BINANCE:YOYOETH’, ‘BINANCE:ZILBNB’, ‘BINANCE:WAVESUSDC’, ‘BINANCE:EVXBTC’, ‘BINANCE:GTCUSDT’, ‘BINANCE:BCHSVTUSD’, ‘BINANCE:BTCGBP’, ‘BINANCE:DEXEBUSD’, ‘BINANCE:GNOBUSD’, ‘BINANCE:BRDETH’, ‘BINANCE:WINGBNB’, ‘BINANCE:VTHOBUSD’, ‘BINANCE:USDPUSDT’, ‘BINANCE:XLMBNB’, ‘BINANCE:HIVEBTC’, ‘BINANCE:TCTUSDT’, ‘BINANCE:ZRXBUSD’, ‘BINANCE:TRXUPUSDT’, ‘BINANCE:CELOUSDT’, ‘BINANCE:BTTBTC’, ‘BINANCE:XTZDOWNUSDT’, ‘BINANCE:IOTXBUSD’, ‘BINANCE:NEOUSDC’, ‘BINANCE:CAKEAUD’, ‘BINANCE:DUSKUSDT’, ‘BINANCE:SUBETH’, ‘BINANCE:BTCUSDC’, ‘BINANCE:BTCBUSD’, ‘BINANCE:MATICBTC’, ‘BINANCE:PHAUSDT’, ‘BINANCE:MFTETH’, ‘BINANCE:QUICKBNB’, ‘BINANCE:DOTBKRW’, ‘BINANCE:BCPTETH’, ‘BINANCE:DCRUSDT’, ‘BINANCE:AGLDBUSD’, ‘BINANCE:MCOETH’, ‘BINANCE:CHZUSDT’, ‘BINANCE:TVKBUSD’, ‘BINANCE:NASBNB’, ‘BINANCE:DOTDOWNUSDT’, ‘BINANCE:BTCDOWNUSDT’, ‘BINANCE:LTCEUR’, ‘BINANCE:DUSKBNB’, ‘BINANCE:FLOWUSDT’, ‘BINANCE:GVTETH’, ‘BINANCE:LINKUSDC’, ‘BINANCE:ETCUSDT’, ‘BINANCE:ENJBTC’, ‘BINANCE:ALPHAUSDT’, ‘BINANCE:RADBNB’, ‘BINANCE:LENDBUSD’, ‘BINANCE:ENJETH’, ‘BINANCE:TORNUSDT’, ‘BINANCE:MDXBNB’, ‘BINANCE:FUELBTC’, ‘BINANCE:TRXNGN’, ‘BINANCE:PHXBNB’, ‘BINANCE:FTTBNB’, ‘BINANCE:FIDAUSDT’, ‘BINANCE:ICXUSDT’, ‘BINANCE:TOMOUSDT’, ‘BINANCE:INSETH’, ‘BINANCE:TLMBTC’, ‘BINANCE:MBOXBUSD’, ‘BINANCE:XLMPAX’, ‘BINANCE:TLMBUSD’, ‘BINANCE:WAXPBTC’, ‘BINANCE:MKRUSDT’, ‘BINANCE:SLPUSDT’, ‘BINANCE:ARPABNB’, ‘BINANCE:VTHOUSDT’, ‘BINANCE:LINKETH’, ‘BINANCE:PUNDIXUSDT’, ‘BINANCE:WBTCBTC’, ‘BINANCE:YFIUSDT’, ‘BINANCE:COSBTC’, ‘BINANCE:ALGOUSDC’, ‘BINANCE:POWRETH’, ‘BINANCE:ZECBUSD’, ‘BINANCE:PAXETH’, ‘BINANCE:IOSTBNB’, ‘BINANCE:TRIGBNB’, ‘BINANCE:BTSUSDT’, ‘BINANCE:LSKBNB’, ‘BINANCE:RAMPUSDT’, ‘BINANCE:LINKBRL’, ‘BINANCE:XRPBULLBUSD’, ‘BINANCE:NAVETH’, ‘BINANCE:FILUPUSDT’, ‘BINANCE:DLTBNB’, ‘BINANCE:ERNBNB’, ‘BINANCE:HOTTRY’, ‘BINANCE:APPCBNB’, ‘BINANCE:NEOTRY’, ‘BINANCE:BGBPUSDC’, ‘BINANCE:ATMUSDT’, ‘BINANCE:CMTBNB’, ‘BINANCE:FORTHBTC’, ‘BINANCE:CTSIBUSD’, ‘BINANCE:ANKRUSDT’, ‘BINANCE:DGBBNB’, ‘BINANCE:SHIBUSDT’, ‘BINANCE:ETCBNB’, ‘BINANCE:PAXGBTC’, ‘BINANCE:CHRUSDT’, ‘BINANCE:POLSUSDT’, ‘BINANCE:AAVEDOWNUSDT’, ‘BINANCE:ADAAUD’, ‘BINANCE:BCHEUR’, ‘BINANCE:NPXSUSDT’, ‘BINANCE:QLCBNB’, ‘BINANCE:GASBTC’, ‘BINANCE:TLMTRY’, ‘BINANCE:LINKTUSD’, ‘BINANCE:MATICBNB’, ‘BINANCE:RVNUSDT’, ‘BINANCE:DOTBUSD’, ‘BINANCE:RUNEGBP’, ‘BINANCE:BLZBTC’, ‘BINANCE:IDEXBTC’, ‘BINANCE:RVNBNB’, ‘BINANCE:BTCEUR’, ‘BINANCE:PHABTC’, ‘BINANCE:STORMBTC’, ‘BINANCE:BNBBEARBUSD’, ‘BINANCE:BTCDAI’, ‘BINANCE:XLMETH’, ‘BINANCE:STPTBUSD’, ‘BINANCE:ZECUSDC’, ‘BINANCE:C98USDT’, ‘BINANCE:RENBTCBTC’, ‘BINANCE:THETABNB’, ‘BINANCE:OMBTC’, ‘BINANCE:THETAETH’, ‘BINANCE:GNOUSDT’, ‘BINANCE:MIRBUSD’, ‘BINANCE:NMRBUSD’, ‘BINANCE:FETBNB’, ‘BINANCE:CVCETH’, ‘BINANCE:BUSDDAI’, ‘BINANCE:SLPBUSD’, ‘BINANCE:SYSUSDT’, ‘BINANCE:MLNBTC’, ‘BINANCE:TROYUSDT’, ‘BINANCE:ENJEUR’, ‘BINANCE:USDSUSDT’, ‘BINANCE:CFXBTC’, ‘BINANCE:MATICUSDT’, ‘BINANCE:ANKRUSDC’, ‘BINANCE:TKOBUSD’, ‘BINANCE:ELFBUSD’, ‘BINANCE:POLSBNB’, ‘BINANCE:ACMUSDT’, ‘BINANCE:OSTBNB’, ‘BINANCE:SKLUSDT’, ‘BINANCE:ALPHABUSD’, ‘BINANCE:XZCXRP’, ‘BINANCE:DOGEBTC’, ‘BINANCE:USDSUSDC’, ‘BINANCE:BZRXBNB’, ‘BINANCE:XZCETH’, ‘BINANCE:BURGERBNB’, ‘BINANCE:GNTBNB’, ‘BINANCE:GRTTRY’, ‘BINANCE:GTOUSDT’, ‘BINANCE:SHIBRUB’, ‘BINANCE:NULSETH’, ‘BINANCE:SSVBTC’, ‘BINANCE:SXPUPUSDT’, ‘BINANCE:PHABUSD’, ‘BINANCE:ETHBUSD’, ‘BINANCE:SANDBUSD’, ‘BINANCE:TUSDBUSD’, ‘BINANCE:BZRXBUSD’, ‘BINANCE:BNBRUB’, ‘BINANCE:QSPBNB’, ‘BINANCE:HOTUSDT’, ‘BINANCE:VENUSDT’, ‘BINANCE:SUSDBTC’, ‘BINANCE:WNXMUSDT’, ‘BINANCE:DOCKUSDT’, ‘BINANCE:FILUSDT’, ‘BINANCE:ZILBTC’, ‘BINANCE:ANKRBNB’, ‘BINANCE:LINKTRY’, ‘BINANCE:KNCETH’, ‘BINANCE:WINGSBTC’, ‘BINANCE:KEEPBUSD’, ‘BINANCE:BNTETH’, ‘BINANCE:FIOBNB’, ‘BINANCE:PUNDIXETH’, ‘BINANCE:NEOTUSD’, ‘BINANCE:OCEANBUSD’, ‘BINANCE:DOGEBIDR’, ‘BINANCE:MASKUSDT’, ‘BINANCE:STRATBNB’, ‘BINANCE:KSMUSDT’, ‘BINANCE:XEMETH’, ‘BINANCE:SYSBUSD’, ‘BINANCE:AXSBTC’, ‘BINANCE:XRPUSDC’, ‘BINANCE:KNCBUSD’, ‘BINANCE:ZILUSDT’, ‘BINANCE:ERDBTC’, ‘BINANCE:HARDBUSD’, ‘BINANCE:SKLBUSD’, ‘BINANCE:ICPEUR’, ‘BINANCE:ETHBULLBUSD’, ‘BINANCE:MBLBTC’, ‘BINANCE:BCHUPUSDT’, ‘BINANCE:ALPACAUSDT’, ‘BINANCE:FARMBUSD’, ‘BINANCE:SOLGBP’, ‘BINANCE:XVSBNB’, ‘BINANCE:RUNEUSDT’, ‘BINANCE:LRCUSDT’, ‘BINANCE:DATAETH’, ‘BINANCE:DOGEEUR’, ‘BINANCE:SXPDOWNUSDT’, ‘BINANCE:PAXBUSD’, ‘BINANCE:EOSBULLBUSD’, ‘BINANCE:KAVABNB’, ‘BINANCE:XEMBUSD’, ‘BINANCE:BNBUSDP’, ‘BINANCE:WAXPBNB’, ‘BINANCE:TRBBTC’, ‘BINANCE:FIOUSDT’, ‘BINANCE:ETHBKRW’, ‘BINANCE:FTMBIDR’, ‘BINANCE:BZRXUSDT’, ‘BINANCE:FIOBUSD’, ‘BINANCE:XLMTUSD’, ‘BINANCE:RADUSDT’, ‘BINANCE:DOGEPAX’, ‘BINANCE:BNBPAX’, ‘BINANCE:C98BRL’, ‘BINANCE:SRMBTC’, ‘BINANCE:FLMUSDT’, ‘BINANCE:FORBUSD’, ‘BINANCE:SFPBUSD’, ‘BINANCE:SUPERBTC’, ‘BINANCE:FRONTUSDT’, ‘BINANCE:MDABTC’, ‘BINANCE:OSTBTC’, ‘BINANCE:EGLDBUSD’, ‘BINANCE:ARPABUSD’, ‘BINANCE:XRPUPUSDT’, ‘BINANCE:GHSTETH’, ‘BINANCE:ANTBNB’, ‘BINANCE:YFIBTC’, ‘BINANCE:MDXBTC’, ‘BINANCE:EOSTUSD’, ‘BINANCE:KSMAUD’, ‘BINANCE:ETHBIDR’, ‘BINANCE:ONGUSDT’, ‘BINANCE:OMUSDT’, ‘BINANCE:RLCBUSD’, ‘BINANCE:MLNBUSD’, ‘BINANCE:DOGERUB’, ‘BINANCE:LENDBTC’, ‘BINANCE:PHXETH’, ‘BINANCE:MASKBNB’, ‘BINANCE:MTLBUSD’, ‘BINANCE:EOSBEARBUSD’, ‘BINANCE:REPBTC’, ‘BINANCE:GLMBTC’, ‘BINANCE:TORNBUSD’, ‘BINANCE:BTCUSDP’, ‘BINANCE:BATPAX’, ‘BINANCE:RVNTRY’, ‘BINANCE:NEOBNB’, ‘BINANCE:KAVABUSD’, ‘BINANCE:PONDBUSD’, ‘BINANCE:SUSHIDOWNUSDT’, ‘BINANCE:STMXBUSD’, ‘BINANCE:XRPBKRW’, ‘BINANCE:LTOBTC’, ‘BINANCE:BTCUSDT’, ‘BINANCE:NEARBTC’, ‘BINANCE:BCHPAX’, ‘BINANCE:TRXTRY’, ‘BINANCE:ADXBTC’, ‘BINANCE:RUNEBTC’, ‘BINANCE:TRXAUD’, ‘BINANCE:ETHUSDP’, ‘BINANCE:QTUMUSDT’, ‘BINANCE:ZILETH’, ‘BINANCE:SOLBUSD’, ‘BINANCE:SHIBBUSD’, ‘BINANCE:VGXBTC’, ‘BINANCE:FIOBTC’, ‘BINANCE:EPSUSDT’, ‘BINANCE:ZECPAX’, ‘BINANCE:WINGUSDT’, ‘BINANCE:BNBETH’, ‘BINANCE:DENTETH’, ‘BINANCE:FUNBTC’, ‘BINANCE:QTUMBNB’, ‘BINANCE:ATOMBNB’, ‘BINANCE:WAVESTUSD’, ‘BINANCE:ALICEBIDR’, ‘BINANCE:DNTBUSD’, ‘BINANCE:ETCGBP’, ‘BINANCE:XEMBNB’, ‘BINANCE:AXSBIDR’, ‘BINANCE:USDSPAX’, ‘BINANCE:TNBETH’, ‘BINANCE:ASTETH’, ‘BINANCE:TRXPAX’, ‘BINANCE:RADBUSD’, ‘BINANCE:PSGUSDT’, ‘BINANCE:ATAUSDT’, ‘BINANCE:BUSDBIDR’, ‘BINANCE:APPCBTC’, ‘BINANCE:BCHABCUSDT’, ‘BINANCE:LTCUSDT’, ‘BINANCE:BANDBUSD’, ‘BINANCE:LTCNGN’, ‘BINANCE:GRTEUR’, ‘BINANCE:MKRBTC’, ‘BINANCE:SUBBTC’, ‘BINANCE:UNIEUR’, ‘BINANCE:FARMBTC’, ‘BINANCE:BATBNB’, ‘BINANCE:TOMOBUSD’, ‘BINANCE:OGUSDT’, ‘BINANCE:EPSBTC’, ‘BINANCE:BTCTUSD’, ‘BINANCE:BNBDOWNUSDT’, ‘BINANCE:CHESSBNB’, ‘BINANCE:EGLDBNB’, ‘BINANCE:CHRBNB’, ‘BINANCE:TLMUSDT’, ‘BINANCE:STORMBNB’, ‘BINANCE:DLTBTC’, ‘BINANCE:DEGOBTC’, ‘BINANCE:USDCBNB’, ‘BINANCE:AUCTIONBUSD’, ‘BINANCE:LTOBNB’, ‘BINANCE:FUNUSDT’, ‘BINANCE:ADAUSDC’, ‘BINANCE:WNXMBUSD’, ‘BINANCE:VTHOBNB’, ‘BINANCE:MANABTC’, ‘BINANCE:DOTBTC’, ‘BINANCE:ARDRUSDT’, ‘BINANCE:GALABNB’, ‘BINANCE:SOLBRL’, ‘BINANCE:OGNBNB’, ‘BINANCE:ALGOTUSD’, ‘BINANCE:ENGBTC’, ‘BINANCE:TROYBUSD’, ‘BINANCE:DGBBUSD’, ‘BINANCE:BTGBTC’, ‘BINANCE:PROMBTC’, ‘BINANCE:VETEUR’, ‘BINANCE:IOSTETH’, ‘BINANCE:ADABTC’, ‘BINANCE:SHIBBRL’, ‘BINANCE:GTOBNB’, ‘BINANCE:DATABUSD’, ‘BINANCE:XLMDOWNUSDT’, ‘BINANCE:ARPARUB’, ‘BINANCE:IQBUSD’, ‘BINANCE:WTCBNB’, ‘BINANCE:ETHUAH’, ‘BINANCE:IOTABUSD’, ‘BINANCE:CAKEUSDT’, ‘BINANCE:BATUSDT’, ‘BINANCE:AAVEBNB’, ‘BINANCE:LINKNGN’, ‘BINANCE:CKBBUSD’, ‘BINANCE:ATOMBTC’, ‘BINANCE:CTXCBNB’, ‘BINANCE:ICPUSDT’, ‘BINANCE:TOMOBTC’, ‘BINANCE:WAVESBTC’, ‘BINANCE:PERLBNB’, ‘BINANCE:RDNBTC’, ‘BINANCE:RCNBTC’, ‘BINANCE:HOTEUR’, ‘BINANCE:ZILBUSD’, ‘BINANCE:GRTBUSD’, ‘BINANCE:EDOBTC’, ‘BINANCE:MFTBNB’, ‘BINANCE:MKRBNB’, ‘BINANCE:BUSDZAR’, ‘BINANCE:BCHABCPAX’, ‘BINANCE:DOGEBNB’, ‘BINANCE:BUSDRUB’, ‘BINANCE:BCPTUSDC’, ‘BINANCE:ALPACABNB’, ‘BINANCE:NKNBTC’, ‘BINANCE:SUSDETH’, ‘BINANCE:ATOMTUSD’, ‘BINANCE:BATETH’, ‘BINANCE:ETHUSDC’, ‘BINANCE:CRVBTC’, ‘BINANCE:BNBIDRT’, ‘BINANCE:NMRBTC’, ‘BINANCE:GOBNB’, ‘BINANCE:VIDTUSDT’, ‘BINANCE:WINGBTC’, ‘BINANCE:ATMBTC’, ‘BINANCE:DAIBUSD’, ‘BINANCE:LUNETH’, ‘BINANCE:ETHDAI’, ‘BINANCE:TRXUSDC’, ‘BINANCE:FILDOWNUSDT’, ‘BINANCE:BNBUAH’, ‘BINANCE:FTMBTC’, ‘BINANCE:FTMTUSD’, ‘BINANCE:BNBBRL’, ‘BINANCE:CLOAKBTC’, ‘BINANCE:CRVBUSD’, ‘BINANCE:SXPBIDR’, ‘BINANCE:REPBUSD’, ‘BINANCE:DYDXBTC’, ‘BINANCE:XRPETH’, ‘BINANCE:PPTBTC’, ‘BINANCE:STMXBTC’, ‘BINANCE:OMGETH’, ‘BINANCE:TRBBNB’, ‘BINANCE:CHATBTC’, ‘BINANCE:ETCPAX’, ‘BINANCE:BALUSDT’, ‘BINANCE:NASBTC’, ‘BINANCE:HNTUSDT’, ‘BINANCE:EOSPAX’, ‘BINANCE:ETHNGN’, ‘BINANCE:BTTEUR’, ‘BINANCE:SXPAUD’, ‘BINANCE:SNXBUSD’, ‘BINANCE:CHZBUSD’, ‘BINANCE:DOTBIDR’, ‘BINANCE:BIFIBUSD’, ‘BINANCE:DODOBUSD’, ‘BINANCE:GRSBTC’, ‘BINANCE:BTSBUSD’, ‘BINANCE:DGBBTC’, ‘BINANCE:SWRVBUSD’, ‘BINANCE:BATBTC’, ‘BINANCE:CFXUSDT’, ‘BINANCE:CAKEBNB’, ‘BINANCE:DASHETH’, ‘BINANCE:SRMUSDT’, ‘BINANCE:TRXBUSD’, ‘BINANCE:APPCETH’, ‘BINANCE:SXPTRY’, ‘BINANCE:NASETH’, ‘BINANCE:LINKBKRW’, ‘BINANCE:REPUSDT’, ‘BINANCE:TWTUSDT’, ‘BINANCE:POLSBUSD’, ‘BINANCE:STRATUSDT’, ‘BINANCE:TRUUSDT’, ‘BINANCE:WTCUSDT’, ‘BINANCE:ALGOBUSD’, ‘BINANCE:BONDBNB’, ‘BINANCE:SOLUSDT’, ‘BINANCE:MTHBTC’, ‘BINANCE:KNCBTC’, ‘BINANCE:LRCBTC’, ‘BINANCE:XZCBTC’, ‘BINANCE:INJBNB’, ‘BINANCE:NANOETH’, ‘BINANCE:ADAGBP’, ‘BINANCE:KAVABTC’, ‘BINANCE:DOTUPUSDT’, ‘BINANCE:DAIBNB’, ‘BINANCE:ONTPAX’, ‘BINANCE:CHZBNB’, ‘BINANCE:AIONBNB’, ‘BINANCE:KMDBUSD’, ‘BINANCE:PIVXBNB’, ‘BINANCE:ARDRBNB’, ‘BINANCE:SXPEUR’, ‘BINANCE:CTSIBTC’, ‘BINANCE:DAIUSDT’, ‘BINANCE:SHIBTRY’, ‘BINANCE:BCHBNB’, ‘BINANCE:DOTUSDT’, ‘BINANCE:SUSHIBNB’, ‘BINANCE:CAKEBUSD’, ‘BINANCE:AGLDBNB’, ‘BINANCE:ONETUSD’, ‘BINANCE:SOLEUR’, ‘BINANCE:ERDBNB’, ‘BINANCE:CMTETH’, ‘BINANCE:LTCPAX’, ‘BINANCE:CTKBUSD’, ‘BINANCE:MCOBTC’, ‘BINANCE:BCHUSDC’, ‘BINANCE:STEEMBNB’, ‘BINANCE:MITHUSDT’, ‘BINANCE:LUNAEUR’, ‘BINANCE:XRPBUSD’, ‘BINANCE:ASRUSDT’, ‘BINANCE:CVPBUSD’, ‘BINANCE:DOGEBRL’, ‘BINANCE:KMDBTC’, ‘BINANCE:BANDBTC’, ‘BINANCE:EOSBULLUSDT’, ‘BINANCE:XMRBNB’, ‘BINANCE:DIABUSD’, ‘BINANCE:LTCRUB’, ‘BINANCE:AVAXUSDT’, ‘BINANCE:ADARUB’, ‘BINANCE:LUNAAUD’, ‘BINANCE:EOSBNB’, ‘BINANCE:FRONTBTC’, ‘BINANCE:DOTRUB’, ‘BINANCE:ETHBULLUSDT’, ‘BINANCE:MBOXBTC’, ‘BINANCE:STRAXBTC’, ‘BINANCE:SUSHIUSDT’, ‘BINANCE:ENJBNB’, ‘BINANCE:BTSETH’, ‘BINANCE:KEEPBNB’, ‘BINANCE:AUTOBUSD’, ‘BINANCE:XVGBUSD’, ‘BINANCE:UNIUSDT’, ‘BINANCE:QLCBTC’, ‘BINANCE:NCASHETH’, ‘BINANCE:BELBUSD’, ‘BINANCE:SKYBNB’, ‘BINANCE:NEARBUSD’, ‘BINANCE:CMTBTC’, ‘BINANCE:DOCKETH’, ‘BINANCE:TFUELUSDT’, ‘BINANCE:YGGBUSD’, ‘BINANCE:UNIUPUSDT’, ‘BINANCE:TRXUSDT’, ‘BINANCE:ALICEBUSD’, ‘BINANCE:FLMBTC’, ‘BINANCE:EOSAUD’, ‘BINANCE:AIONBTC’, ‘BINANCE:AUTOBTC’, ‘BINANCE:ETHBRL’, ‘BINANCE:YFIUPUSDT’, ‘BINANCE:ICNETH’, ‘BINANCE:MDTBTC’, ‘BINANCE:FETBUSD’, ‘BINANCE:ETCEUR’, ‘BINANCE:SXPGBP’, ‘BINANCE:QLCETH’, ‘BINANCE:NEOBUSD’, ‘BINANCE:SALTBTC’, ‘BINANCE:KSMBNB’, ‘BINANCE:ARPATRY’, ‘BINANCE:ADAUSDT’, ‘BINANCE:AEETH’, ‘BINANCE:EOSUPUSDT’, ‘BINANCE:ONEBUSD’, ‘BINANCE:DOGEUSDT’, ‘BINANCE:VETGBP’, ‘BINANCE:LUNAUSDT’, ‘BINANCE:STMXBNB’, ‘BINANCE:MFTUSDT’, ‘BINANCE:OAXBTC’, ‘BINANCE:FTMBNB’, ‘BINANCE:COTIBUSD’, ‘BINANCE:NULSBNB’, ‘BINANCE:BCNBNB’, ‘BINANCE:OGBTC’, ‘BINANCE:TRXTUSD’, ‘BINANCE:GRTETH’, ‘BINANCE:MLNBNB’, ‘BINANCE:TRUBUSD’, ‘BINANCE:WTCETH’, ‘BINANCE:BURGERUSDT’, ‘BINANCE:SPARTABNB’, ‘BINANCE:LUNABTC’, ‘BINANCE:CREAMBNB’, ‘BINANCE:XRPNGN’, ‘BINANCE:XMRUSDT’, ‘BINANCE:HEGICETH’, ‘BINANCE:BULLBUSD’, ‘BINANCE:LTCBNB’, ‘BINANCE:DATABTC’, ‘BINANCE:PHBUSDC’, ‘BINANCE:BATBUSD’, ‘BINANCE:JSTBUSD’, ‘BINANCE:CVCBNB’, ‘BINANCE:LITBTC’, ‘BINANCE:ONEPAX’, ‘BINANCE:BNBTUSD’, ‘BINANCE:NANOUSDT’, ‘BINANCE:RADBTC’, ‘BINANCE:EURBUSD’, ‘BINANCE:XLMUSDC’, ‘BINANCE:ONEUSDC’, ‘BINANCE:KLAYBTC’, ‘BINANCE:TRURUB’, ‘BINANCE:DOGEBUSD’, ‘BINANCE:ERDUSDT’, ‘BINANCE:STRAXETH’, ‘BINANCE:LPTBUSD’, ‘BINANCE:LTCDOWNUSDT’, ‘BINANCE:ATOMUSDC’, ‘BINANCE:MCOUSDT’, ‘BINANCE:FTMPAX’, ‘BINANCE:ALGOBTC’, ‘BINANCE:BUSDBVND’, ‘BINANCE:LTCBUSD’, ‘BINANCE:ONTUSDC’, ‘BINANCE:BQXETH’, ‘BINANCE:ZECBTC’, ‘BINANCE:BNBGBP’, ‘BINANCE:INJBUSD’, ‘BINANCE:UNFIBTC’, ‘BINANCE:CLOAKETH’, ‘BINANCE:WPRBTC’, ‘BINANCE:FISBRL’, ‘BINANCE:ZRXBNB’, ‘BINANCE:NAVBNB’, ‘BINANCE:BNBZAR’, ‘BINANCE:DEXEUSDT’, ‘BINANCE:BCHABCBUSD’, ‘BINANCE:BOTBTC’, ‘BINANCE:BOTBUSD’, ‘BINANCE:TUSDBTC’, ‘BINANCE:VIDTBTC’, ‘BINANCE:USDPBUSD’, ‘BINANCE:KEYUSDT’, ‘BINANCE:XRPEUR’, ‘BINANCE:USDCPAX’, ‘BINANCE:ICPRUB’, ‘BINANCE:AVAUSDT’, ‘BINANCE:FILBUSD’, ‘BINANCE:NCASHBTC’, ‘BINANCE:YFIIUSDT’, ‘BINANCE:AUDIOUSDT’, ‘BINANCE:SCUSDT’, ‘BINANCE:CTXCUSDT’, ‘BINANCE:PHBBTC’, ‘BINANCE:TORNBTC’, ‘BINANCE:UNFIUSDT’, ‘BINANCE:BNBBKRW’, ‘BINANCE:CHRBUSD’, ‘BINANCE:YFIIBUSD’, ‘BINANCE:COTIUSDT’, ‘BINANCE:NPXSBTC’, ‘BINANCE:PNTBTC’, ‘BINANCE:ANTBTC’, ‘BINANCE:BAKEBTC’, ‘BINANCE:GALABUSD’, ‘BINANCE:TRXBTC’, ‘BINANCE:VIBETH’, ‘BINANCE:BTCNGN’, ‘BINANCE:TFUELUSDC’, ‘BINANCE:RCNETH’, ‘BINANCE:STRATETH’, ‘BINANCE:MATICEUR’, ‘BINANCE:REQUSDT’, ‘BINANCE:BATTUSD’, ‘BINANCE:ROSEBUSD’, ‘BINANCE:WPRETH’, ‘BINANCE:QKCBTC’, ‘BINANCE:SRMBUSD’, ‘BINANCE:RUNEBUSD’, ‘BINANCE:ICXBNB’, ‘BINANCE:STPTBTC’, ‘BINANCE:DOTTRY’, ‘BINANCE:ADAUPUSDT’, ‘BINANCE:ADATRY’, ‘BINANCE:YFIIBNB’, ‘BINANCE:DGBUSDT’, ‘BINANCE:WAVESBNB’, ‘BINANCE:DYDXBNB’, ‘BINANCE:ADXBNB’, ‘BINANCE:ANKRPAX’, ‘BINANCE:ASRBTC’, ‘BINANCE:ORNBTC’, ‘BINANCE:TORNBNB’, ‘BINANCE:AMBBTC’, ‘BINANCE:HOTBUSD’, ‘BINANCE:BTSBNB’, ‘BINANCE:ORNBUSD’, ‘BINANCE:NANOBUSD’, ‘BINANCE:FILBNB’, ‘BINANCE:NUBTC’, ‘BINANCE:BCHSVPAX’, ‘BINANCE:RAREUSDT’, ‘BINANCE:BADGERBUSD’, ‘BINANCE:BTCBKRW’, ‘BINANCE:WRXBNB’, ‘BINANCE:LUNABNB’, ‘BINANCE:AIONBUSD’, ‘BINANCE:WANUSDT’, ‘BINANCE:NEARBNB’, ‘BINANCE:LTOUSDT’, ‘BINANCE:BCPTBTC’, ‘BINANCE:LTCUAH’, ‘BINANCE:SSVETH’, ‘BINANCE:NXSBTC’, ‘BINANCE:NKNBNB’, ‘BINANCE:TRIBEBTC’, ‘BINANCE:NPXSUSDC’, ‘BINANCE:BADGERUSDT’, ‘BINANCE:GHSTBUSD’, ‘BINANCE:OXTUSDT’, ‘BINANCE:WINEUR’, ‘BINANCE:YGGUSDT’, ‘BINANCE:ICPBTC’, ‘BINANCE:ZENUSDT’, ‘BINANCE:XZCBNB’, ‘BINANCE:POAETH’, ‘BINANCE:RSRUSDT’, ‘BINANCE:BCCBTC’, ‘BINANCE:ETHPAX’, ‘BINANCE:GTOPAX’, ‘BINANCE:PERPUSDT’, ‘BINANCE:RLCBTC’, ‘BINANCE:THETAEUR’, ‘BINANCE:RSRBUSD’, ‘BINANCE:CLVBNB’, ‘BINANCE:AVAXBUSD’, ‘BINANCE:ELFETH’, ‘BINANCE:XZCUSDT’, ‘BINANCE:SUSDUSDT’, ‘BINANCE:QNTBUSD’, ‘BINANCE:CTKBNB’, ‘BINANCE:ROSEBTC’, ‘BINANCE:DNTETH’, ‘BINANCE:REPBNB’, ‘BINANCE:PNTUSDT’, ‘BINANCE:RDNBNB’, ‘BINANCE:UNIBTC’, ‘BINANCE:REQBTC’, ‘BINANCE:HBARBUSD’, ‘BINANCE:RAYBUSD’, ‘BINANCE:ADADOWNUSDT’, ‘BINANCE:BCDBTC’, ‘BINANCE:ARBUSD’, ‘BINANCE:TKOUSDT’, ‘BINANCE:BRDBNB’, ‘BINANCE:DREPBNB’, ‘BINANCE:LUNABUSD’, ‘BINANCE:ARBTC’, ‘BINANCE:ALPHABNB’, ‘BINANCE:FIDABTC’, ‘BINANCE:SNMBTC’, ‘BINANCE:C98BTC’, ‘BINANCE:WINBTC’, ‘BINANCE:NAVBTC’, ‘BINANCE:CLVBUSD’, ‘BINANCE:LSKUSDT’, ‘BINANCE:REEFBTC’, ‘BINANCE:STPTUSDT’, ‘BINANCE:NULSUSDT’, ‘BINANCE:HOTBTC’, ‘BINANCE:USDSTUSD’, ‘BINANCE:1INCHDOWNUSDT’, ‘BINANCE:BUSDBKRW’, ‘BINANCE:STORJETH’, ‘BINANCE:BNBBULLBUSD’, ‘BINANCE:ZENETH’, ‘BINANCE:BZRXBTC’, ‘BINANCE:ETHBEARUSDT’, ‘BINANCE:PERPBUSD’, ‘BINANCE:DCRBUSD’, ‘BINANCE:XTZUPUSDT’, ‘BINANCE:ARNBTC’, ‘BINANCE:NULSBTC’, ‘BINANCE:SWRVBNB’, ‘BINANCE:LAZIOEUR’, ‘BINANCE:XTZBTC’, ‘BINANCE:HARDBTC’, ‘BINANCE:ETHBTC’, ‘BINANCE:WINUSDC’, ‘BINANCE:CTSIUSDT’, ‘BINANCE:LINKUSDT’, ‘BINANCE:BLZETH’, ‘BINANCE:RAYUSDT’, ‘BINANCE:USDTNGN’, ‘BINANCE:JUVBTC’, ‘BINANCE:TROYBTC’, ‘BINANCE:XRPPAX’, ‘BINANCE:SUSHIUPUSDT’, ‘BINANCE:DASHBNB’, ‘BINANCE:RLCETH’, ‘BINANCE:RENBNB’, ‘BINANCE:ANTUSDT’, ‘BINANCE:FUELETH’, ‘BINANCE:AVAXTRY’, ‘BINANCE:RUNEAUD’, ‘BINANCE:BCHSVBTC’, ‘BINANCE:GRTBTC’, ‘BINANCE:TWTBUSD’, ‘BINANCE:CKBBTC’, ‘BINANCE:GNOBNB’, ‘BINANCE:ZECUSDT’, ‘BINANCE:JUVBUSD’, ‘BINANCE:DOGEAUD’, ‘BINANCE:HBARBTC’, ‘BINANCE:SUNBTC’, ‘BINANCE:BCCBNB’, ‘BINANCE:STEEMBTC’, ‘BINANCE:SCRTBTC’, ‘BINANCE:ERDPAX’, ‘BINANCE:BCHBTC’, ‘BINANCE:BNBNGN’, ‘BINANCE:REEFUSDT’, ‘BINANCE:USDCTUSD’, ‘BINANCE:XLMTRY’, ‘BINANCE:PAXUSDT’, ‘BINANCE:COSBNB’, ‘BINANCE:BAKEBUSD’, ‘BINANCE:LINABUSD’, ‘BINANCE:SHIBAUD’, ‘BINANCE:TRBUSDT’, ‘BINANCE:GLMETH’, ‘BINANCE:QNTBTC’, ‘BINANCE:EZETH’, ‘BINANCE:ONTBNB’, ‘BINANCE:BUSDIDRT’, ‘BINANCE:WBTCETH’, ‘BINANCE:VETTRY’, ‘BINANCE:ZECETH’, ‘BINANCE:OAXETH’, ‘BINANCE:LTCBRL’, ‘BINANCE:XRPTRY’, ‘BINANCE:TFUELBNB’, ‘BINANCE:FTMETH’, ‘BINANCE:MINABTC’, ‘BINANCE:FUNETH’, ‘BINANCE:DUSKBTC’, ‘BINANCE:HNTBTC’, ‘BINANCE:PONDUSDT’, ‘BINANCE:ILVBNB’, ‘BINANCE:WAVESRUB’, ‘BINANCE:CVPETH’, ‘BINANCE:GTOTUSD’, ‘BINANCE:ONEBNB’, ‘BINANCE:AGIBNB’, ‘BINANCE:STXBNB’, ‘BINANCE:FTMUSDT’, ‘BINANCE:USDTDAI’, ‘BINANCE:XVGUSDT’, ‘BINANCE:LAZIOTRY’, ‘BINANCE:HNTBUSD’, ‘BINANCE:WANBNB’, ‘BINANCE:ENJBUSD’, ‘BINANCE:IQBNB’, ‘BINANCE:CDTBTC’, ‘BINANCE:MIRBTC’, ‘BINANCE:SCBTC’, ‘BINANCE:ERNBUSD’, ‘BINANCE:KEEPUSDT’, ‘BINANCE:BAKEBNB’, ‘BINANCE:AUDIOBUSD’, ‘BINANCE:ALPACABTC’, ‘BINANCE:COVERBUSD’, ‘BINANCE:USDTIDRT’, ‘BINANCE:USDSBUSDT’, ‘BINANCE:BUSDTRY’, ‘BINANCE:AUDUSDT’, ‘BINANCE:ZILBIDR’, ‘BINANCE:ZENBUSD’, ‘BINANCE:AMBETH’, ‘BINANCE:SXPBUSD’, ‘BINANCE:ICNBTC’, ‘BINANCE:JSTUSDT’, ‘BINANCE:NMRUSDT’, ‘BINANCE:BCHSVUSDT’, ‘BINANCE:AVAXBIDR’, ‘BINANCE:BLZBUSD’, ‘BINANCE:ETHZAR’, ‘BINANCE:FRONTBUSD’, ‘BINANCE:NBSUSDT’, ‘BINANCE:OMGBNB’, ‘BINANCE:CTKBTC’, ‘BINANCE:DUSKPAX’, ‘BINANCE:ETCUSDC’, ‘BINANCE:MATICTRY’, ‘BINANCE:ETCBUSD’, ‘BINANCE:ADABUSD’, ‘BINANCE:GNTBTC’, ‘BINANCE:MBOXBNB’, ‘BINANCE:USDTGYEN’, ‘BINANCE:LTCGBP’, ‘BINANCE:RPXBNB’, ‘BINANCE:ADABKRW’, ‘BINANCE:BNBBIDR’, ‘BINANCE:ACMBTC’, ‘BINANCE:AAVEUSDT’, ‘BINANCE:LOOMBTC’, ‘BINANCE:MDTUSDT’, ‘BINANCE:ANTBUSD’, ‘BINANCE:ARUSDT’, ‘BINANCE:BNBUPUSDT’, ‘BINANCE:KEYBTC’, ‘BINANCE:DOTGBP’, ‘BINANCE:BALBNB’, ‘BINANCE:BNBEUR’, ‘BINANCE:IOTAETH’, ‘BINANCE:VETBNB’, ‘BINANCE:IDEXBUSD’, ‘BINANCE:MDXBUSD’, ‘BINANCE:ONTTRY’, ‘BINANCE:LINKPAX’, ‘BINANCE:BCHABCUSDC’, ‘BINANCE:BNBTRY’, ‘BINANCE:DODOBTC’, ‘BINANCE:SOLTRY’, ‘BINANCE:TRUBTC’, ‘BINANCE:SANDUSDT’, ‘BINANCE:BARBTC’, ‘BINANCE:ICPBUSD’, ‘BINANCE:GALAUSDT’, ‘BINANCE:BTCUPUSDT’, ‘BINANCE:FTTBTC’, ‘BINANCE:AAVEBKRW’, ‘BINANCE:LRCETH’, ‘BINANCE:BETHETH’, ‘BINANCE:UNFIBNB’, ‘BINANCE:FTMBUSD’, ‘BINANCE:RIFBTC’, ‘BINANCE:EURUSDT’, ‘BINANCE:BNBUSDC’, ‘BINANCE:GXSETH’, ‘BINANCE:EOSETH’, ‘BINANCE:FARMUSDT’, ‘BINANCE:QUICKUSDT’, ‘BINANCE:NPXSETH’, ‘BINANCE:LPTBNB’, ‘BINANCE:COCOSUSDT’, ‘BINANCE:ONTUSDT’, ‘BINANCE:RENBTCETH’, ‘BINANCE:GOBTC’, ‘BINANCE:AAVEBRL’, ‘BINANCE:CRVUSDT’, ‘BINANCE:SUSHIBIDR’, ‘BINANCE:PAXTUSD’, ‘BINANCE:STRATBTC’, ‘BINANCE:SLPETH’, ‘BINANCE:GTOUSDC’, ‘BINANCE:ILVBTC’, ‘BINANCE:HEGICBUSD’, ‘BINANCE:XVGBTC’, ‘BINANCE:ANKRTUSD’, ‘BINANCE:NBSBTC’, ‘BINANCE:LSKBTC’, ‘BINANCE:RVNBUSD’, ‘BINANCE:ERNUSDT’, ‘BINANCE:EOSBEARUSDT’, ‘BINANCE:FORTHBUSD’, ‘BINANCE:VIBBTC’, ‘BINANCE:XRPBNB’, ‘BINANCE:DAIBTC’, ‘BINANCE:KMDUSDT’, ‘BINANCE:BTCRUB’, ‘BINANCE:LITUSDT’, ‘BINANCE:SCRTETH’, ‘BINANCE:WTCBTC’, ‘BINANCE:DGDETH’, ‘BINANCE:BUSDUSDT’, ‘BINANCE:LINKGBP’, ‘BINANCE:KLAYUSDT’, ‘BINANCE:BELBTC’, ‘BINANCE:XRPAUD’, ‘BINANCE:IDEXUSDT’, ‘BINANCE:KP3RBUSD’, ‘BINANCE:DASHUSDT’, ‘BINANCE:VETBTC’, ‘BINANCE:FORTHUSDT’, ‘BINANCE:RENBTC’, ‘BINANCE:IOTXETH’, ‘BINANCE:XMRBTC’, ‘BINANCE:ADABNB’, ‘BINANCE:VIDTBUSD’, ‘BINANCE:COTIBTC’, ‘BINANCE:ALPHABTC’, ‘BINANCE:BTCVAI’, ‘BINANCE:UTKBTC’, ‘BINANCE:WINBNB’, ‘BINANCE:STORJBUSD’, ‘BINANCE:HCETH’, ‘BINANCE:DIABNB’, ‘BINANCE:LPTUSDT’, ‘BINANCE:USDCUSDT’, ‘BINANCE:OGNUSDT’, ‘BINANCE:TOMOUSDC’, ‘BINANCE:CNDETH’, ‘BINANCE:ELFUSDT’, ‘BINANCE:TUSDETH’, ‘BINANCE:BETABNB’, ‘BINANCE:YOYOBNB’, ‘BINANCE:ANKRBTC’, ‘BINANCE:TVKBTC’, ‘BINANCE:PROMBUSD’, ‘BINANCE:AAVEETH’, ‘BINANCE:ALICEUSDT’, ‘BINANCE:IOTAUSDT’, ‘BINANCE:TRXEUR’, ‘BINANCE:SYSBNB’, ‘BINANCE:BKRWBUSD’, ‘BINANCE:XLMUSDT’, ‘BINANCE:COCOSBNB’, ‘BINANCE:INSBTC’, ‘BINANCE:OSTETH’, ‘BINANCE:UTKUSDT’, ‘BINANCE:RUNEBNB’, ‘BINANCE:AGLDBTC’, ‘BINANCE:BALBUSD’, ‘BINANCE:YGGBTC’, ‘BINANCE:BURGERBUSD’, ‘BINANCE:LENDETH’, ‘BINANCE:KEEPBTC’, ‘BINANCE:POLYUSDT’, ‘BINANCE:FISUSDT’, ‘BINANCE:SNXUSDT’, ‘BINANCE:ADABRL’, ‘BINANCE:BNBBEARUSDT’, ‘BINANCE:AAVEBTC’, ‘BINANCE:GRTUSDT’, ‘BINANCE:POLYBNB’, ‘BINANCE:CLVUSDT’, ‘BINANCE:SFPUSDT’, ‘BINANCE:USDTBRL’, ‘BINANCE:TCTBNB’, ‘BINANCE:KNCUSDT’, ‘BINANCE:UNIAUD’, ‘BINANCE:ALGOBNB’, ‘BINANCE:TRBBUSD’, ‘BINANCE:BQXBTC’, ‘BINANCE:FLOWBNB’, ‘BINANCE:PROMBNB’, ‘BINANCE:HIVEUSDT’, ‘BINANCE:WRXUSDT’, ‘BINANCE:BEARBUSD’, ‘BINANCE:CLVBTC’, ‘BINANCE:XRPBTC’, ‘BINANCE:HIVEBNB’, ‘BINANCE:BCCETH’, ‘BINANCE:MITHBNB’, ‘BINANCE:PERLBTC’, ‘BINANCE:BTTBUSD’, ‘BINANCE:CNDBNB’, ‘BINANCE:ETCBRL’, ‘BINANCE:TKOBTC’, ‘BINANCE:SOLBNB’, ‘BINANCE:AIONUSDT’, ‘BINANCE:DOTBNB’, ‘BINANCE:VITEBTC’, ‘BINANCE:STXUSDT’, ‘BINANCE:WANBTC’, ‘BINANCE:DASHBTC’, ‘BINANCE:QTUMBUSD’, ‘BINANCE:QTUMBTC’, ‘BINANCE:LTCTUSD’, ‘BINANCE:EOSDOWNUSDT’, ‘BINANCE:ARNETH’, ‘BINANCE:DUSKUSDC’, ‘BINANCE:AVAXBTC’, ‘BINANCE:FIDABNB’, ‘BINANCE:STXBUSD’, ‘BINANCE:SKYETH’, ‘BINANCE:BTTBNB’, ‘BINANCE:ZRXBTC’, ‘BINANCE:VIABTC’, ‘BINANCE:COCOSBTC’, ‘BINANCE:SXPUSDT’, ‘BINANCE:DENTBUSD’, ‘BINANCE:RAMPBUSD’, ‘BINANCE:SKLBTC’, ‘BINANCE:SFPBTC’, ‘BINANCE:DFETH’, ‘BINANCE:LINKEUR’, ‘BINANCE:ORNUSDT’, ‘BINANCE:DENTUSDT’, ‘BINANCE:1INCHUPUSDT’, ‘BINANCE:TFUELPAX’, ‘BINANCE:GTCBTC’, ‘BINANCE:SYSETH’, ‘BINANCE:XRPBEARBUSD’, ‘BINANCE:ONTETH’, ‘BINANCE:SUSHIBTC’, ‘BINANCE:EGLDBTC’, ‘BINANCE:ALGOPAX’, ‘BINANCE:REPETH’, ‘BINANCE:XTZBUSD’, ‘BINANCE:LTCUPUSDT’, ‘BINANCE:ILVBUSD’, ‘BINANCE:AKROBTC’, ‘BINANCE:JSTBTC’, ‘BINANCE:BTCUSDS’, ‘BINANCE:BONDBTC’, ‘BINANCE:USDTBVND’, ‘BINANCE:TRXBNB’, ‘BINANCE:WNXMBNB’, ‘BINANCE:SNGLSETH’, ‘BINANCE:ATMBUSD’, ‘BINANCE:JUVUSDT’, ‘BINANCE:EASYBTC’, ‘BINANCE:AIONETH’, ‘BINANCE:EOSUSDC’, ‘BINANCE:XRPTUSD’, ‘BINANCE:MTLUSDT’, ‘BINANCE:ADABIDR’, ‘BINANCE:LINKUPUSDT’, ‘BINANCE:FTMBRL’, ‘BINANCE:XRPBEARUSDT’, ‘BINANCE:SXPBTC’, ‘BINANCE:MCOBNB’, ‘BINANCE:SNGLSBTC’, ‘BINANCE:AXSBUSD’, ‘BINANCE:YFIBNB’, ‘BINANCE:ARKBTC’, ‘BINANCE:NCASHBNB’, ‘BINANCE:TNTBTC’, ‘BINANCE:PHBTUSD’, ‘BINANCE:BUSDUAH’, ‘BINANCE:STMXUSDT’, ‘BINANCE:XVSBTC’, ‘BINANCE:BCDETH’, ‘BINANCE:RUNEEUR’, ‘BINANCE:ETHBEARBUSD’, ‘BINANCE:VETETH’, ‘BINANCE:ALGOBIDR’, ‘BINANCE:MKRBUSD’, ‘BINANCE:MDTBNB’, ‘BINANCE:COSUSDT’, ‘BINANCE:NXSETH’, ‘BINANCE:STEEMETH’, ‘BINANCE:LINKDOWNUSDT’, ‘BINANCE:POWRBTC’, ‘BINANCE:ACMBUSD’, ‘BINANCE:PAXGBUSD’, ‘BINANCE:USDSBUSDS’, ‘BINANCE:UNIBUSD’, ‘BINANCE:CHZBTC’, ‘BINANCE:AVAXEUR’, ‘BINANCE:IRISBNB’, ‘BINANCE:AVABNB’, ‘BINANCE:WAXPUSDT’, ‘BINANCE:QUICKBUSD’, ‘BINANCE:FIROUSDT’, ‘BINANCE:BCPTTUSD’, ‘BINANCE:HSRETH’, ‘BINANCE:OGNBUSD’, ‘BINANCE:AXSETH’, ‘BINANCE:VIBEBTC’, ‘BINANCE:IRISUSDT’, ‘BINANCE:BCNETH’, ‘BINANCE:BCHABCTUSD’, ‘BINANCE:EGLDUSDT’, ‘BINANCE:ONTBUSD’, ‘BINANCE:CHRBTC’, ‘BINANCE:TCTBTC’, ‘BINANCE:MDAETH’, ‘BINANCE:YFIEUR’, ‘BINANCE:AAVEUPUSDT’, ‘BINANCE:LITBUSD’, ‘BINANCE:AAVEBUSD’, ‘BINANCE:RAMPBTC’, ‘BINANCE:BTTPAX’, ‘BINANCE:GXSUSDT’, ‘BINANCE:IOSTBUSD’, ‘BINANCE:QUICKBTC’, ‘BINANCE:SCBUSD’, ‘BINANCE:WNXMBTC’, ‘BINANCE:SOLRUB’, ‘BINANCE:CVCUSDT’, ‘BINANCE:XECBUSD’, ‘BINANCE:ADAPAX’, ‘BINANCE:GHSTUSDT’, ‘BINANCE:INJUSDT’, ‘BINANCE:C98BNB’, ‘BINANCE:DFBUSD’, ‘BINANCE:PERPBTC’, ‘BINANCE:BTTUSDT’, ‘BINANCE:VETBUSD’, ‘BINANCE:AXSUSDT’, ‘BINANCE:YOYOBTC’, ‘BINANCE:SNTBTC’, ‘BINANCE:FORBTC’, ‘BINANCE:EGLDEUR’, ‘BINANCE:BCPTBNB’, ‘BINANCE:WANETH’, ‘BINANCE:EZBTC’, ‘BINANCE:POEETH’, ‘BINANCE:VITEUSDT’, ‘BINANCE:OMBUSD’, ‘BINANCE:AXSBNB’, ‘BINANCE:XRPRUB’, ‘BINANCE:TFUELTUSD’, ‘BINANCE:RAREBTC’, ‘BINANCE:XTZBNB’, ‘BINANCE:ARPABTC’, ‘BINANCE:FTMUSDC’, ‘BINANCE:SCRTBUSD’, ‘BINANCE:XEMBTC’, ‘BINANCE:BONDBUSD’, ‘BINANCE:ATOMUSDT’, ‘BINANCE:SANDBTC’, ‘BINANCE:VIAETH’, ‘BINANCE:CHZGBP’, ‘BINANCE:ENJGBP’, ‘BINANCE:EASYETH’, ‘BINANCE:ENJUSDT’, ‘BINANCE:UMAUSDT’, ‘BINANCE:XRPGBP’, ‘BINANCE:MTLBTC’, ‘BINANCE:OCEANBTC’, ‘BINANCE:XLMUPUSDT’, ‘BINANCE:BANDUSDT’, ‘BINANCE:BEAMBNB’, ‘BINANCE:PAXBNB’, ‘BINANCE:CELRBUSD’, ‘BINANCE:INJBTC’, ‘BINANCE:RCNBNB’, ‘BINANCE:MIRUSDT’, ‘BINANCE:BTGUSDT’, ‘BINANCE:ETHDOWNUSDT’, ‘BINANCE:FXSBTC’, ‘BINANCE:DOTEUR’, ‘BINANCE:GTOBTC’, ‘BINANCE:BETABUSD’, ‘BINANCE:XRPBRL’, ‘BINANCE:AERGOBTC’, ‘BINANCE:XTZUSDT’, ‘BINANCE:CFXBUSD’, ‘BINANCE:PERLUSDC’, ‘BINANCE:NEBLBTC’, ‘BINANCE:LAZIOBTC’, ‘BINANCE:SXPBNB’, ‘BINANCE:LPTBTC’, ‘BINANCE:NEOPAX’, ‘BINANCE:STORMUSDT’, ‘BINANCE:THETABTC’, ‘BINANCE:BATUSDC’, ‘BINANCE:TNBBTC’, ‘BINANCE:WABIBTC’, ‘BINANCE:1INCHBUSD’, ‘BINANCE:FRONTETH’, ‘BINANCE:GTCBNB’, ‘BINANCE:IRISBUSD’, ‘BINANCE:IOTABNB’, ‘BINANCE:ETHAUD’, ‘BINANCE:ENJBRL’, ‘BINANCE:BNBBUSD’, ‘BINANCE:GTCBUSD’, ‘BINANCE:RAREBNB’, ‘BINANCE:PERLUSDT’, ‘BINANCE:BCHABCBTC’, ‘BINANCE:GBPBUSD’, ‘BINANCE:LTCUSDC’, ‘BINANCE:DLTETH’, ‘BINANCE:DOCKBUSD’, ‘BINANCE:STRAXUSDT’, ‘BINANCE:ZRXETH’, ‘BINANCE:ADXETH’, ‘BINANCE:COMPUSDT’, ‘BINANCE:BELUSDT’, ‘BINANCE:SHIBEUR’, ‘BINANCE:VENBTC’, ‘BINANCE:BTCTRY’, ‘BINANCE:ONGBNB’, ‘BINANCE:BLZBNB’, ‘BINANCE:HOTBRL’, ‘BINANCE:BCNBTC’, ‘BINANCE:AKROUSDT’, ‘BINANCE:PONDBTC’, ‘BINANCE:MINAUSDT’, ‘BINANCE:DYDXBUSD’, ‘BINANCE:SCBNB’, ‘BINANCE:RIFUSDT’, ‘BINANCE:VENBNB’, ‘BINANCE:BTCAUD’, ‘BINANCE:PHBBNB’, ‘BINANCE:COVERETH’, ‘BINANCE:CHZBRL’, ‘BINANCE:NMRBNB’, ‘BINANCE:EOSBTC’, ‘BINANCE:USDCBUSD’, ‘BINANCE:WAVESPAX’, ‘BINANCE:ICXETH’, ‘BINANCE:BUSDNGN’, ‘BINANCE:BEAMUSDT’, ‘BINANCE:MATICBIDR’, ‘BINANCE:BNBUSDS’, ‘BINANCE:NEBLBNB’, ‘BINANCE:POEBTC’, ‘BINANCE:TWTBTC’, ‘BINANCE:ETHRUB’, ‘BINANCE:BTGBUSD’, ‘BINANCE:TFUELBTC’, ‘BINANCE:CAKEBRL’, ‘BINANCE:ICXBUSD’, ‘BINANCE:LINKBUSD’, ‘BINANCE:BULLUSDT’, ‘BINANCE:YFIIBTC’, ‘BINANCE:QSPBTC’, ‘BINANCE:AERGOBUSD’, ‘BINANCE:CHESSUSDT’, ‘BINANCE:BELBNB’, ‘BINANCE:BCHBUSD’, ‘BINANCE:XVSBUSD’, ‘BINANCE:PAXGUSDT’, ‘BINANCE:VETUSDT’, ‘BINANCE:UFTETH’, ‘BINANCE:BADGERBTC’, ‘BINANCE:XMRBUSD’, ‘BINANCE:BTCBBTC’, ‘BINANCE:ETCTUSD’, ‘BINANCE:CVPUSDT’, ‘BINANCE:COTIBNB’, ‘BINANCE:ETCETH’, ‘BINANCE:UNIDOWNUSDT’, ‘BINANCE:VIABNB’, ‘BINANCE:MBLBNB’, ‘BINANCE:ATABUSD’, ‘BINANCE:AVAXBNB’, ‘BINANCE:FISBUSD’, ‘BINANCE:ROSEUSDT’, ‘BINANCE:TROYBNB’, ‘BINANCE:HCUSDT’, ‘BINANCE:ZENBTC’, ‘BINANCE:DODOUSDT’, ‘BINANCE:RSRBNB’, ‘BINANCE:FORUSDT’, ‘BINANCE:ARPAUSDT’, ‘BINANCE:ICXBTC’, ‘BINANCE:BETAUSDT’, ‘BINANCE:PSGBTC’, ‘BINANCE:NEOETH’, ‘BINANCE:ALPACABUSD’, ‘BINANCE:ETCBTC’, ‘BINANCE:ONTBTC’, ‘BINANCE:MLNUSDT’, ‘BINANCE:MBOXUSDT’, ‘BINANCE:STRATBUSD’, ‘BINANCE:LSKETH’, ‘BINANCE:USDTTRY’, ‘BINANCE:GTOETH’, ‘BINANCE:CTSIBNB’, ‘BINANCE:ONEBTC’, ‘BINANCE:ZRXUSDT’, ‘BINANCE:LENDBKRW’, ‘BINANCE:ATABNB’, ‘BINANCE:BTCBRL’, ‘BINANCE:TOMOBNB’, ‘BINANCE:BANDBNB’, ‘BINANCE:DENTBTC’, ‘BINANCE:ARKETH’, ‘BINANCE:UFTBUSD’, ‘BINANCE:GALABTC’, ‘BINANCE:TNTETH’, ‘BINANCE:QKCETH’, ‘BINANCE:ICPBNB’, ‘BINANCE:LINKAUD’, ‘BINANCE:BTCPAX’, ‘BINANCE:KP3RBNB’, ‘BINANCE:XLMEUR’, ‘BINANCE:WINBUSD’, ‘BINANCE:FXSBUSD’, ‘BINANCE:ERDUSDC’, ‘BINANCE:POLSBTC’, ‘BINANCE:ETHUSDT’, ‘BINANCE:AUDIOBTC’, ‘BINANCE:OCEANBNB’, ‘BINANCE:SUSHIBUSD’, ‘BINANCE:BCCUSDT’, ‘BINANCE:NXSBNB’, ‘BINANCE:COMPBTC’, ‘BINANCE:ERDBUSD’, ‘BINANCE:PIVXBTC’, ‘BINANCE:LAZIOUSDT’, ‘BINANCE:XEMUSDT’, ‘BINANCE:CELRBNB’, ‘BINANCE:FLOWBTC’, ‘BINANCE:ARDRETH’, ‘BINANCE:CHZTRY’, ‘BINANCE:AGLDUSDT’, ‘BINANCE:WRXEUR’, ‘BINANCE:MATICBRL’, ‘BINANCE:ENGETH’, ‘BINANCE:LINKBTC’, ‘BINANCE:STRAXBUSD’, ‘BINANCE:BCHABUSD’, ‘BINANCE:DEGOUSDT’, ‘BINANCE:AEBTC’, ‘BINANCE:LOOMBNB’, ‘BINANCE:RENUSDT’, ‘BINANCE:CHZEUR’, ‘BINANCE:BNBAUD’, ‘BINANCE:XLMBUSD’, ‘BINANCE:SYSBTC’, ‘BINANCE:CAKEBTC’, ‘BINANCE:BTGETH’, ‘BINANCE:THETAUSDT’, ‘BINANCE:DOGEUSDC’, ‘BINANCE:ADAEUR’, ‘BINANCE:UNIBNB’, ‘BINANCE:ATOMBUSD’, ‘BINANCE:QNTUSDT’, ‘BINANCE:BALBTC’, ‘BINANCE:RLCUSDT’, ‘BINANCE:BLZUSDT’, ‘BINANCE:TRIGBTC’, ‘BINANCE:USDTZAR’, ‘BINANCE:DASHBUSD’, ‘BINANCE:BNBBTC’, ‘BINANCE:POWRBNB’, ‘BINANCE:ADAETH’, ‘BINANCE:RAREBUSD’, ‘BINANCE:AVAXBRL’, ‘BINANCE:RLCBNB’, ‘BINANCE:OCEANUSDT’, ‘BINANCE:KAVAUSDT’, ‘BINANCE:DFUSDT’, ‘BINANCE:BNTUSDT’, ‘BINANCE:ALGOUSDT’, ‘BINANCE:FTMAUD’, ‘BINANCE:BTTBRL’, ‘BINANCE:ONEBIDR’, ‘BINANCE:AVABTC’, ‘BINANCE:UNFIBUSD’, ‘BINANCE:RPXETH’, ‘BINANCE:WABIETH’, ‘BINANCE:TUSDUSDT’, ‘BINANCE:ZECTUSD’]

Pull coin data

Now that we know the assets to monitor and the right format for each asset’s name, we can pull the actual data.

We want to get the time_history for each of the ids we generated above.

The resolution is the time intervals for which the data is aggregated. These are the only accepted values:

  • 1: 1 minute intervals
  • 5: 5-minutes intervals
  • 15: 15-minutes intervals
  • 30: 30-minutes intervals
  • 60: Hourly intervals
  • D: Daily intervals
  • W: Weekly intervals
  • M: Monthly intervals

Notice that when the data comes in, it needs to be cleaned. Only assets with an ok status are accepted, and we want to limit this further to only the data that has values en(data['s']). These are included so that bad data is never logged to the table.

The Finnhub mapping of data is:

  • c: List of close prices for returned candles.
  • h: List of high prices for returned candles.
  • l: List of low prices for returned candles.
  • o: List of open prices for returned candles.
  • s: Status of the response. This field can either be ok or no_data.
  • t: List of timestamp for returned candles.
  • v: List of volume data for returned candles.
resolution = 5 # Available values: 1, 5, 15, 30, 60, 'D', 'W', 'M'
def thread_func(time_history, tableWriter):
for id in ids:
data = finnhub_client.crypto_candles(id, resolution, int(millis(minus(currentTime(),convertPeriod("T"+str(int((24*time_history)))+"H")))/1000), int(millis(currentTime())/1000))
coin = id
if data['s'] =='ok' and len(data['s'])>0:
c = (data['c'])
h = (data['h'])
l = (data['l'])
o = (data['o'])
t = (data['t'])
v = (data['v'])
if c != None:
for i in range(len(c)):
tableWriter.logRow(coin, float(c[i]), float(h[i]), float(l[i]), float(o[i]), secondsToTime(t[i]), float(v[i]))

We define our table so the variables match our preferred data types. That is, we are mapping the data collected in the above function with these Deephaven Python Types.

coin_tableWriter = DynamicTableWriter(
["Coin", "Close", "High", "Low", "Open", "DateTime", "Volume"],
[dht.string, dht.float64, dht.float64, dht.float64, dht.float64, dht.datetime, dht.float64]
)

Finally, we get to run the code that will execute the functions. Since many crypto assets have values that are well below zero, I format the columns so that we can see all the numbers desired.

This also starts the treading function to run the prior functions.

After running these commands a table with lots of values will appear in your IDE.

coin_data = coin_tableWriter.getTable().formatColumns("Close = Decimal(`#,###.##############`)")
.formatColumns("High = Decimal(`#,###.##############`)")
.formatColumns("Low = Decimal(`#,###.##############`)")
.formatColumns("Open = Decimal(`#,###.##############`)")

thread = threading.Thread(target=thread_func, args=[time_history, coin_tableWriter])
thread.start()

Plot the data

Having a table of values is useful for data processing, and there are plenty of ways to interact with it. However, I want to view the data in OHLC charts.

The query below goes through the data pulled, creates an array of pulled_ids, then creates a new chart. We create this new value of ids to be only the data that had values. Since each pulled_ids will have its own chart, this might take a few seconds depending on the number of ids.

pulled_ids = []

for value in coin_data.selectDistinct("Coin").getColumn("Coin").getDirect():
pulled_ids.append(value)

for i in range(len(pulled_ids)):
coin = pulled_ids[i]
globals()[f"ohlc_{pulled_ids[i]}"] = Plot.ohlcPlot("coins", coin_data.where("Coin= coin"), "DateTime", "Open", "High", "Low", "Close")
.show()

Endless possibilities

We demonstrate OHLC plots here; to experiment with our other chart types and style options, check out our plotting documentation. We hope the working example above emulates the real-time data-driven problem sets you have. We encourage you to evolve the query to deliver the business logic or analysis that interests you.

This pattern and workflow serve applications well beyond stock data. IOT, weather, sports, and industrial telemetry all offer exciting and challenging use cases. Let us know how you adapt this project. Reach out on Slack or post in our Github Discussions. Our dev-rel team is here to support you.

Further reading



Source link
lol

By stp2y

Leave a Reply

Your email address will not be published. Required fields are marked *

No widgets found. Go to Widget page and add the widget in Offcanvas Sidebar Widget Area.