WonderTrader / Engines

wondertrader 四大引擎怎么选:CTA、SEL、HFT、UFT 的分工与延迟口径

这四个引擎经常被误读成「性能从低到高」的四档。官方 FAQ 的说法是按标的数量、单次计算时长与延迟要求分工:标少算得快走同步引擎,标多算得慢走异步引擎,要低延迟才进高频与极速引擎。本文把官方文档里的选型依据、延迟数字的两处口径,以及官方自己记录的延迟优化过程整理成可核对的表。

CTA:事件 + 时间驱动SEL:异步时间驱动HFT:1–2 微秒(官方自述)UFT:175/200 纳秒(官方两处口径)
CTA事件+时间驱动
SEL异步·时间驱动
HFT事件驱动
UFT事件驱动·仅 C++
四引擎驱动方式示意(依据官方文档「WonderTrader的优势」与官方 FAQ「如何选择交易引擎」);示意非官方架构图,延迟数字以正文口径为准。
Comparison

四引擎与执行模块的完整对照

驱动方式与适用规模取自官方文档,延迟数字是官方自述值,官方未完整公布测试环境。

模块驱动方式适用标的与计算时长官方延迟口径适用场景注意点
CTA 同步策略引擎事件 + 时间驱动标的较少;官方 FAQ 给的口径是单策略 50 个标的以内未单独公布单标的择时、中频以下套利主 K 线闭合、且所有已订阅 K 线都闭合后才触发一次重算
SEL 异步策略引擎时间驱动(异步)标的较多;适合单次计算超过 1 分钟的策略未单独公布多因子选股、截面多空按注册的重算时间调度,支持日内、每日、每周、每月等周期
HFT 高频策略引擎事件驱动一般高频或低延迟策略1–2 微秒之间(官方自述)盘口驱动、高频挂撤定位是「向应用层提供高性能底层组件」,会兼顾兼容性与应用层对接,不是极限形态
UFT 极速策略引擎事件驱动超高频、超低延迟README 写 175 纳秒之内;官方文档写 200 纳秒之内延迟敏感的自营场景完全从核心项目剥离,不向应用层提供接口,全部 C++ 实现 —— 无法用 Python 写 UFT 策略
执行单元 WtExecMon独立执行器入口与策略计算解耦不适用把执行环节单独拿出来做算法交易把组合架构中「1+N」的执行部分剥离即可独立使用,可通过实现自己的执行单元工厂扩展算法
统一回测引擎配置项切换 cta/sel/hft/exec/uft随所选引擎而定不适用研发阶段的策略验证官方文档该配置项的注释把 uft 写作 uf,属原文笔误,指的是 UFT 引擎
仿真交易模块 TraderMocker随所选引擎覆盖已支持的股票与期货不适用无柜台条件下的流程演练来自官方更新日志 0.3.6;仿真不等于实盘,撮合与回报细节与真实柜台不同
Latency claims

延迟数字:两处口径和它们的前提

官方在仓库与文档里给出的数字并不完全一致,先把它们并排列出来,再谈这些数字能推出什么、不能推出什么。

来源原文表述测的是什么能推出什么不能推出什么注意点
仓库 READMEUFT 引擎「系统延迟在 175 纳秒之内」引擎内部系统延迟官方在自身测量口径下给出的数量级不能推出你的环境也有同量级延迟与官方文档的 200 纳秒表述存在差异,页面并列保留
官方文档《WonderTrader 简介》UFT「系统延迟在 200 纳秒之内」;HFT「1-2 微秒之间」引擎内部系统延迟HFT 与 UFT 差一个量级不能推出端到端延迟或成交速度官方未在该页公布测试环境
仓库 README(CTA 段)DualThrust 单次重算:Python 约 70 多微秒,C++ 约 4.5 微秒单个策略单次重算耗时同一策略下 C++ 与 Python 的差距量级不能推出所有策略都有同样倍差官方未公布测试机器与数据区间
官方文档《延迟优化日记》五阶段优化后系统延迟 175 纳秒专门的延迟测试工程 WtLatencyUFT优化过程与每阶段量级可追溯不能推出实盘端到端延迟测试环境为 Intel i9-10980XE,未超频、未关闭超线程
官方文档(执行器相关)执行器使用线程池以减少对网络线程的占用架构说明执行链路对网络线程做了隔离不能推出具体延迟收益来自官方更新日志 0.3.6,属版本变更记录
读法建议:把上述数字当作「官方自述的量级」,而不是你可以直接引用的实测结论。要判断是否满足你的要求,只能在自己的柜台、网络与策略上压测;本文不构成任何延迟性能承诺。
Optimization log

官方《延迟优化日记》五阶段

这是官方文档里少见地把优化过程逐步公开的章节,对判断「175 纳秒是怎么来的」很有用。

阶段优化手段(官方原文要点)完成后系统延迟适用场景注意点
第一阶段:UFT 拆分弃用内部标准代码转换、去掉主力与次主力判断、下单接口去掉用户标签、把合约与品种信息在初始化时直接关联、接口数据类型增设合约信息指针1 微秒先砍掉高频路径上的非必要转换去掉主力判断意味着 UFT 不再享受主力合约映射的便利
第二阶段:时间函数延迟测试工具每次模拟 tick 都取系统时间,开销过大;实盘中行情接口已完成时间处理,故测试工具去掉取时间逻辑500 纳秒仅在测试工具层面成立,不改实盘逻辑Windows 与 Linux 下时间函数开销不同,官方记录了 Linux 更慢的现象
第三阶段:字符串用性能探查器定位到字符串切分与格式化开销大;关键路径改自实现查找、格式改预分配缓冲区、结构体里的字符串成员全部改定长数组250 纳秒高频路径上任何字符串操作都要审计结构体改为定长数组会改变应用层访问方式
第四阶段:内存分配瓶颈转到对象创建与释放;引入对象池模板类,内部用 boost 对象池管理分配,频繁创建释放的对象改为从池派生185 纳秒频繁短生命周期对象的场景引入对象池需注意对象生命周期,不能跨池长期持有
第五阶段:哈希表瓶颈集中在合约查询;容器已是高性能哈希表,于是把键改为整型数组并自实现哈希函数,利用整数计算更快的特性175 纳秒合约查询密集的热路径自实现哈希需自行保证键的唯一性与一致性
口径提示:上述五阶段与延迟数字均来自官方文档《延迟优化日记》,官方公布的测试环境为 Intel i9-10980XE、未超频、未关闭超线程。它是官方优化过程的记录,不是你环境的性能预期。
Decision

选型决策:场景到引擎

把官方 FAQ 的判定条件翻译成「你遇到的情况 → 该用哪个引擎」。

你的场景选哪个理由需要接受的代价
跟踪 1–2 个品种做日内择时CTA事件 + 时间驱动,逻辑简单,重算频率可控标的一多就会拖慢整体重算
从数千只股票里逐步筛出目标股池SEL官方明确 SEL 就是为「计算量庞大、耗时也长」的场景定制异步执行,信号与执行之间有调度延迟
需要跨品种配对或中频套利CTA 优先官方把「中频以下的套利」列为 CTA 的典型场景多品种同周期时需注意 K 线闭合顺序
策略依赖盘口与逐笔,要求低延迟HFT事件驱动,官方口径 1–2 微秒仍可兼顾兼容性,不是极限形态
延迟本身就是策略的一部分UFT系统延迟官方口径 175/200 纳秒不能用 Python 写策略,且不支持主力合约映射
只想把执行过程单独复用到别的框架WtExecMon官方把「1+N」剥离成独立算法交易执行器需要自己定义目标头寸的输入来源
Source layout

引擎在仓库里的位置

要读源码或做二次开发,先用这张表定位。以下目录名来自仓库 src 目录的实际条目(2026-09-16 核验)。

目录 / 模块对应能力你要读它的场景注意点
WtCore交易引擎核心理解引擎主循环与调度核心逻辑都在这层,改动风险最高
WtUftCoreUFT 极速引擎独立实现研究极限延迟路径与 WtCore 分离,不向应用层开放接口
WtCtaStraFactCTA 策略工厂新增 CTA 策略类型工厂决定策略的创建与注册方式
WtSelStraFactSEL 策略工厂新增选股策略类型与 CTA 的工厂平行,不要混用
WtHftStraFactHFT 策略工厂新增高频策略类型高频策略对内存与字符串开销更敏感
WtUftStraFactUFT 策略工厂新增极速策略类型仅 C++,应用层无法用 Python 接入
WtExeFact / WtExecMon执行单元与独立执行器实现自定义执行算法执行单元与策略计算分离,各自独立演进
WtLatencyHFT / WtLatencyUFT延迟测试工程复现官方延迟测试官方日记的测试项目为 WtLatencyUFT
Troubleshooting

引擎选型与运行的高频误用

下面几条是官方文档里明确写出的语义与限制,踩中任意一条都会得到「看起来能跑但结果不对」的现象。

现象可能原因核对方法处理方向
策略一直不重算把重算逻辑写进了 K 线闭合回调,但重算只在主 K 线闭合且其余已订阅 K 线都闭合后才触发看官方 FAQ「on_bar 和 on_schedule(on_calculate)有什么区别」把核心逻辑放回重算回调,闭合回调只做特殊响应
SEL 策略信号当天不生效SEL 是异步时间驱动,重算按注册的调度周期触发检查注册的重算周期与调度时间明确周期语义,日级调度需接受次日执行
标的数一多就明显变慢用 CTA 引擎承载了本该由 SEL 处理的多标的选股任务对照本文第一张表的适用规模列换用 SEL,或把标的池收敛到 CTA 适用范围内
想用 Python 写 UFT 策略失败UFT 引擎全部在 C++ 实现且不向应用层提供接口看官方文档与 README 的 UFT 段改用 HFT 引擎,或把策略改写为 C++
延迟体感与官方数字差很多把官方自述的引擎系统延迟当成了端到端预期核对自己的柜台、网络与策略计算耗时自建压测;不要以官方数字作为验收标准
回测里 uft 配置项不被识别官方文档注释把 uft 写作 uf(原文笔误)对照官方文档 usage/mystrategy.html 的配置说明按文档注释实际可用的取值填写,或参考官方 demo
FAQ

常见问题

选型问题大多能在官方 FAQ「如何选择交易引擎」里找到出处,以下是常见追问。

CTA 和 SEL 最本质的区别是什么?

驱动方式与标的规模。CTA 是「事件 + 时间驱动」的同步引擎,适合标的少、计算快的策略,官方口径是单策略 50 个标的以内;SEL 是异步时间驱动,按注册的重算时间调度,适合标的很多、单次计算超过 1 分钟的策略,比如多因子选股。两者都沿用同一套组合执行架构,所以差别不在执行层,而在重算触发方式。

HFT 和 UFT 我该选哪个?

看你对「能不能用 Python」和「延迟要求」的取舍。HFT 官方口径 1–2 微秒,支持 wtpy 开发策略,并且会考虑兼容性与应用层对接;UFT 官方口径 175/200 纳秒,但完全从核心项目剥离、不向应用层提供接口、全部 C++ 实现,也就是只能用 C++ 写策略。如果你还没到必须用 C++ 的阶段,先上 HFT 更现实。

为什么同一个数字有两个版本?

因为官方在两处文档里写的不一样:仓库 README 写 UFT「175 纳秒之内」,官方文档《简介》写「200 纳秒之内」。本文并列保留两处口径而不择一,是为了避免把官方文本差异当成定论。以官方最新文档为准即可,且都不构成对你环境的性能预期。

官方延迟测试环境是什么样的?

官方《延迟优化日记》给出的测试环境是 Intel i9-10980XE、未超频、未关闭超线程,测试项目为 WtLatencyUFT。官方没有公布操作的标的、行情频率与柜台条件,所以这些数字只能作为相对量级参考,不能直接外推。

执行单元和执行器是一回事吗?

官方把它们放在同一执行链路上:组合的目标头寸交给执行器执行,执行内部按执行单元定义的算法下单。官方还提供了独立执行器入口,可以把组合架构中「1+N」的执行部分单独拿出来,作为一个独立的算法交易执行器使用;用户也可以通过实现自己的执行单元工厂来增加算法。

选引擎这件事,EasyClaw 能帮忙判断吗?

不能直接代劳。引擎选型依赖你的柜台权限、标的数量与延迟要求,属于实盘工程决策;EasyClaw 侧提供的是行情数据、技术分析、选股与研究回测类技能,可以帮助你在写策略前做研究验证,但不提供本框架式的引擎选型与实盘执行能力。两者之间没有已证实的集成关系,具体以官方文档与你自己的压测结果为准。

选好引擎,下一步是把它装起来

引擎确定后就要落环境:三条官方安装路径各有前置条件,装完再决定数据怎么落地。