回测不用重写就能上实盘,这事 NautilusTrader 真的做到了吗?

发布时间:2026/10/15 21:23:33
回测不用重写就能上实盘,这事 NautilusTrader 真的做到了吗? 原创不易,转载请标明出处及原作者。文中示例仅用于技术讨论,不构成任何操作建议。量化策略开发应以学习和技术交流为目的。本号不荐股、不卖课、不承诺收益。市场有风险,请合法合规投资。本文约 4800 字 | 预计阅读 12分钟,后有代码和开源仓库使用路径,建议先收藏。NautilusTrader 不是一个策略库,也不是一个回测工具。它是一套完整的交易引擎,交易系统的地基。GitHub 上 29740 个 star、3949 个 fork,LGPL-3.0 协议,2018 年立项,nautechsystems 维护,到今天还在高频提交。它要解决的是这么一件事。市面上大多数量化框架,把研究阶段和交易阶段分成了两套东西。研究用 pandas 一把梭,策略逻辑验证完,等真要上市场,行情怎么接、订单怎么报、仓位怎么算、断线怎么重连、对不上账怎么办,全部推倒重写一遍。这套重写的活儿往往比写策略本身还费时间,而且改一个参数要记得两边都改,忘一边就等着实盘给你惊喜吧。它的思路是把地基先铺好。研究和实盘踩在同一块地基上。换句话说,你写策略的那部分代码,跑回测和跑实盘是同一份。差的是接哪个交易所。一、它的结构长什么样这一点是理解它的关键,不然后面全看不懂。它是两层结构,底下那层用 Rust 写,上面那层用 Python。底下那层 Rust 内核负责所有"不能慢"和"不能错"的东西。行情数据进来、订单撮合、持仓与资金计算、风控校验、执行算法、跟交易所的通信,全在这一层。它跑在 tokio 异步运行时上,内存分配器用的是 mimalloc,时间精度是纳秒级。上面那层 Python 只负责一件事,写策略。你写一个类继承 Strategy,订阅 K 线或者盘口,在回调里下判断要不要下单。这部分是 Python 舒服的那部分,不用跟内存和线程打交道。中间靠 PyO3 粘起来。这也是为什么装完包要 60MB,里面塞的是完整的 Rust 运行时。它内部还有几个核心组件,值得知道名字,因为文档里到处是它们。`Cache` 数据缓存。行情和账户状态都存在这里,策略查询走它`MessageBus` 消息总线。组件之间靠它通信,不直接互相调用`Portfolio` 持仓与账户。算仓位、算盈亏、算保证金`RiskEngine` 风控。下单前校验,拒不合规的订单`ExecutionEngine` 执行。把订单送到交易所,收回执`Actors` 参与者。不止策略能做 Actor,行情订阅、对账逻辑都可以做成 Actor 挂进去还有一点它的设计取向要留意,它的 API 分高低两档。低层 `BacktestEngine` 你可以随便拆开组装,控制最细,但没有通往实盘的路;高层 `BacktestNode` 配置化、有数据目录、能批量跑,官方推荐用这个,它才是能过渡到实盘的那条路。所以别一上来就用低层 API 写策略,写完发现上不了实盘。资产类别上它是资产无关的,不绑定某一类品种。股票、期货、期权、外汇、加密货币、博彩投注,都能塞进同一套系统研究。二、作者自己怎么说它的自我介绍里有一句话我盯着看了很久。它说:回测和实盘用同一套架构,策略代码验证完可以接着往真实市场走。紧接着又补了一句,说实盘依然会引入场所、传输、时序、持久化、外部活动和对账这些行为,模拟未必能复现。先承认一样再承认一句,这种写法在我看过的项目文档里不多。我这次就想搞清楚的是,前半句到底成不成立,后半句在实操里会撞到什么样的墙。下面按顺序来。先看它怎么装,再验卖点,然后是我踩的坑和跑出来的数。它的 pip 包 60MB,因为里面塞了完整的 Rust 运行时(mimalloc 内存分配器、tokio 异步网络、rustls 加密、PyO3 绑定)。前置条件是 Python 3.13 或 3.14,装完不需要你碰 Rust 工具链,因为官方直接给了预编译轮子。我是在一台 64GB 内存的 Mac mini 上装的。终端里跑 `pip install` 时加上预发布开关(文档里写作双连字符加 pre 那个参数),一条命令搞定。装完我第一件事是去核实它到底装成了什么版本,而不是急着写策略。装完顺手看了一眼它自报的环境。nautilus_trader 2.0.0rc6,nautilus_core 0.65.0,rustc 1.98.1,numpy 2.5.3,pandas 3.0.6,precision high(128-bit, 16 dp),profile release。precision 那一行我盯着看了半天。128-bit,16 位小数。你平时写 Python float 是 15 到 17 位有效数字,数字上看着差不多,但它内部用的是十进制定点数算钱。你在代码里写 0.1,它不会给你算出 0.1000000000000000055 这种惊喜。这不是炫技,是交易所级别系统的基本要求。但它确实带来一个副作用。我写代码时得先想一遍这个数走的是哪条路径,不能像平时那样随手一算就信。三、怎么装安装这件事本身不难,难在你要知道自己装的是什么。第一步是装 Python 3.13。注意不是 3.12,官方明确写了 3.13 起。3.14 也支持。第二步是加预发布开关装 rc 版。pip install -U nautilus_trader --pre那个 pre 参数必须加。截至写稿,PyPI 上没有正式的 2.0.0,只有 `2.0.0rcN` 系列,我用的是 rc6。第三步是验一下版本。python -c "import nautilus_trader; print(nautilus_trader.__version__)"打出 `2.0.0rc6` 就算成了。60MB 的包,几十秒下完,比装个带 CUDA 的 PyTorch 轻。装完第一件事别急着写策略,先去看它自带的那句警告。文档里明确写着,不要在生产环境用开发轮子,特别是实盘控制真金白银的时候。这句话不是客套,因为它同时还提醒你 TRACE 级别的日志会把 WebSocket 原始报文打出来,里面可能夹着某些场所的认证信息,分享日志之前要脱敏。一个交易引擎主动提醒你别乱开日志,这个细节比星标数更能说明团队的成熟度。以上是装上就能用的部分,往下是动手部分。四、核心卖点我验证了,是真的我不想只读文档就下判断,所以写了个脚本,把同一个策略类分别挂到回测引擎和模拟实盘节点上跑。这里要先讲一下它有两层 API。低层是 `BacktestEngine`,你可以直接往里塞

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询