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

177 lines
3.7 KiB
Julia

using CSV
using DataFrames
using HTTP
using StringViews
using JSON
using Plots
using StatsPlots
using Colors
theme(:ggplot2)
jlc = Colors.JULIA_LOGO_COLORS;
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&ids=" * join(df.id, ",")
caps = HTTP.get(mktcap_url).body |>
StringView |> JSON.parse
df.mktcap = [caps[id]["usd_market_cap"] ./ 1e9 for id in df.id]
df = df[df.mktcap.!=0, :]
let
scatter(df.confirmationMinutes .+ 0.1, df.mktcap, alpha = 0.5, label = nothing)
title!("Market Cap vs. Confirmation Time")
xlabel!("Confirmation Time (Minutes)")
ylabel!("Market Cap (Billions USD)")
annotate!(12, 425, "Ethereum")
annotate!(45, 975, "Bitcoin")
annotate!(-1, 1000, text("Prices as of: $(today())", :left, 8))
# savefig("caps.svg")
end
fast = df[df.confirmationMinutes.==0, :]
cats = [
"cosmos" "Parachain"
"icon" "Parachain"
"kava" "DeFi"
"nano" "Currency"
"oxygen" "DeFi"
"raydium" "DeFi"
"serum" "DeFi"
"solana" "Smart Contract" # Only smart contract and market cap is way too high
"stellar" "Parachain"
"ripple" "Currency"
] |> x -> DataFrame(x, [:id, :category])
fast = innerjoin(cats, fast, on = :id)
let
@df fast bar(
:id,
:mktcap,
group = :category,
xrotation = 15,
legend = :topleft,
# yaxis = :log10
# fillcolor = [jlc.blue jlc.green jlc.purple jlc.red],
)
title!("Market Caps of Fast Coins")
ylabel!("Market Cap (Billions USD)")
# savefig("fast.svg")
end
currency = fast[fast.category.=="Currency", :]
@df currency pie(:cryptocurrency, :mktcap, title = "Market Cap")
currency