一个反共识的起点:做市回测最大的坑,不是策略
配套媒体
本页对应的 PPT 与演示视频
下载没反应?点这里复制直链
侧边栏预览窗口(Electron webview)会拦截下载,把下面的链接复制到 Chrome / Edge 地址栏打开即可保存。
../../HFTENGINE-recommend.pptx../../HFTENGINE-recommend.mp4本文目录
📌 核心价值:它刻意不算 PnL,只把订单簿逐帧放给你看
HFTENGINE 是 hftbacktest 做市回测引擎之上的回放控制台:真实 Binance Futures 订单簿数据、tick 级重放、每个挂单的队列位置、feed 与订单双通道延迟——它不告诉你"赚没赚",只告诉你"引擎当时看到了什么、决定了什么"。
⚠️ 风险提示:本文仅作技术交流,不构成投资建议。股市有风险,投资需谨慎。

大多数人做回测,第一眼看的是权益曲线:曲线漂亮,策略就能用。
但在做市(market making)这个场景里,这个习惯是危险的。做市的边际来自盘口微观结构——你挂单排在队列第几位、数据到达晚了多少微秒、订单响应慢了多少——这些变量在 K 线级回测里全部不存在。曲线漂亮,可能只是"假装成交"的假象:回测引擎默认你的单永远排第一、数据永远即时到达,于是每一笔成交都比真实世界更顺滑。
HFTENGINE 的立场很明确(README 开篇就写了 "Before you think about trading this"):
它是回测器,不是交易机器人——它不计算也不显示 PnL/权益,不放任何真实订单。
它把"结果"从视野里拿掉,只保留"过程":引擎逐帧看到什么、决定什么、排队多深、延迟多少。这是把回测从"验证策略好不好用"拉回到"验证执行保真度够不够"——后者才是前者的前提。
📌 什么是 HFTENGINE?
HFTENGINE 是一个针对 hftbacktest 做市回测的回放控制台。它运行 hftbacktest 自带的教程策略(Queue-Based Market Making、High-Frequency Grid Trading 等),基于真实录制的 Binance USDT-M 期货订单簿数据,把引擎的决策过程逐帧可视化:
- 本地订单簿(L2 深度重建)
- 每个 resting order 及其交易所侧队列位置估算
- feed 延迟与订单延迟
- 市场成交与执行
- 采集器录制的原始 feed
- 引擎自身运行统计
技术栈是三层:Rust runner(hftbacktest crate 之上的策略+帧记录器)+ Vite + TypeScript 文本模式仪表板(IBM VGA 位图字体风格)+ Python 工具链(录制/转换/会话构建)。
核心定位:执行保真度回放台——先看引擎"看见的世界",再谈策略。
✨ 六大数据面板

横屏下,六个面板同屏铺开,一帧一帧地走:

仪表板支持 URL 参数控制布局、面板开关、缩放与播放;横屏竖屏两套布局,手机竖排模式也能看完整会话。

🔬 逐帧回放:三个关键视角
视角 1:订单簿——引擎眼中的盘口
订单簿面板重建本地 L2 深度:最优买卖价、盘口各档挂单、tick size。策略的定价决策(reservation price、half spread)全部基于这张表。

视角 2:队列位置——你的单排第几
这是多数回测框架缺失的一块。HFTENGINE 对每个 resting order 给出交易所侧队列位置估算:你挂单的队列前面还有多少量。做市成交模拟直接依赖这个估算——队列排不到头,挂单就不该成交。

视角 3:双通道延迟——数据晚到、订单慢响应
feed 延迟(行情到达时延)和订单延迟(下单到交易所响应时延)是两条独立通道,分别计时。回测里,策略"看见"盘口的时刻、订单"落地"的时刻,都按录制的真实时延推进,而不是假设即时。

🎬 数据从哪来:自己录,零 API key
HFTENGINE 的工具链可以从 Binance 公共 websocket 直接录制订单簿与成交流——不需要 API key,不碰账户:
# 启动录制(公共 websocket,无需 API key)
.venv/Scripts/python tools/collect.py start --symbols BTCUSDT ETHUSDT
# 查看状态
.venv/Scripts/python tools/collect.py status
# 优雅停止(Ctrl+C 收尾,完成 gzip 压缩)
.venv/Scripts/python tools/collect.py stop

录完的原始数据一条命令转成可回放会话:
.venv/Scripts/python tools/session.py --raw data/raw/btcusdt_20260915.gz --name btcusdt_20260915
cd dashboard && npm run dev # http://127.0.0.1:5180/?session=btcusdt_20260915
仓库内置 data/sample/ 示例数据,克隆下来就能先回放官方样本会话。
🛠️ 快速上手(Windows,一次配置)
# 前置:Rust 工具链(MSVC)、Python 3.11+(uv)、Node 18+
git clone --recursive https://github.com/mirkovicdev/hftengine
cd hftengine
uv venv --python 3.13 .venv
uv pip install --python .venv/Scripts/python.exe hftbacktest numpy polars numba
(cd hftbacktest && cargo build --release -p collector)
(cd runner && cargo build --release)
(cd dashboard && npm install)
注意:hftbacktest 是 git submodule,必须 --recursive 克隆,或事后执行 git submodule update --init。
仓库结构很干净:
hftengine/
hftbacktest/ nkaz001/hftbacktest 的克隆(Rust crate + Python 包 + 数据收集器)
patches/ 对该克隆的唯一改动:只读队列位置 getter
runner/ Rust binary:策略 + 帧记录器
dashboard/ Vite + TypeScript 回放 UI(文本模式,IBM VGA 位图字体)
tools/ collect.py / prepare.py / session.py / hbr.py
data/ raw/ npz/ latency/ recordings/ sample/
值得注意的细节:patches/ 里对 hftbacktest 的改动只有一处——加只读队列位置 getter。回放台是"引擎之上的观察层",不动引擎内部。
📊 与常规回测框架对比

一句话总结差异:常规框架回答"策略赚不赚",HFTENGINE 回答"你的成交假设有多真实"。它不替代策略研究框架,而是给执行假设做体检。
💡 适用场景
- 做市策略研究者:验证队列位置、延迟建模是否扭曲了你的成交假设
- HFT 回测质检:在信任任何策略回测之前,先回放一段真实数据看看引擎的"视野"
- 教学/演示:文本模式仪表板逐帧展示"做市引擎在 tick 级世界里的决策过程"
- ❌ 不适合:要权益曲线、要参数寻优、要实盘下单的场景(它刻意不做这些)
💰 开源协议
GitHub 仓库:mirkovicdev/HFTENGINE(⭐226,2026-09 新建,根目录附 LICENSE 文件) 上游引擎:nkaz001/hftbacktest(文档见 hftbacktest.readthedocs.io)
💡 数据零门槛:录制走公共 websocket,无需 API key,无需付费数据源。
🎯 总结
HFTENGINE 的价值不在"多了一个回测工具",而在它把做市回测的注意力从权益曲线拽回到执行保真度:真实录制的订单簿、tick 级逐帧重放、队列位置估算、双通道延迟计时——所有让"回测成交"和"实盘成交"产生偏差的变量,它都摆到台面上给你看。
先验证引擎看见的世界是真的,再相信它算出来的结果。
推荐指数: ⭐⭐⭐⭐(做市回测/执行保真度方向是独一档;项目 2026-09 新建,生态仍在早期)
适合人群: 做市策略研究者、HFT 回测质检、想理解 tick 级执行细节的量化工程师
立即体验: GitHub 仓库
数据截至 2026-09-21,最新信息请以仓库为准。