1
0
mirror of https://gitlab.com/Anson-Projects/projects.git synced 2025-06-16 15:06:53 +00:00

141 lines
3.0 KiB
Julia

using PlotlyJS
using CSV
using HTTP
using DataFrames
using StringViews
using JSON
using Dates
kraken = """
cryptocurrency confirmationMinutes
0x (ZRX) 5
1inch (1INCH) 5
Aave (AAVE) 5
Aavegotchi (GHST) 5
Algorand (ALGO) 0.75
Ankr (ANKR) 5
Aragon (ANT) 5
Augur (REP) 5
Augur v2 (REPV2) 5
Axie Infinity (AXS) 5
Badger DAO (BADGER) 5
Balancer (BAL) 5
Bancor (BNT) 5
Band Protocol (BAND) 5
Basic Attention Token (BAT) 5
Bifrost (BNC) 4
Bitcoin (BTC) 40
Cardano (ADA) 10
Cartesi (CTSI) 5
Chainlink (LINK) 5
Chiliz (CHZ) 5
Compound (COMP) 5
Cosmos (ATOM) 0
Covalent (CQT) 5
Curve (CRV) 5
Dash (DASH) 5
Dai (DAI) ERC-20 5
Decentraland (MANA) 5
Dogecoin (DOGE) 40
dYdX (DYDX) 5
Energy Web Token (EWT) 1.75
Enjin Coin (ENJ) 5
Enzyme Finance (MLN) 5
EOS (EOS) 0
Ethereum (ETH) 5
Flow (FLOW) 1
Gnosis (GNO) 5
ICON (ICX) 0
Injective Protocol (INJ) 5
Karura (KAR) 4
Kava (KAVA) 0
Keep Network (KEEP) 5
Kusama (KSM) 2
Kyber Network (KNC) 5
Lisk (LSK) 51
Litecoin (LTC) 30
Livepeer (LPT) 5
Loopring (LRC) 5
Maker (MKR) 5
Mina (MINA) 60
Mirror Protocol (MIR) 5
Monero (XMR) 30
Moonriver (MOVR) 4
Nano (XNO) 0
Ocean (OCEAN) 5
OmiseGO (OMG) 5
Orchid (OXT) 5
Origin Protocol (OGN) 5
Oxygen (OXY) 0
PAX Gold (PAXG) 5
Perpetual Protocol (PERP) 5
Phala (PHA) 5
Polkadot (DOT) 2
Polygon (MATIC) 5
Qtum (QTUM) 60
Rarible (RARI) 5
Raydium (RAY) 0
REN Protocol (REN) 5
Ripple (XRP) 0
Serum (SRM) 0
Shiden (SDN) 4
Siacoin (SC) 60
Solana (SOL) 0
Stellar Lumens (XLM) 0
Storj (STORJ) 5
Sushi (SUSHI) 5
Synthetix (SNX) 5
tBTC (TBTC) 5
Tether USD (USDT) ERC-20 5
Tezos (XTZ) 15
The Graph (GRT) 5
The Sandbox (SAND) 5
Tron (TRX) 1
Uniswap (UNI) 5
USD Coin (USDC) 5
Waves (WAVES) 10
Wrapped Bitcoin (WBTC) 5
Yearn Finance (YFI) 5
Zcash (ZEC) 60
"""
df = CSV.File(IOBuffer(kraken)) |> DataFrame
df.symbol = [split(split(sym, "(")[end], ")")[1] |> lowercase for sym in df.cryptocurrency]
coins = HTTP.get("https://api.coingecko.com/api/v3/coins/list").body |>
StringView |> JSON.parse .|> DataFrame |> x -> vcat(x...)
coins = coins[coins.id.!="xeno-token", :]
coins = unique(coins[end:-1:1, :], :symbol);
df = innerjoin(df, coins, on = :symbol)
mktcap_url = "https://api.coingecko.com/api/v3/simple/price?vs_currencies=usd&include_market_cap=true&include_24hr_vol=true&ids=" * join(df.id, ",")
caps = HTTP.get(mktcap_url).body |>
StringView |> JSON.parse
df.mktcap = [caps[id]["usd_market_cap"] for id in df.id]
df.volume = [caps[id]["usd_24h_vol"] for id in df.id]
df.logvol = log.(df.volume)
df = df[df.mktcap.!=0, :]
p = plot(df,
x = :confirmationMinutes,
y = :mktcap, mode = "markers",
text = :cryptocurrency,
marker_color = :logvol,
marker = attr(colorscale = "Viridis", line = attr(width = 0.4, color = "DarkSlateGrey")),
Layout(title = "Market Cap vs. Confirmation Time, Data From: $(today())",),
labels = Dict(
:confirmationMinutes => "Confirmation Time (Minutes)",
:mktcap => "Market Capitalization (USD)"),
)
open("./caps.html", "w") do io
PlotlyBase.to_html(io, p.plot)
end