news 2026/9/13 4:08:08

使用 DefiLlama 与 CoinGecko 构建 DeFi 链上数据管道:machine-learning-for-trading 的 TVL 替代数据实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 DefiLlama 与 CoinGecko 构建 DeFi 链上数据管道:machine-learning-for-trading 的 TVL 替代数据实战

使用 DefiLlama 与 CoinGecko 构建 DeFi 链上数据管道:machine-learning-for-trading 的 TVL 替代数据实战

【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading

在《Machine Learning for Trading》第三版(本仓库 machine-learning-for-trading)中,第 4 章用真实公开的链上数据演示"替代数据(alternative data)"如何进入量化研究流程。本指南围绕 data/crypto/onchain/README.md 展开,完整讲解两路免密钥公开数据源(DefiLlama 的 DeFi 总锁仓量 TVL、CoinGecko 的币种日频价格/成交量)的获取、落盘、加载与消费方式。读完本文,你将能够一键拉取链上指标到本地 parquet 存储,通过统一 Loader API 读取并用于信号研究,并复现第 4 章完整的替代数据评估框架。

数据集概览:两条免费、免密钥的链上数据源

该数据集定位是"公共善品(public-good)"链上指标,专门服务于第 4 章"理解替代数据"一节中关于如何评估交易 alpha 替代数据的教学场景。两个数据源均为公共 API、无需 API Key:

数据源内容粒度历史范围
DefiLlama全链聚合 TVL 与分链 TVL日频数年(可回溯至 DeFi 行业起步阶段)
CoinGecko币种每日价格 + 成交量(OHLCV 精简版)日频免费档上限 365 天

下载器把两个源的原始 HTTP 响应统一归一化为单频率 parquet 文件(见 download.py),使笔记本通过load_defillama_chain_tvl()load_coingecko_ohlcv()即可消费,而无需在任何 notebook 里写网络请求代码。

默认拉取(1 个全链 TVL + 4 个分链 TVL + 1 个 ETH 价格文件)磁盘占用小于 5 MB,运行时间不超过 1 分钟。

许可与成本边界

  • DefiLlama:公共 API,无 Key、无公开限速。数据按开放数据库许可(ODbL-1.0)发布;在公开发表的作品中使用该数据时,必须注明出处 "DefiLlama"。
  • CoinGecko:免费档 Public API。免费档将历史限制为 365 天,吞吐量约 10–50 次请求/分钟,并有署名要求。

这两条边界不是细节,而是第 4 章评估框架中"法律(Legal)"硬门槛的直接输入:数据本身是公开的链上状态聚合,不构成重大非公开信息,但商用或再分发需遵守各自许可。

下载:一键脚本与全部 CLI 参数

默认使用uv run执行下载脚本(仓库采用 uv 管理 Python 环境):

# 默认:全链总 TVL + 4 条主要链 + ETH 价格 uv run python data/crypto/onchain/download.py # 仅 DefiLlama(全链总 TVL + 分链) uv run python data/crypto/onchain/download.py --dataset defillama # 仅 ETH 价格 uv run python data/crypto/onchain/download.py --dataset coingecko # 自定义链集合 uv run python data/crypto/onchain/download.py --chains Ethereum,Solana,Arbitrum # 换一个币(CoinGecko id,小写) uv run python data/crypto/onchain/download.py --dataset coingecko --coins bitcoin

对照源码 download.py 的 argparse 定义,完整参数表如下:

参数默认值说明
--datasetboth可选defillama/coingecko/both
--chainsEthereum,Solana,BSC,Arbitrum逗号分隔的链名;传空字符串跳过分链(源码中DEFAULT_CHAINS
--skip-totalFalse跳过全链聚合 TVL 序列
--coinsethereum逗号分隔的 CoinGecko 币 id(自动转小写,源码中DEFAULT_COINS
--days365CoinGecko 回溯窗口天数(免费档上限 365)
--data-path$ML4T_DATA_PATH覆盖输出根目录

输出位置由resolve_data_dir()决定(utils/downloading.py),优先级为:CLI 参数--data-path>ML4T_DATA_PATH环境变量 /.env> 仓库默认data/目录。最终文件落在$ML4T_DATA_PATH/crypto/onchain/下:

文件来源内容
defillama_tvl_total.parquetDefiLlama全链聚合 TVL
defillama_tvl_<chain>.parquetDefiLlama分链 TVL(如ethereumsolana
coingecko_<coin>.parquetCoinGecko日频price_usdvolume_usd(365 天窗口)

所有文件采用统一规范 schema:timestamp(Date 类型)加一个或两个数值列。实现细节:DefiLlama 的两个端点https://api.llama.fi/v2/historicalChainTvl(聚合)与https://api.llama.fi/v2/historicalChainTvl/{chain}(分链)返回秒级 epoch,下载器用pl.from_epoch(..., time_unit="s").cast(pl.Date)归一为日期;CoinGecko 的/coins/{id}/market_chart返回毫秒级 epoch 的pricestotal_volumes数组,用毫秒级转换并排序。

加载:统一 Loader API 与缺失提示

数据加载通过 data/crypto/loader.py 中两个加载器完成,它们在 data/init.py 中被导出:

from data import load_defillama_chain_tvl, load_coingecko_ohlcv total_tvl = load_defillama_chain_tvl() # 全链聚合 eth_tvl = load_defillama_chain_tvl("Ethereum") eth_px = load_coingecko_ohlcv() # ETH,默认 btc_px = load_coingecko_ohlcv("bitcoin")
  • load_defillama_chain_tvl(chain="total")chain参数匹配文件名后缀(自动小写),默认"total"返回全链聚合,传入"Ethereum""Solana""BSC""Arbitrum"等返回对应分链;返回timestamp(Date)与tvl_usd(float)两列。
  • load_coingecko_ohlcv(coin="ethereum"):默认 ETH;返回timestamp(Date)、price_usdvolume_usd三列。

若请求的 parquet 缺失,加载器会抛出DataNotFoundError(定义于 data/exceptions.py),错误信息中直接给出可复制的完整下载命令,包括正确的--chains/--coins参数。例如缺失某分链时会提示data/crypto/onchain/download.py --dataset defillama --chains {chain},缺失某币价时会提示... --dataset coingecko --coins {coin},并附上readme=data/crypto/onchain/README.md的完整说明路径;异常还会报告当前解析到的数据根目录及其来源(环境变量 /.env/ 默认),避免读者在错误的数据目录下反复重下。

限速处理与刷新策略

  • DefiLlama:无文档化上限,下载器采用串行请求、无人工延迟。
  • CoinGecko:免费档约 10–50 次请求/分钟。下载器在币与币之间默认 sleep 2 秒(源码常量COINGECKO_SLEEP = 2.0),足以覆盖第 4 章所用的少量币种;需要更多币种时应提升套餐额度或提供演示用 API Key。

对 CoinGecko 而言,免费档窗口固定 365 天,load_coingecko_ohlcv的 docstring 明确提示"重新运行下载器即可刷新"。同时 notebook 中有一个值得一提的数据细节:CoinGecko 免费档会在当日午夜 bar 之上追加一条实时盘中快照,导致最后一天可能重复出现,消费方需要按timestamp去重保留最后一行(09_onchain_fundamentals.pyunique(subset="timestamp", keep="last")11_defi_tvl_evaluation.pygroup_by("timestamp").agg(pl.col(...).last())处理)。

消费端:第 4 章两个实战 Notebook

该数据集在第 4 章(04_fundamental_alternative_data)被两个 notebook 消费:

  • NB 09 — 09_onchain_fundamentals.py:链上基本面入门。核心假设是"资金流入 DeFi 先于以太坊价格上涨",围绕 TVL 与 ETH 价格构建特征:
    • 将 TVL 水平值转换为动量特征tvl_growth,30 日 pct_change)、标准化水平tvl_zscore,90 日滚动 z-score)与三档 regimeexpansion/neutral/contraction,以REGIME_Z = 1.0个标准差为界,z-score 未满窗口期置空而非归入中性档);
    • 用价格两端直接计算前向收益shift(-FORWARD_DAYS) / price - 1,默认 30 日),强调不能用平移尾随收益代替;
    • 由于日频采样与 30 日前向窗口的重叠,所有统计量都用Newey-West HAC 协方差maxlags = FORWARD_DAYS - 1)修正,并统计"样本中真正独立的 30 日窗口数量"(len(tested) / FORWARD_DAYS),得出关键结论:制约研究的不是 TVL 序列(全历史免费),而是价格免费档的 365 天窗口
  • NB 11 — 11_defi_tvl_evaluation.py:完整尽职调查案例,把替代数据评估拆成四个问题——信号(Signal)、数据(Data)、法律(Legal)、商业(Commercial):
    • 信号:3 种信号定义 × 4 个前向窗口(7/14/30/60 天)共 12 对关系,全部用 HAC 修正 t 统计量,并做 180 日滚动相关性看稳定性;结论是"未能证实而非证伪"——12 次测量中最大 |t| 仍不足以越过阈值,且滚动相关性在一年内变号;
    • 数据:审计缺失天数、空值与单日极端变动(阈值 20%),发现极端变动几乎都集中在 2020 年前的增长期,应按日期过滤而非按水平值过滤
    • 法律:硬门槛。数据源自公开链上状态聚合,不构成重大非公开信息,许可要求署名,禁止将原始数据作为产品再分发;
    • 商业:按 AUM(1 千万到 50 亿美元)计算盈亏平衡 alpha(bps),集成成本假设为一次性 40 小时 + 每年 20 小时工程维护、150 美元/小时;
    • 最终裁决:数据干净、许可宽松、成本低,但DefiLlama 不提供历史 vintage(历史版本)快照,序列会被持续重述,因此"数据"维度构成硬门槛,正确动作是从今天开始每日快照建库,一年后再回来重测信号。

延伸阅读

  • 同一仓库的加密市场数据(Binance 永续合约与资金费率溢价指数)见 data/crypto/README.md 与 data/crypto/market/download.py,其加载器(load_crypto_perpsload_crypto_premium)与链上加载器同属于 data/crypto/loader.py,共用相同的DataNotFoundError缺失提示机制。
  • 仓库所有数据加载器的统一入口与完整清单见 data/init.py;数据目录总览见 data/README.md。
  • 环境安装与数据路径配置说明见 docs/installation.md 与 docs/running-notebooks.md。

通过本指南,你可以零成本、免密钥地复现第 4 章从数据拉取、本地缓存、Loader 读取到替代数据四维评估的完整链路,并在自己的研究环境中把同样的评估框架迁移到任意新的替代数据源上。

【免费下载链接】machine-learning-for-tradingCode for Machine Learning for Trading, 3rd edition — from data sourcing to live execution.项目地址: https://gitcode.com/GitHub_Trending/ma/machine-learning-for-trading

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 4:08:04

SAP MD82与BAPI创建客户独立需求的技术解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/13 4:06:53

DVCon China 2021验证方法学解析:UVM架构、覆盖率收敛与形式验证融合

DVCon China 2021虽然已经过去&#xff0c;但那一届论文里暴露出来的验证痛点和技术转向&#xff0c;放在今天依然对得上号。如果你手头正好在做UVM验证平台、或者正在为覆盖率收敛发愁&#xff0c;翻一翻那届的论文清单&#xff0c;会发现很多问题的答案其实两年前就已经有人在…

作者头像 李华
网站建设 2026/9/13 4:06:48

疲劳驾驶检测:多模态时序建模与边缘部署实战

简介&#xff1a;本资源是一套基于Python与机器学习的疲劳驾驶检测系统完整源码实现&#xff0c;面向计算机视觉初学者、机器学习实践者及智能交通方向开发者&#xff0c;旨在解决真实道路场景中因驾驶员疲劳引发的安全隐患问题。压缩包共29个文件&#xff0c;总计151.9MB&…

作者头像 李华
网站建设 2026/9/13 4:05:28

光伏逆变器滤波器设计与控制:LC与LCL选型实战指南

1. 项目概述&#xff1a;为什么光伏逆变器滤波器设计不是“选个电感电容凑合用”的事上交大这个标题背后&#xff0c;藏着光伏并网系统里最常被低估、却最直接影响并网质量与设备寿命的核心环节——滤波器设计。很多人一看到“LC”“LCL”&#xff0c;下意识觉得就是两个电感加…

作者头像 李华