mirror of
https://gitlab.com/Anson-Projects/projects.git
synced 2025-06-16 15:06:53 +00:00
141 lines
3.1 KiB
Julia
141 lines
3.1 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 |