Files

On-Chain / DeFi Metrics

Public-good on-chain metrics used by Chapter 4 to show how to evaluate "alternative" data for trading alpha. Two feeds, both key-free:

  • DefiLlama — aggregate and per-chain Total Value Locked (TVL), daily granularity, several-year history.
  • CoinGecko — daily coin prices + volumes (OHLCV-lite), bounded to the free-tier 365-day window.

License / Cost

  • DefiLlama: public API, no key, no rate limits advertised. Data is released under the Open Database License (ODbL-1.0), per https://defillama.com/docs/api — attribution "DefiLlama" is required when using the data in published work.
  • CoinGecko: free-tier Public API. Free-tier terms cap history to 365 days and throughput to ~10-50 req/min. See https://www.coingecko.com/en/api/terms for attribution requirements.

Disk footprint: under 5 MB total for the default pull (1 TVL total + 4 chain TVLs + 1 ETH OHLCV file). Runtime: under 1 minute.

Download

# Default: total TVL + 4 major chains + ETH prices
uv run python data/crypto/onchain/download.py

# Just DefiLlama (total + chains)
uv run python data/crypto/onchain/download.py --dataset defillama

# Just ETH prices
uv run python data/crypto/onchain/download.py --dataset coingecko

# Custom chain set
uv run python data/crypto/onchain/download.py --chains Ethereum,Solana,Arbitrum

# Different coin (CoinGecko id, lowercase)
uv run python data/crypto/onchain/download.py --dataset coingecko --coins bitcoin

Output under $ML4T_DATA_PATH/crypto/onchain/:

File Source Contents
defillama_tvl_total.parquet DefiLlama Aggregate TVL across all chains
defillama_tvl_<chain>.parquet DefiLlama Per-chain TVL (e.g. ethereum, solana)
coingecko_<coin>.parquet CoinGecko Daily price_usd, volume_usd (365-day window)

Canonical schema for all files: timestamp (Date), plus one or two value columns.

Loading

from data import load_defillama_chain_tvl, load_coingecko_ohlcv

total_tvl = load_defillama_chain_tvl()                # total across chains
eth_tvl   = load_defillama_chain_tvl("Ethereum")
eth_px    = load_coingecko_ohlcv()                    # ETH, default
btc_px    = load_coingecko_ohlcv("bitcoin")

If a requested parquet is missing, each loader raises DataNotFoundError with the exact command (including the right --chains / --coins flag) to produce it.

Rate limits

  • DefiLlama: no documented cap; we download serially with no artificial delay.
  • CoinGecko: free tier caps at ~10-50 requests/minute. The downloader sleeps 2s between coins by default — fine for the handful used by Ch4. Raise the limit (paid plan) or supply a demo API key if you need more.

Consumers

  • Chapter 4 NB 09 — 09_onchain_fundamentals.py
  • Chapter 4 NB 11 — 11_defi_tvl_evaluation.py (evaluation case study)