Blankly / 交易所可用性

README 写 14 个交易所,CLI 只给 6 个:四个口径的差异

很多中文教程直接复制 Blankly README 的交易所表格,其中包含 FTX、Coinbase Pro、TD Ameritrade 这些已经发生重大变化的平台。这一页不复制那张表,而是把四个口径逐行摆在一起:README 怎么写、包顶层能 import 出什么、blankly init 实际让你选什么、仓库里到底有哪些目录。四个口径四组答案,你就能判断哪一份应该作为依据。

依据:README 支持表依据:顶层导出实测依据:exchange_data.py探测日期:2026-09-21
README 表口径14 行,含已失效平台与从未实现的平台
顶层导出口径11 个类可 import,不含 Kraken
CLI 可选口径6 个交易所 + Keyless
仓库目录口径11 个交易所目录,含未被导出的 coinbase_advanced
交易所可用性的四个口径示意(依据 2026-09-21 的 README、发行版顶层导出、deployment/exchange_data.py 与仓库目录树整理)。四个口径互不相同,因此「Blankly 支持 X 交易所」这句话必须说明是按哪个口径。
四口径矩阵

为什么同一个交易所有四个答案?四个口径的差异

下表是本站整理的逐行对照。✓ 表示该口径下存在,— 表示缺少,🔸 表示存在但状态有保留。

交易所README 支持表顶层可 importblankly init 可选仓库有实现目录
Alpaca(美股)✓ 全功能Alpaca
Binance(现货)✓ 全功能Binance
Binance Futures✓ 全功能BinanceFutures
Coinbase Pro✓ 全功能CoinbasePro
Coinbase Advanced— 未列出未导出存在目录
FTX(现货)✓ 全功能FTX
FTX Futures🔸 部分开发中FTXFutures
KuCoin✓ 全功能Kucoin
Okx✓ 全功能Okx
OANDA(外汇)🔸 无 WebSocketOanda
PaperTrade(模拟)— 未单独列出PaperTrade
Keyless(离线回测)🔸 仅回测KeylessExchange
Kraken🔸 全列为开发中未导出无目录
TD Ameritrade🔴 仅规划
Webull🔴 仅规划
Robinhood🔴 仅规划
三处最值得注意的差异:Kraken 在 README 里被标成「开发中」,但仓库里既没有实现目录也没有导出类,是纯占位。② coinbase_advanced 目录真实存在于仓库中,但没有被 blankly/__init__.py 导出——这是一次未完成的迁移痕迹。③ Binance Futures、FTX Futures、Okx 可以 import 使用,但 blankly init 不会把它们的密钥录入流程给你。
成因

为什么四个口径会不一致

这不是文档写错了,而是四个口径的更新节奏和目的本来就不同。理解这点,你就知道该以哪一个为准。

口径它的用途更新时机应该怎么用
README 支持表对外的能力宣传随产品叙事更新,包含规划中的平台当作「路线图」,不能当作「现在能用」
顶层导出实际能写进代码的类随代码提交更新判断「能不能 import」时以此为准
blankly init 的列表脚手架能帮你配置密钥的交易所随 CLI 维护更新,明显滞后判断「开箱能配到哪些」时以此为准
仓库实现目录源码真实存在范围随提交更新判断「有没有人写过」时以此为准,但注意可能未接好
接口地址可达性外部服务的实际状态与仓库无关,由服务方决定只能反映探测时点,服务状态会变
最危险的组合是「README 有、CLI 有、但外部服务已变」。Coinbase Pro 就属于这一类:它在 README 与 CLI 里都还在,但它的连接测试地址在 2026-09-21 的探测中不可达,且仓库里多了一个未被导出的 coinbase_advanced 目录。这种情况说明代码侧也意识到了变化,但迁移没有完成。
外部状态

几个平台的公开状态是什么?本站怎么标注

下表把「仓库里的状态」和「平台自身的公开状态」分开列。第二部分属于第三方事件,与代码质量无关,但会直接决定你的策略能不能下单。

平台仓库侧状态平台侧公开状态对你的影响
FTX / FTX Futures代码与顶层导出都仍在该平台的交易服务自 2022 年起已停止(公开已知事实,本站未做连通性实测)相关代码路径实际不可用;README 未标注
Coinbase Pro代码、导出、CLI 均仍在已迁移至后续交易产品;连接测试地址 api.pro.coinbase.com 在本站探测中不可达密钥连通性检查会失败;需改用新接口路径
TD Ameritrade仅 README 列为「规划中」该公司已被收购整合(公开已知事实)即使未来实现,平台形态也已改变
KrakenREADME 列为「开发中」,仓库无实现平台本身正常运营不要在 Blankly 里规划 Kraken 策略
Binance / KuCoin / Okx代码与导出均在平台正常运营可以尝试,但密钥权限与地区可用性需自行确认
Alpaca代码与导出、CLI 均在平台正常运营依赖的是已被上游弃用的旧客户端库,需留意兼容性
OANDA代码与导出、CLI 均在;README 标注无 WebSocket平台正常运营不能用 WebSocket 实时推送
本站的标注原则:凡是平台侧的状态(是否运营、是否改名),本站在表格里明确标为「公开已知事实」并注明未做实测;凡是仓库侧的状态(是否存在目录、是否导出、CLI 是否可选),本站都直接给出了核对方法(读 __init__.py、读 exchange_data.py、看目录树),你可以自己复核。
自查方法

怎么用三条命令在本地把口径对齐?

与其相信任何一篇教程(包括本站),不如在你自己的环境里跑一遍。下面三条命令分别对应三个口径,输出可直接对照。

  1. 看顶层到底能 import 出哪些交易所类

    命令:python -c "import blankly; print(sorted(n for n in dir(blankly) if not n.startswith('_')))"。预期输出里应包含 AlpacaBinanceBinanceFuturesCoinbaseProFTXFTXFuturesKeylessExchangeKucoinOandaOkxPaperTrade,并且不含 Kraken。如果这一步就报 numpy 错误,先去看安装页。

  2. 看 CLI 实际可选的交易所

    命令:python -c "from blankly.deployment.exchange_data import EXCHANGES as E; print([e.name for e in E])",或直接跑 python -m blankly init 看交互选项。预期输出为 alpaca、binance、coinbase_pro、ftx、oanda、kucoin 六个。

  3. 看仓库里真实存在哪些交易所目录

    在克隆下来的仓库根目录执行:dir blankly\exchanges(Windows)或 ls blankly/exchanges。逐个进入子目录看是否同时存在接口实现与 API 封装两个文件——只有一个说明这个交易所还没被真正接完整。

选择建议

按目标该选哪个平台?附风险标注

下表不是推荐榜,而是「在 Blankly 的范围内,哪些平台值得投入时间、需要额外确认什么」的对照。

你的目标可考虑的接口前置条件需要注意的风险
先离线把策略跑出形状KeylessExchange一份六列 CSV,无需密钥默认零手续费;必须显式传回测起止时间
加密货币现货实盘Binance / Kucoin / Okx交易所账号、API 密钥、下单权限Binance 在 settings 里有 TLD 选项;地区可用性自行确认
加密货币期货BinanceFutures / FTXFutures期货账户与相应权限工程文档写明期货回测仍在 beta、资金费率处理未完成
美股模拟盘 / 实盘Alpaca / PaperTradeAlpaca 账号与密钥依赖的客户端库已被上游弃用,需确认兼容性
外汇OandaOANDA 账号与 tokenREADME 标注无 WebSocket,只能用轮询
A 股无对应实现需要外部数据源 + 自行实现交易规则,见对比页
已被弃用/失效的平台CoinbasePro / FTX不建议作为新项目起点见本文「外部状态」一节的标注
一条通用原则:先用 Keyless 把策略逻辑跑通,再接最小权限的密钥,最后才开下单权限。Blankly 的离线模式让这三步可以完全解耦——这也是它即使停更、仍然值得作为「策略实验框架」使用的原因。
FAQ

关于交易所支持的高频问题

仓库侧结论可自行复核;平台侧状态以各平台官方公告为准。

为什么 README 里的交易所比实际能用的多?

README 的支持表承担的是「产品能力叙事」的功能,所以会把开发中和规划中的平台一起列出来并用颜色区分。而代码侧要等到实现完成才会导出类、CLI 才会加入选项。三个环节更新节奏不同,于是产生了差异。判断能不能用,最直接的办法是执行一次 import 看类是否存在。

Kraken 到底支持不支持?

按四个口径看:README 列了它(标为开发中),但仓库里没有实现目录,顶层也不导出对应类,CLI 也不提供选项。所以答案是「不能」。README 里的那行更接近一个长期规划项。

coinbase_advanced 是什么?

它是仓库里真实存在的一个目录,但没有出现在 blankly/__init__.py 的导出列表里。这通常意味着一次未完成的接口迁移:新代码写了但还没接到对外接口上。本站不对它的完成度下结论,只提示读者:看到目录存在不等于能 import 使用

没有 API 密钥能用 Blankly 做什么?

可以做两件事。第一是离线回测:用 KeylessExchange 加本地价格文件跑完整回测链路。第二是探索内置指标与绩效函数:blankly.indicators 的 28 个指标与 blankly.metrics 的 11 个绩效函数都可以直接对你自己准备的序列调用,不需要连接任何交易所。

怎么确认某个交易所接口现在还能连?

分两步。第一步在本仓库侧确认类存在并能构造(会打印设置默认值)。第二步用最小权限的密钥尝试一次只读调用(例如查账户或查产品列表),不要直接商品下单。本站对 Coinbase Pro 的连接测试地址做了可达性探测,结果为不可达——但那只是 2026-09-21 的一个快照。

为什么 blankly init 的选项比能 import 的少?

因为 CLI 的交易所列表(deployment/exchange_data.py)除了名字,还需要提供「密钥录入字段」和「连通性测试函数」。只有这两样都写好的交易所才会出现在交互列表里。所以 CLI 选项是「能帮你配好密钥」的子集,而不是「能用」的子集。要使用 CLI 不支持的交易所,需要自己手写 keys.json 条目。

下一步:回测跑起来了,结果能不能信?

回测口径对齐之后,真正影响结论的是回测引擎本身。它的工程文档里明确写了哪些模拟是精确的、哪些假设是简化的——这些直接决定你的收益数字有多少是真实的。