Blankly / 交易所可用性
README 写 14 个交易所,CLI 只给 6 个:四个口径的差异
很多中文教程直接复制 Blankly README 的交易所表格,其中包含 FTX、Coinbase Pro、TD Ameritrade 这些已经发生重大变化的平台。这一页不复制那张表,而是把四个口径逐行摆在一起:README 怎么写、包顶层能 import 出什么、blankly init 实际让你选什么、仓库里到底有哪些目录。四个口径四组答案,你就能判断哪一份应该作为依据。
deployment/exchange_data.py 与仓库目录树整理)。四个口径互不相同,因此「Blankly 支持 X 交易所」这句话必须说明是按哪个口径。为什么同一个交易所有四个答案?四个口径的差异
下表是本站整理的逐行对照。✓ 表示该口径下存在,— 表示缺少,🔸 表示存在但状态有保留。
| 交易所 | README 支持表 | 顶层可 import | blankly init 可选 | 仓库有实现目录 |
|---|---|---|---|---|
| Alpaca(美股) | ✓ 全功能 | ✓ Alpaca | ✓ | ✓ |
| Binance(现货) | ✓ 全功能 | ✓ Binance | ✓ | ✓ |
| Binance Futures | ✓ 全功能 | ✓ BinanceFutures | — | ✓ |
| Coinbase Pro | ✓ 全功能 | ✓ CoinbasePro | ✓ | ✓ |
| Coinbase Advanced | — 未列出 | — 未导出 | — | ✓ 存在目录 |
| FTX(现货) | ✓ 全功能 | ✓ FTX | ✓ | ✓ |
| FTX Futures | 🔸 部分开发中 | ✓ FTXFutures | — | ✓ |
| KuCoin | ✓ 全功能 | ✓ Kucoin | ✓ | ✓ |
| Okx | ✓ 全功能 | ✓ Okx | — | ✓ |
| OANDA(外汇) | 🔸 无 WebSocket | ✓ Oanda | ✓ | ✓ |
| PaperTrade(模拟) | — 未单独列出 | ✓ PaperTrade | — | ✓ |
| Keyless(离线回测) | 🔸 仅回测 | ✓ KeylessExchange | ✓ | ✓ |
| Kraken | 🔸 全列为开发中 | — 未导出 | — | — 无目录 |
| TD Ameritrade | 🔴 仅规划 | — | — | — |
| Webull | 🔴 仅规划 | — | — | — |
| Robinhood | 🔴 仅规划 | — | — | — |
blankly/__init__.py 导出——这是一次未完成的迁移痕迹。③ Binance Futures、FTX Futures、Okx 可以 import 使用,但 blankly init 不会把它们的密钥录入流程给你。为什么四个口径会不一致
这不是文档写错了,而是四个口径的更新节奏和目的本来就不同。理解这点,你就知道该以哪一个为准。
| 口径 | 它的用途 | 更新时机 | 应该怎么用 |
|---|---|---|---|
| README 支持表 | 对外的能力宣传 | 随产品叙事更新,包含规划中的平台 | 当作「路线图」,不能当作「现在能用」 |
| 顶层导出 | 实际能写进代码的类 | 随代码提交更新 | 判断「能不能 import」时以此为准 |
blankly init 的列表 | 脚手架能帮你配置密钥的交易所 | 随 CLI 维护更新,明显滞后 | 判断「开箱能配到哪些」时以此为准 |
| 仓库实现目录 | 源码真实存在范围 | 随提交更新 | 判断「有没有人写过」时以此为准,但注意可能未接好 |
| 接口地址可达性 | 外部服务的实际状态 | 与仓库无关,由服务方决定 | 只能反映探测时点,服务状态会变 |
coinbase_advanced 目录。这种情况说明代码侧也意识到了变化,但迁移没有完成。几个平台的公开状态是什么?本站怎么标注
下表把「仓库里的状态」和「平台自身的公开状态」分开列。第二部分属于第三方事件,与代码质量无关,但会直接决定你的策略能不能下单。
| 平台 | 仓库侧状态 | 平台侧公开状态 | 对你的影响 |
|---|---|---|---|
| FTX / FTX Futures | 代码与顶层导出都仍在 | 该平台的交易服务自 2022 年起已停止(公开已知事实,本站未做连通性实测) | 相关代码路径实际不可用;README 未标注 |
| Coinbase Pro | 代码、导出、CLI 均仍在 | 已迁移至后续交易产品;连接测试地址 api.pro.coinbase.com 在本站探测中不可达 | 密钥连通性检查会失败;需改用新接口路径 |
| TD Ameritrade | 仅 README 列为「规划中」 | 该公司已被收购整合(公开已知事实) | 即使未来实现,平台形态也已改变 |
| Kraken | README 列为「开发中」,仓库无实现 | 平台本身正常运营 | 不要在 Blankly 里规划 Kraken 策略 |
| Binance / KuCoin / Okx | 代码与导出均在 | 平台正常运营 | 可以尝试,但密钥权限与地区可用性需自行确认 |
| Alpaca | 代码与导出、CLI 均在 | 平台正常运营 | 依赖的是已被上游弃用的旧客户端库,需留意兼容性 |
| OANDA | 代码与导出、CLI 均在;README 标注无 WebSocket | 平台正常运营 | 不能用 WebSocket 实时推送 |
__init__.py、读 exchange_data.py、看目录树),你可以自己复核。怎么用三条命令在本地把口径对齐?
与其相信任何一篇教程(包括本站),不如在你自己的环境里跑一遍。下面三条命令分别对应三个口径,输出可直接对照。
看顶层到底能 import 出哪些交易所类
命令:
python -c "import blankly; print(sorted(n for n in dir(blankly) if not n.startswith('_')))"。预期输出里应包含Alpaca、Binance、BinanceFutures、CoinbasePro、FTX、FTXFutures、KeylessExchange、Kucoin、Oanda、Okx、PaperTrade,并且不含Kraken。如果这一步就报 numpy 错误,先去看安装页。看 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 六个。看仓库里真实存在哪些交易所目录
在克隆下来的仓库根目录执行:
dir blankly\exchanges(Windows)或ls blankly/exchanges。逐个进入子目录看是否同时存在接口实现与 API 封装两个文件——只有一个说明这个交易所还没被真正接完整。
按目标该选哪个平台?附风险标注
下表不是推荐榜,而是「在 Blankly 的范围内,哪些平台值得投入时间、需要额外确认什么」的对照。
| 你的目标 | 可考虑的接口 | 前置条件 | 需要注意的风险 |
|---|---|---|---|
| 先离线把策略跑出形状 | KeylessExchange | 一份六列 CSV,无需密钥 | 默认零手续费;必须显式传回测起止时间 |
| 加密货币现货实盘 | Binance / Kucoin / Okx | 交易所账号、API 密钥、下单权限 | Binance 在 settings 里有 TLD 选项;地区可用性自行确认 |
| 加密货币期货 | BinanceFutures / FTXFutures | 期货账户与相应权限 | 工程文档写明期货回测仍在 beta、资金费率处理未完成 |
| 美股模拟盘 / 实盘 | Alpaca / PaperTrade | Alpaca 账号与密钥 | 依赖的客户端库已被上游弃用,需确认兼容性 |
| 外汇 | Oanda | OANDA 账号与 token | README 标注无 WebSocket,只能用轮询 |
| A 股 | 无对应实现 | — | 需要外部数据源 + 自行实现交易规则,见对比页 |
| 已被弃用/失效的平台 | CoinbasePro / FTX | 不建议作为新项目起点 | 见本文「外部状态」一节的标注 |
关于交易所支持的高频问题
仓库侧结论可自行复核;平台侧状态以各平台官方公告为准。
为什么 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 条目。