A quantitative research over the construction of a perfect crypto-portfolio can be based on a number of top crypto assets. They usually are ranked by crypto market cap (capitalisation). If you are able to build the right portfolio, stick to it, or successfully manage its composition in time (e.g. through the method of rebalancing), the final PnL coming from your management can be worth every dollar invested in all underlings.
In this short research note, we will develop a Python code which enables fetching the most updated list of top $N$ market cap coins sorted by market capitalisation. The list can be generated every day and saved for further investigation (e.g. the change of Top $N$ components over the past 3 years).
1. Crypto-Data Provider for Crypto Market Cap
The data we are interested in are, luckily, provided by CryptoCompare.com API (see documentation page here). The publicly available default URL address is
https://min-api.cryptocompare.com/data/top/mktcapfull?limit=10&tsym=USD
which allows to get the full suite of information on the top 10 crypto-assets (by crypto market cap) with the coins’ prices converted to USD fiat currency as a reference. Let’s see how one can turn this URL address into meaningful data stream extracted from the data provider down in Python.
2. Top Crypto Assets Sorted by Crypto Market Cap
Let’s say we are interested in getting information on the current Top $N=75$ crypto market cap coins. We can achieve it by executing the following code:
# How To Check Crypto Market Cap using Python? # # (c) 2022 by QuantAtRisk.com import requests import json from bs4 import BeautifulSoup from datetime import datetime def timestamp2date_hms(timestamp): # function converts a Unix timestamp into Gregorian date return datetime.fromtimestamp(int(timestamp)).strftime('%Y-%m-%d %H:%M') top_n = 75 url = 'https://min-api.cryptocompare.com/data/top/mktcapfull?limit=' + str(top_n) + '&tsym=USD' # fetch the raw data for Crypto Market Cap response = requests.get(url) soup = BeautifulSoup(response.content, "html.parser") dic = json.loads(soup.prettify()) # convert from json to dictionary data = dic['Data'] n_records = len(data) print(n_records) # 75 # first record d = data[0]
The key is the response. For the first record, corresponding to Bitcoin (of course!), we find:
{'CoinInfo': {'Id': '1182', 'Name': 'BTC', 'FullName': 'Bitcoin', 'Internal': 'BTC', 'ImageUrl': '/media/37746251/btc.png', 'Url': '/coins/btc/overview', 'Algorithm': 'SHA-256', 'ProofType': 'PoW', 'Rating': {'Weiss': {'Rating': 'B+', 'TechnologyAdoptionRating': 'A-', 'MarketPerformanceRating': 'C+'}}, 'NetHashesPerSecond': 193928423919356840000, 'BlockNumber': 729289, 'BlockTime': 605, 'BlockReward': 6.25, 'AssetLaunchDate': '2009-01-03', 'MaxSupply': 20999999.9769, 'Type': 1, 'DocumentType': 'Webpagecoinp'}, 'RAW': {'USD': {'TYPE': '5', 'MARKET': 'CCCAGG', 'FROMSYMBOL': 'BTC', 'TOSYMBOL': 'USD', 'FLAGS': '1026', 'PRICE': 44865.64, 'LASTUPDATE': 1648409699, 'MEDIAN': 44871.5, 'LASTVOLUME': 0.00221708, 'LASTVOLUMETO': 99.482818388, 'LASTTRADEID': '304077243', 'VOLUMEDAY': 8836.248462356232, 'VOLUMEDAYTO': 395276930.3160927, 'VOLUME24HOUR': 11549.325863369999, 'VOLUME24HOURTO': 516131733.2285419, 'OPENDAY': 44542.49, 'HIGHDAY': 45007.6, 'LOWDAY': 44449.41, 'OPEN24HOUR': 44387.58, 'HIGH24HOUR': 45031.99, 'LOW24HOUR': 44274.89, 'LASTMARKET': 'Coinbase', 'VOLUMEHOUR': 220.82893112000076, 'VOLUMEHOURTO': 9911823.879511757, 'OPENHOUR': 44865.22, 'HIGHHOUR': 44907.6, 'LOWHOUR': 44840.53, 'TOPTIERVOLUME24HOUR': 11549.305531369999, 'TOPTIERVOLUME24HOURTO': 516130828.48256934, 'CHANGE24HOUR': 478.0599999999977, 'CHANGEPCT24HOUR': 1.0770129842627096, 'CHANGEDAY': 323.15000000000146, 'CHANGEPCTDAY': 0.7254870574141712, 'CHANGEHOUR': 0.41999999999825377, 'CHANGEPCTHOUR': 0.0009361371681633429, 'CONVERSIONTYPE': 'direct', 'CONVERSIONSYMBOL': '', 'SUPPLY': 18995562, 'MKTCAP': 852248046289.68, 'MKTCAPPENALTY': 0, 'CIRCULATINGSUPPLY': 18995562, 'CIRCULATINGSUPPLYMKTCAP': 852248046289.6799, 'TOTALVOLUME24H': 91014.50072698834, 'TOTALVOLUME24HTO': 4081387661.196691, 'TOTALTOPTIERVOLUME24H': 90847.52942525677, 'TOTALTOPTIERVOLUME24HTO': 4073896394.345091, 'IMAGEURL': '/media/37746251/btc.png'}}, 'DISPLAY': {'USD': {'FROMSYMBOL': 'Ƀ', 'TOSYMBOL': '$', 'MARKET': 'CryptoCompare Index', 'PRICE': '$ 44,865.6', 'LASTUPDATE': 'Just now', 'LASTVOLUME': 'Ƀ 0.002217', 'LASTVOLUMETO': '$ 99.48', 'LASTTRADEID': '304077243', 'VOLUMEDAY': 'Ƀ 8,836.25', 'VOLUMEDAYTO': '$ 395,276,930.3', 'VOLUME24HOUR': 'Ƀ 11,549.3', 'VOLUME24HOURTO': '$ 516,131,733.2', 'OPENDAY': '$ 44,542.5', 'HIGHDAY': '$ 45,007.6', 'LOWDAY': '$ 44,449.4', 'OPEN24HOUR': '$ 44,387.6', 'HIGH24HOUR': '$ 45,032.0', 'LOW24HOUR': '$ 44,274.9', 'LASTMARKET': 'Coinbase', 'VOLUMEHOUR': 'Ƀ 220.83', 'VOLUMEHOURTO': '$ 9,911,823.9', 'OPENHOUR': '$ 44,865.2', 'HIGHHOUR': '$ 44,907.6', 'LOWHOUR': '$ 44,840.5', 'TOPTIERVOLUME24HOUR': 'Ƀ 11,549.3', 'TOPTIERVOLUME24HOURTO': '$ 516,130,828.5', 'CHANGE24HOUR': '$ 478.06', 'CHANGEPCT24HOUR': '1.08', 'CHANGEDAY': '$ 323.15', 'CHANGEPCTDAY': '0.73', 'CHANGEHOUR': '$ 0.42', 'CHANGEPCTHOUR': '0.00', 'CONVERSIONTYPE': 'direct', 'CONVERSIONSYMBOL': '', 'SUPPLY': 'Ƀ 18,995,562.0', 'MKTCAP': '$ 852.25 B', 'MKTCAPPENALTY': '0 %', 'CIRCULATINGSUPPLY': 'Ƀ 18,995,562.0', 'CIRCULATINGSUPPLYMKTCAP': '$ 852.25 B', 'TOTALVOLUME24H': 'Ƀ 91.01 K', 'TOTALVOLUME24HTO': '$ 4.08 B', 'TOTALTOPTIERVOLUME24H': 'Ƀ 90.85 K', 'TOTALTOPTIERVOLUME24HTO': '$ 4.07 B', 'IMAGEURL': '/media/37746251/btc.png'}}}
which is, to be honest, a huge bag of momentary information on that crypto-asset as we retrieve these data. In the remaining part of the code, you can see that we extract from this stream only three records to compile the final table:
print(' # Coin Price (USD) Crypto Market Cap (USD)') print('-'*48) for i in range(n_records): d = data[i] try: # extract Crypto Market Cap coin, price, mktcap = d['RAW']['USD']['FROMSYMBOL'], d['RAW']['USD']['PRICE'], d['RAW']['USD']['MKTCAP'] except: None print('%3g %10s %12.2f %20.2f' % (i+1, coin, price, mktcap))
which is:
# Coin Price (USD) Crypto Market Cap (USD) ------------------------------------------------ 1 BTC 44865.64 852248046289.68 2 ETH 3177.47 381728597083.12 3 XRP 0.84 84041306308.42 4 USDT 1.00 81331736008.26 5 BNB 417.68 68968598485.35 6 LUNA 90.56 68237433417.07 7 SOL 103.03 53390167190.51 8 ADA 1.13 37388525927.32 9 AVAX 85.73 34352102609.07 10 DOT 21.44 25261794928.60 11 DOGE 0.14 18781321532.27 12 AXS 65.96 17809200000.00 13 BUSD 1.00 17566012245.93 14 MATIC 1.65 16500000000.00 15 LINK 16.22 16220000000.00 16 UST 1.00 16217360514.16 17 FTT 50.71 16082621103.68 18 SHIB 0.00 14472044074.15 19 CRO 0.47 14135853695.53 20 APE 13.82 13820000000.00 21 APE 13.82 13820000000.00 22 KLAY 1.15 12468813157.59 23 WBTC 44897.65 12312303787.41 24 XLM 0.22 11125397839.60 25 UNI 10.99 10990000000.00 26 SAND 3.44 10329000000.00 27 ICP 21.28 10196747598.04 28 GALA 0.25 9384032703.86 29 DAI 1.00 9240900157.40 30 LTC 124.32 8694638793.59 31 ATOM 28.92 8425389899.42 32 NEAR 12.70 8391213579.92 33 BCH 360.99 6866113241.63 34 TRX 0.07 6751429662.71 35 VET 0.08 6491870608.86 36 ALGO 0.92 6512901638.49 37 ETC 45.20 5966223311.20 38 OKB 22.53 5918581086.55 39 MANA 2.65 5811164087.47 40 LEO 5.95 5577600565.79 41 DYDX 5.47 5475000000.00 42 QNT 144.21 5180201162.21 43 RUNE 10.21 5105000000.00 44 USDC 1.00 5081211887.50 45 HBAR 0.24 4793615299.72 46 IMX 2.22 4446000000.00 47 EGLD 188.84 4422632233.48 48 GRT 0.42 4324482971.31 49 CRV 2.52 4315234736.33 50 ILV 594.82 4163756688.00 51 FIL 22.10 4039024973.10 52 XMR 211.39 3825938691.53 53 FTM 1.38 3705158205.95 54 GNO 367.95 3679510260.00 55 THETA 3.51 3514325581.20 56 LDO 3.43 3412668118.32 57 XTZ 3.79 3450701425.90 58 DFI 4.37 3423941285.56 59 WAVES 31.55 3402591149.00 60 PCI 0.83 3253404965.22 61 CELO 3.26 3260000000.00 62 KCS 18.75 3189767072.12 63 RLY 0.21 3133500000.00 64 YGG 2.86 2856545530.00 65 ROSE 0.28 2848968140.00 66 HNT 23.98 2763688221.53 67 EOS 2.57 2696824762.24 68 AMP 0.03 2681004762.97 69 CVX 30.24 2636089162.80 70 AAVE 164.15 2626400000.00 71 1INCH 1.72 2578500000.00 72 1INCH 1.72 2578500000.00 73 NEO 25.18 2518000000.00 74 MC 2.51 2449618968.76 75 ZEC 197.56 2423935288.35
This accomplishes our task.
External Resources on Crypto Market Cap
Explore More Our Articles
Where Can You Trade Cryptocurrencies using Fiat Currencies?
Crypto vs Fiat Currency: (2) Does Bitcoin Always Co-Move at All Crypto-Exchanges?