LumiBot / 券商接入
LumiBot 到底接了几个券商:11 个可实例化类与「12 brokers」的口径差
LumiBot 的仓库描述第一句就写着 AI agents that actually place the trade. 12 brokers。但「12」这个数字在仓库里找不到一份能逐行对齐的清单:README 只列了 9 条产品条目,lumibot/brokers/__init__.py 的导出表有 13 项,去掉抽象基类和异常类之后,可实例化的券商类共 11 个,其中还包括一个给开发者抄写的模板类 ExampleBroker。
三个数字都不算错,只是口径不同:导出名、可实例化的类、README 里的产品条目、CCXT 里的交易所,是四种统计方式。把它们混在一起谈,就会出现「LumiBot 支持一百多家交易所」这种既不能证实也不能证伪的说法。
这一页把四种口径摊开,并逐个核对你真正关心的两件事:① 我的券商在不在名单里;② 它在名单里,是不是就等于我的账户已经能下单。第二个问题的答案通常是否定的——券商账户、API Key、资产类别授权、地区可用性都在这条链上,缺一项就走不通。
- 仓库:Lumiwealth/lumibot,默认分支
dev - 券商导出表:
lumibot/brokers/__init__.py的_NAME_TO_MODULE(13 项) - PyPI wheel 内
lumibot/brokers/共 15 个文件,与dev分支目录一致 - 采集日期 2026-09-22;本站未连接任何券商账户、未实盘下单
brokers/__init__.py 13 项,去掉基类与异常类后 11 个可实例化类(含模板类)lumibot/brokers/__init__.py 与 README,2026-09-22 采集)。两侧口径不同,本站只并置事实、不代替官方结论;示意图不代表任一券商的实际可用性。四个数字:13、11、9、15,各自数的到底是什么?
下面每一行都能自己复现:打开 lumibot/brokers/__init__.py 数导出项、打开 README 数产品条目、把 PyPI 的 wheel 解压数目录文件。数出来的数量不同,是因为统计对象不同,不是因为有人在说谎。
| 口径 | 数量 | 包含什么 | 不包含什么 | 注意点 |
|---|---|---|---|---|
| 官方仓库描述 | 12 brokers | README 首屏与仓库 About 里的宣传口径 | 仓库里没有一份「这 12 个是哪 12 个」的清单可以逐行对齐 | 引用时应写明「这是官方自述数字」,不要说成「代码里核验到 12 个」 |
| README「Supported Brokers」 | 9 条产品条目 | Alpaca、Interactive Brokers 与 IBKR REST、Tradier、Schwab、Tradovate、TopstepX(via ProjectX)、Bitunix、Polymarket、selected CCXT | 不把 Coinbase、Kraken 等单列成条目 | 这是「产品」口径:把 CCXT 那一句展开成多家交易所,条目数立刻变化 |
brokers/__init__.py 的 _NAME_TO_MODULE | 13 项 | Alpaca、Bitunix、Broker、LumibotBrokerAPIError、Ccxt、ExampleBroker、InteractiveBrokers、InteractiveBrokersREST、ProjectX、Polymarket、Schwab、Tradier、Tradovate | 不区分「基类 / 异常类 / 真实券商 / 模板类」 | 这是最容易复现的核对方式,但它是「导出名」口径 |
| 可实例化的券商类 | 11 个 | 上表 13 项减去抽象基类 Broker 与异常类 LumibotBrokerAPIError | 其中 ExampleBroker 是给开发者抄写的模板,不对应真实市场 | 本站全站采用这个口径,并在需要时明确标注「含 1 个模板类」 |
lumibot/brokers/ 目录文件 | 15 个文件 | 14 个 .py 加 __init__.py | 目录里还包含 broker.py 基类、example_broker.py 模板、oauth_refresh_mode.py 与 trade_event_priority.py 两个非券商模块 | 数文件会把基类、模板、辅助模块一起算进来,得到最大的那个数字 |
| CCXT 自动识别凭据路径 | 3 家 | Coinbase、Kraken、WEEX | 其余交易所不在这条免配路径里 | 「自动识别」与「能不能手动配好」是两件事,见下一节 |
| CCXT 有回测示例的交易所 | 6 家 | Kraken、Binance、KuCoin、BitMEX、Bybit、OKX | 不等于能实盘交易,也不等于自动识别凭据 | 回测示例名单与实盘路径名单是两份不同的清单,不要互相替代 |
| 覆盖资产类别 | 7 类 | 股票、期权、期货、外汇、加密、指数、预测合约 | 不含 A 股券商通道 | 判断「能不能用」应先看资产类别,再看券商;两者要同时满足 |
11 个可实例化类分别是做什么的
这一节把 brokers/__init__.py 里能实例化的 11 个类逐个摊开。「覆盖市场」一栏写的是该模块对应的资产范围,不是「你的账户一定能交易」;后者取决于券商侧的授权与地区可用性。
| 类名 | 模块文件 | 覆盖市场 | 备注 | 注意点 |
|---|---|---|---|---|
Alpaca | alpaca.py | 美股与 ETF(以券商实际支持为准) | 官方 README 里出现频率最高的券商示例 | paper 与 live 是靠配置区分,不是两个类;先用 paper 跑通再考虑切换 |
Bitunix | bitunix.py | 加密(含合约) | 官方在券商行为表里为它单列《Bitunix futures submission contract》一节 | 加密合约的提交契约与美股差异很大,不要把美股的下单经验直接套过去 |
Ccxt | ccxt.py | 由 CCXT 覆盖的加密交易所(选择性) | 一个类背后是一组交易所,而不是一家 | 「用了 Ccxt 类」不等于「所有 CCXT 交易所都能用」,见本页第三节 |
ExampleBroker | example_broker.py | 无真实市场 | 给开发者抄写自定义券商适配的模板实现 | 它不是可交易的券商;本站把它计入 11 个类时会明确标注为模板类 |
InteractiveBrokers | interactive_brokers.py | 股票、期权、期货 | IBKR 的传统接入路径 | 通常需要本地网关与会话管理,配置成本高于纯 REST 的券商 |
InteractiveBrokersREST | interactive_brokers_rest.py | 股票、期权、期货 | IBKR 的 REST 变体,另有独立的 interactive_brokers_rest_backtesting 回测模块 | 同一品牌两条接入路径,选错会在配置阶段就卡住,先确认自己要哪一条 |
ProjectX | projectx.py | 期货 | 对应 README 里的 TopstepX 期货路径 | 期货有独立的到期与移仓规则,官方另有 FUTURES_ROLL_POLICY 文档 |
Polymarket | polymarket.py | 预测合约 | 框架里为预测合约单独实现的一类 | 预测合约的行情、结算与胜负判定与证券完全不同,不要当成「又一个加密交易所」 |
Schwab | schwab.py | 股票 | 官方另有 SCHWAB_BROKER_RESILIENCE 文档讨论连接韧性 | 它使用 OAuth 授权流程,凭据刷新方式与普通 API Key 不同 |
Tradier | tradier.py | 股票、期权 | 依赖独立的 lumiwealth-tradier 外部包 | 它是被包了一层的外部依赖,不是纯自研适配;升级时要一起看该包版本 |
Tradovate | tradovate.py | 期货 | 券商行为表中为它单列一节 | 期货账户通常与股票账户分开申请、分开授权,别假设账户通用 |
四组名单,别合并成一句「支持全部 CCXT」
中文教程里最常见的一句失真就是「LumiBot 通过 CCXT 支持一百多家交易所」。官方原话恰恰相反:Lumibot does not claim blanket support for every CCXT exchange。下面把 README 里散落的四组名单拆开列。
| 名单类别 | 包含的交易所 | 出处 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 自动识别凭据路径 | Coinbase、Kraken、WEEX | README「Supported Brokers」段 | 想少写配置、直接用这三家的情况 | 这三家之外要走手动 CCXT 配置路径,不要以为填错字段也能自动识别 |
| 手动 CCXT 配置路径 | KuCoin、Binance、BitMEX | README 同段 | 愿意按文档手写配置字段的情况 | 手动配置意味着更多字段要自己填对,出问题时先怀疑配置而不是框架 |
| 有回测示例的交易所 | Kraken、Binance、KuCoin、BitMEX、Bybit、OKX | README 数据源段 | 想先跑回测验证想法、暂不接实盘 | 有回测示例 ≠ 有实盘路径;这两份名单不能互相替代 |
| 官方明确不承诺的范围 | 除上述名单外的其他 CCXT 交易所 | README 原文:does not claim blanket support for every CCXT exchange | 看到任何「支持全部 CCXT」的说法时用来对照 | 这句话是官方自己写的,引用时保留原文,不要改写成「基本都支持」 |
| 版本门槛 | WEEX 需要 ccxt>=4.5.50 | setup.py 与 requirements.txt 的行内注释 | 打算用 WEEX 时先确认依赖版本 | 注释原文是 4.5.50+ includes WEEX exchange support;低版本装了也识别不到 |
| 与 11 个类的关系 | Ccxt 只占 11 个类中的 1 个 | lumibot/brokers/__init__.py | 需要对外说明「支持几家」时确定口径 | 把 CCXT 展开成上百家,就等于把「11 个适配器」偷换成「上百家券商」,两种表述不能混用 |
「支持」不等于「你已经能交易」:八项前置条件
下面这些条件里,只有一项是框架能替你解决的。「缺了会怎样」一列写的是你在实际使用中最可能遇到的暴露方式,用来反推该先准备什么。
| 前置条件 | 谁负责 | 缺了会怎样 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 券商账户 | 你 | 没有账户就没有可下单的标的,即使 paper 模式通常也需要先注册 | 任何实盘或纸交易场景 | 账户类型(现金 / 保证金、个人 / 机构)会影响可用功能,先确认自己开的是哪一种 |
| API Key 与密钥 | 你 | 拿不到行情或下不了单,通常以鉴权类错误暴露 | 所有需要连接券商的场景 | 密钥只放环境变量或本地凭据文件,不要写进策略代码或提交到公开仓库 |
| 账户权限开关 | 你(在券商侧) | 券商侧关闭了期权或期货权限时,代码没问题也会被拒单 | 期权、期货等有额外授权要求的资产 | 这是券商侧的门槛,框架无法绕过;排查时要区分「代码报错」与「券商拒单」 |
| paper 与 live 的区分 | 你 | 用错环境可能把测试单打到真实账户 | 第一次接入任何券商时 | 官方示例用配置项(如 PAPER)区分;务必先跑 paper 模式 |
| 地区与账户可用性 | 券商方 | 地区不支持时开户或接口会直接不可用 | 境外券商的账户与服务范围 | 本站不提供开户或合规建议;以券商对你所在地区的实际支持为准 |
| 资产类别覆盖 | 框架 + 券商 | 框架里有模块但券商不支持该资产时,仍然不能交易 | 想交易期权、期货或预测合约 | 框架侧与券商侧的支持范围要同时满足,只看一边会得出错误结论 |
| 行情数据订阅 | 你(或托管平台) | 缺数据时回测跑不起来,或只能拿到降级后的数据 | 期权、期货这类需要更细历史数据的回测 | ThetaData 属可选 extras 依赖;仓库里另带一个约 39 MB 的 ThetaTerminal.jar,本机实测该 jar 确实在 PyPI 的 wheel 里 |
| 模型凭据(仅 AI 路径) | 你(或托管平台) | AI agent 没有模型凭据时无法完成决策 | 使用 agent 类策略时 | 这是 AI 路径的额外前置条件,与券商连接是两件独立的事,别混在一起排查 |
券商行为表:为什么官方自己说「还没完」
仓库里有一份 docs/BROKER_ORDER_SEMANTICS.md,按券商与资产类别记录订单与成交行为。它的价值在于承认了「不同的券商会怎么做是券商与品种特定的」,但官方同一份文档里也写明它还缺一步。
| 券商 | 资产类别 | 行为表覆盖 | 覆盖到什么程度 | 注意点 |
|---|---|---|---|---|
| Alpaca | 股票 | 有(行为表中独立一节) | 记录该券商下的订单与成交表现 | 行为表是 append-only,只追加不修改,老条目不一定反映券商当前的接口行为 |
| Schwab | 股票 | 有 | 独立一节 | 另有专门的连接韧性文档,长连接类问题优先看那份 |
| Tradier | 股票、期权 | 有 | 独立一节 | 期权与股票在成交语义上可能不同,按资产类别分别读,不要用股票一节推断期权 |
| Interactive Brokers | 股票、期权 | 有 | 独立一节 | REST 变体是另一条接入路径,读行为表时要确认自己走的是哪一条 |
| Interactive Brokers | 期货 | 有(期货单独成节) | 期货与股票在行为表中分开记录 | 期货另有到期与移仓的专门策略文档,回测与实盘都要考虑换月 |
| Tradovate | 期货 | 有 | 独立一节 | 期货账户通常独立授权,开好账户不等于拿到接口权限 |
| ProjectX | 期货 | 有 | 独立一节 | 对应 README 里的 TopstepX 路径,注意别与其它期货券商的行为混读 |
| Crypto(Coinbase) | 加密 | 有 | 独立一节 | 加密是 24/7 交易,日历、结算与时区口径与股票不同,回测参数要另设 |
按资产类别反查券商,而不是按名单长短挑
选券商最省时间的顺序是:先确定你要交易什么资产 → 再看哪几家覆盖它 → 最后核对账户与授权。倒过来做(先挑一家看着顺眼的,再想能交易什么)通常会在权限环节折返。
| 你要交易什么 | 先看哪个券商 | 理由 | 第一件该做的事 |
|---|---|---|---|
| 美股与 ETF,先跑通整个流程 | Alpaca | 官方 README 示例最完整,paper 与 live 用配置切换,适合第一次接入 | 申请账户并取得 API Key,在 paper 模式跑通一个最小策略再谈实盘 |
| 美股期权(单腿) | Tradier 或 InteractiveBrokers | 行为表中两家都覆盖股票期权,可对照阅读 | 确认账户已开通期权权限,并核对期权数据源是否满足你的回测需求 |
| 美股期权(多腿组合) | 支持整包提交的券商 | 多腿是原子提交、fail closed:券商不支持整包提交时,会在提交任何一条腿之前就拒绝,不会拆成子订单 | 先确认目标券商是否实现 package 提交,详见下单与成交 |
| 期货(含微型合约) | ProjectX、Tradovate 或 InteractiveBrokers | 行为表为三家各列一节,且 IBKR 期货单独成节 | 确认期货行情订阅与到期移仓规则,回测时把换月成本考虑进去 |
| 外汇 | 取决于券商自身的覆盖范围 | 框架支持外汇这一资产类别,但具体券商覆盖需要逐个核对 | 先用该资产类别跑一次回测,确认数据源确实能取到你要的品种 |
| 加密现货与合约 | Bitunix 或 Ccxt 路线 | Bitunix 有独立的期货提交契约章节;CCXT 覆盖多家交易所但为选择性支持 | 先确认目标交易所属于哪一组 CCXT 名单(自动识别 / 手动配置 / 仅回测示例) |
| 预测合约 | Polymarket | 框架里为预测合约单独实现了模块 | 单独了解预测合约的行情与结算规则,不要套用证券的收益口径 |
| 只想本地回测,暂不接券商 | 先不接券商 | 回测可以只用免费或付费数据源完成,不需要券商密钥 | 先看数据源与路由,确认你能拿到的历史数据够不够 |
关于 LumiBot 券商接入的高频问题
以下回答基于 2026-09-22 对官方仓库源码、README 与 PyPI wheel 内容的核对;涉及接口行为的以官方仓库实现与券商侧规则为准。本站未连接任何券商账户、未实盘下单,也不提供开户与合规建议。
LumiBot 到底是 11 个券商还是 12 个?
三个数字口径不同:代码导出表 13 项(brokers/__init__.py 的 _NAME_TO_MODULE)、去掉基类与异常类后 11 个可实例化类(其中 ExampleBroker 是给开发者抄写的模板,不对应真实市场)、README 列 9 条产品条目;官方仓库描述则写「12 brokers」,但仓库里没有一份 12 条清单可以逐行对齐。本站的做法是写清楚口径,而不是替官方选定一个数字。你要对外引用时,建议也写明是「代码口径」还是「官方自述」。
README 里的「selected CCXT」到底支持哪些交易所?
官方在 CCXT 上给了四组口径不同的名单:自动识别凭据路径是 Coinbase、Kraken、WEEX;手动配置路径是 KuCoin、Binance、BitMEX;有回测示例的是 Kraken、Binance、KuCoin、BitMEX、Bybit、OKX;此外官方明确写明不承诺覆盖每一个 CCXT 交易所。注意 WEEX 还需要 ccxt>=4.5.50 这一版本门槛。四组名单用途不同,不能合并成一句「支持很多家」。以官方 README 与实现为准。
框架里有这个券商模块,是不是就等于我能交易了?
不是。券商账户、API Key 与权限、paper 与 live 的环境区分、资产类别授权(尤其是期权与期货)、地区可用性,都需要同时满足。框架只提供适配代码;券商侧的授权与拒单规则不在框架能控制的范围内。这也是本站把「支持」这一栏写成「覆盖市场」而不是「可用」的原因。排查时按「账户 → 密钥 → 权限 → 环境 → 资产类别 → 数据」的顺序走,比先怀疑代码更快。以官方文档与券商实际规则为准。
我人在中国大陆,能直接接这些券商吗?
本站无法替券商回答这个问题,也不提供开户或合规建议。可以确认的是:框架的券商清单以美股、期权、期货、外汇、加密与预测合约为主,不包含 A 股券商通道;境外券商的账户能否开立、接口能否访问,取决于券商对你所在地区的实际支持与你的账户类型。如果你需要的是 A 股相关的研究与数据能力,这条路线并不匹配,建议先换一个判断起点。具体以券商官网与你所在地的适用规定为准。
券商行为表写得很详细,能直接当交易规则用吗?
不建议。那份文档是按券商与资产类别记录的 append-only 行为表,官方在同一份文档里把「让文档变成事实」(原文 turn documentation into truth)列为后续必做项,也就是还需要券商行为 smoke test 来验证。合理用法是:把它当作已知差异与设计意图的索引,用来预判可能出问题的地方;真正下单前应在 paper 环境自己验证关键路径。文档中还单列了 Bitunix 期货提交契约与两个加密相关不变量,说明加密与期货的边界条件比股票更多。以官方仓库实现为准。
期权和期货需要额外的账户授权吗?
通常需要。券商侧一般会对期权与期货单独审核并默认关闭,代码侧准备得再完整,券商权限没开也会被拒单。排查时先区分「框架报错」与「券商拒单」:前者通常出现在本地日志里,后者会在券商侧留下记录。另外期货还有到期与移仓的问题,回测与实盘都要考虑换月成本。以券商账户规则与官方文档为准。
我只想跑回测,需要先接一家券商吗?
不需要。回测可以只用数据源完成:免费日线走 Yahoo,付费或券商自带的数据源按需选择,也可以加载自己的 CSV 文件。券商密钥只有在你要提交订单时才需要。建议顺序是:先用数据源把回测跑通,再决定要不要接券商、接哪一家。数据源的口径差异与路由写法见数据源与路由。以官方文档为准。