hftbacktest

GitHub
3.9k 754 中等 2 次阅读 1周前MIT数据工具
AI 解读 由 AI 自动生成,仅供参考

hftbacktest 是一款专为高频交易和做市策略打造的开源回测框架,旨在通过高度还原真实市场环境,帮助交易者验证策略的有效性。传统回测往往因忽略网络延迟、订单排队位置等微观因素,导致结果过于乐观或悲观,难以指导实盘。hftbacktest 解决了这一痛点,它利用完整的逐笔成交和订单簿数据(Level-2 及 Level-3),精确模拟数据馈送延迟、下单延迟以及订单在队列中的具体位置,从而提供基于市场重放的高精度回测。

该工具特别适合量化开发者、高频交易研究员以及希望将策略从原型快速转化为实盘的算法工程师。其核心技术亮点在于支持使用 Numba 加速的 Python JIT 函数进行开发,兼顾了编写灵活性与执行效率;同时,它允许用户使用同一套算法代码直接部署到币安(Binance)和 Bybit 的期货市场中进行实盘交易,极大降低了从回测到实盘的迁移成本。无论是构建高频网格交易还是基于订单簿不平衡的做市策略,hftbacktest 都能为策略研发提供坚实可靠的数据基础。

使用场景

某量化团队正在为比特币永续合约开发高频网格做市策略,急需验证策略在极端行情下的真实盈利能力。

没有 hftbacktest 时

  • 回测结果虚高:传统工具忽略订单排队位置,假设挂单立即成交,导致回测利润比实盘高出 30% 以上,误导决策。
  • 延迟影响被无视:无法模拟网络传输和交易所撮合的微小延迟,在毫秒级竞争中掩盖了策略因速度慢而错失良机或遭受逆向选择的风险。
  • 数据粒度粗糙:仅使用 K 线或部分 Tick 数据,丢失了 Level-2/Level-3 深度账本细节,无法还原真实的市场微观结构变化。
  • 实盘落差巨大:由于仿真过于理想化,策略上线后频繁出现“回测猛如虎,实盘二百五”的现象,调试成本极高。

使用 hftbacktest 后

  • 精准成交仿真:利用完整的订单簿重建和排队位置模型,精确计算挂单成交概率,回测收益曲线与实盘表现高度吻合。
  • 真实延迟建模:内置可配置的馈送与订单延迟模型,提前暴露策略在网络波动下的脆弱点,确保上线前已优化响应速度。
  • 全量 Tick 回放:基于 Binance 和 Bybit 的全量逐笔交易及深度数据进行回放,完整捕捉市场瞬间的流动性枯竭或插针行为。
  • 代码无缝切换:同一套算法代码既用于高精度回测,也可直接部署为实盘机器人,大幅缩短从研发到生产的验证周期。

hftbacktest 通过还原高频交易中的延迟、排队和数据细节,消除了回测与实盘间的“幻想差距”,让每一分预期利润都经得起市场检验。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notes该工具专注于高频交易回测,核心算法运行在 Numba JIT 编译的 Python 函数中。实盘交易机器人部分仅支持 Rust。需要 Level-2 或 Level-3 的市场深度数据及交易 tick 数据。
python3.11+
numba
hftbacktest hero image

快速开始

=========== HftBacktest

|codeql| |python| |pypi| |downloads| |rustc| |crates| |license| |docs| |roadmap| |github|

高频交易回测工具

该框架专为开发高频交易和做市策略而设计。它着重考虑行情与订单的延迟,以及订单在队列中的位置,以实现更精确的订单成交模拟。基于完整的深度数据和逐笔成交数据,该框架旨在提供更为准确的市场重放式回测。

关键特性

  • Numba <https://numba.pydata.org/>_ 的 JIT 函数中运行(Python)。
  • 完整的逐笔模拟,支持自定义时间间隔或依据行情与订单接收时间进行推进。
  • 基于 Level-2 价格驱动型和 Level-3 订单驱动型行情源,重建完整订单簿。
  • 回测同时考虑行情与订单延迟,可使用提供的模型或自定义模型。
  • 成交模拟会根据订单在队列中的位置进行,支持使用提供的模型或自定义模型。
  • 支持多资产、多交易所的回测模型。
  • 可部署实时交易机器人,利用相同的算法代码快速原型化与测试:目前支持 Binance Futures 和 Bybit。(仅限 Rust)

文档

请参阅 完整文档 <https://hftbacktest.readthedocs.io/>_。

您可能会感兴趣的教程:

  • 高频网格交易——简化版 GLFT <https://hftbacktest.readthedocs.io/en/latest/tutorials/High-Frequency%20Grid%20Trading%20-%20Simplified%20from%20GLFT.html>_
  • 基于 Alpha 的做市——订单簿失衡 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Market%20Making%20with%20Alpha%20-%20Order%20Book%20Imbalance.html>_
  • 基于 Alpha 的做市——APT <https://hftbacktest.readthedocs.io/en/latest/tutorials/Market%20Making%20with%20Alpha%20-%20APT.html>_
  • 加速回测 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Accelerated%20Backtesting.html>_
  • 定价框架 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Pricing%20Framework.html>_

为何准确的回测至关重要——不仅仅是保守方法

交易是一个高度竞争的领域,优势往往非常微小,但这些微小的优势却能带来显著的收益。因此,回测必须准确地模拟真实环境:既不能采用过于悲观的方法掩盖这些细微优势和盈利机会,也不能采取过于乐观的方式通过不切实际的模拟夸大它们。至少,您应当清楚回测结果与实盘交易之间的差异及其程度,因为在某些情况下,完全准确的回测由于耗时较长并不实用。

这并非关于过拟合的问题——在考虑过拟合之前,您需要确信自己的回测能够真实反映实际执行情况。例如,如果您在 2025 年 1 月运行一个实盘交易策略,那么针对同一时期的回测结果应与实际表现高度一致。一旦验证了回测能够准确重现实盘结果,您才能进一步开展深入研究、优化以及对过拟合等问题的考量。

准确的回测是基础。没有它,无论采取保守还是激进的分析方法,后续的一切都将变得不可靠。

开始使用

安装

hftbacktest 支持 Python 3.11 及以上版本。您可以通过 pip 安装 hftbacktest:

.. code-block:: console

pip install hftbacktest

或者从 Git 仓库克隆最新的开发版本:

.. code-block:: console

git clone https://github.com/nkaz001/hftbacktest

数据来源与格式

请参阅 数据 <https://hftbacktest.readthedocs.io/en/latest/data.html>_ 或 数据准备 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Data%20Preparation.html>_。

此外,您也可以在 这里 <https://reach.stratosphere.capital/data/usdm/>_ 找到一些由赞助方托管的数据。

快速示例

通过以下代码片段,您可以初步了解使用 hftbacktest 进行回测的效果:

.. code-block:: python

@njit
def market_making_algo(hbt):
    asset_no = 0
    tick_size = hbt.depth(asset_no).tick_size
    lot_size = hbt.depth(asset_no).lot_size

    # 单位为纳秒
    while hbt.elapse(10_000_000) == 0:
        hbt.clear_inactive_orders(asset_no)

        a = 1
        b = 1
        c = 1
        hs = 1

        # Alpha,可以是多种指标的组合。
        forecast = 0
        # 在 HFT 中,它可以是短期市场波动的各种度量,
        # 例如过去 X 分钟内的高低区间。
        volatility = 0
        # Delta 风险,可以是多种风险的组合。
        position = hbt.position(asset_no)
        risk = (c + volatility) * position
        half_spread = (c + volatility) * hs

        max_notional_position = 1000
        notional_qty = 100

        depth = hbt.depth(asset_no)

        mid_price = (depth.best_bid + depth.best_ask) / 2.0

        # 公平价值定价 = mid_price + a * forecast
        #                      或标的资产(相关资产)+ 调整项(基差 + 成本等)+ a * forecast
        # 风险倾斜 = -b * risk
        reservation_price = mid_price + a * forecast - b * risk
        new_bid = reservation_price - half_spread
        new_ask = reservation_price + half_spread

        new_bid_tick = min(np.round(new_bid / tick_size), depth.best_bid_tick)
        new_ask_tick = max(np.round(new_ask / tick_size), depth.best_ask_tick)

        order_qty = np.round(notional_qty / mid_price / lot_size) * lot_size

        # 推进模拟时间。
        if not hbt.elapse(1_000_000) != 0:
            return False

last_order_id = -1 update_bid = True update_ask = True buy_limit_exceeded = position * mid_price > max_notional_position sell_limit_exceeded = position * mid_price < -max_notional_position orders = hbt.orders(asset_no) order_values = orders.values() while order_values.has_next(): order = order_values.get() if order.side == BUY: if order.price_tick == new_bid_tick or buy_limit_exceeded: update_bid = False if order.cancellable and (update_bid or buy_limit_exceeded): hbt.cancel(asset_no, order.order_id, False) last_order_id = order.order_id elif order.side == SELL: if order.price_tick == new_ask_tick or sell_limit_exceeded: update_ask = False if order.cancellable and (update_ask or sell_limit_exceeded): hbt.cancel(asset_no, order.order_id, False) last_order_id = order.order_id

        # 可以结合网格交易策略,提交多笔订单以获取更好的价差并占据队列位置。
        # 这种方法需要更复杂的逻辑来高效管理订单簿中的挂单。
        if update_bid:
            # 在给定价格上仅有一笔订单,使用new_bid_tick作为订单ID。
            order_id = new_bid_tick
            hbt.submit_buy_order(asset_no, order_id, new_bid_tick * tick_size, order_qty, GTX, LIMIT, False)
            last_order_id = order_id
        if update_ask:
            # 在给定价格上仅有一笔订单,使用new_ask_tick作为订单ID。
            order_id = new_ask_tick
            hbt.submit_sell_order(asset_no, order_id, new_ask_tick * tick_size, order_qty, GTX, LIMIT, False)
            last_order_id = order_id

        # 所有订单请求都被视为同时发出。
        # 等待直到收到其中一条订单响应。
        if last_order_id >= 0:
            # 最多等待5秒钟以获取订单响应。
            timeout = 5_000_000_000
            if not hbt.wait_order_response(asset_no, last_order_id, timeout):
                return False

    return True

教程

  • 数据准备 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Data%20Preparation.html>_
  • 入门指南 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Getting%20Started.html>_
  • 市场深度与成交数据的使用 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Working%20with%20Market%20Depth%20and%20Trades.html>_
  • 自定义数据集成 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Integrating%20Custom%20Data.html>_
  • 多市场构建——简介 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Making%20Multiple%20Markets%20-%20Introduction.html>_
  • 高频网格交易 <https://hftbacktest.readthedocs.io/en/latest/tutorials/High-Frequency%20Grid%20Trading.html>_
  • 高频网格交易——与其他交易所的比较 <https://hftbacktest.readthedocs.io/en/latest/tutorials/High-Frequency%20Grid%20Trading%20-%20Comparison%20Across%20Other%20Exchanges.html>_
  • 高频网格交易——基于GLFT的简化版本 <https://hftbacktest.readthedocs.io/en/latest/tutorials/High-Frequency%20Grid%20Trading%20-%20Simplified%20from%20GLFT.html>_
  • 订单延迟的影响 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Impact%20of%20Order%20Latency.html>_
  • 订单延迟数据 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Order%20Latency%20Data.html>_
  • Guéant–Lehalle–Fernandez-Tapia做市模型与网格交易 <https://hftbacktest.readthedocs.io/en/latest/tutorials/GLFT%20Market%20Making%20Model%20and%20Grid%20Trading.html>_
  • 多市场构建 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Making%20Multiple%20Markets.html>_
  • 极端市场条件下通过价格保护进行风险缓解 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Risk%20Mitigation%20through%20Price%20Protection%20in%20Extreme%20Market%20Conditions.html>_
  • 3级回测 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Level-3%20Backtesting.html>_
  • 基于Alpha的做市——订单簿失衡 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Market%20Making%20with%20Alpha%20-%20Order%20Book%20Imbalance.html>_
  • 基于Alpha的做市——基差 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Market%20Making%20with%20Alpha%20-%20Basis.html>_
  • 基于Alpha的做市——APT模型 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Market%20Making%20with%20Alpha%20-%20APT.html>_
  • 大tick size资产中的基于队列的做市 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Queue-Based%20Market%20Making%20in%20Large%20Tick%20Size%20Assets.html>_
  • 融合深度数据 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Fusing%20Depth%20Data.html>_
  • 加速回测 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Accelerated%20Backtesting.html>_
  • 定价框架 <https://hftbacktest.readthedocs.io/en/latest/tutorials/Pricing%20Framework.html>_

示例

更多示例可在examples <https://github.com/nkaz001/hftbacktest/tree/master/examples>_目录及Rust示例 <https://github.com/nkaz001/hftbacktest/blob/master/hftbacktest/examples/>_中找到。

币安永续合约的完整回测流程

高频网格交易 <https://github.com/nkaz001/hftbacktest/blob/master/hftbacktest/examples/gridtrading.ipynb>_: 使用Rust实现的高频网格交易策略对币安永续合约进行完整回测的过程。

迁移到V2

请参阅迁移指南 <https://hftbacktest.readthedocs.io/en/latest/migration2.html>_。

路线图

请参阅路线图 <https://github.com/nkaz001/hftbacktest/blob/master/ROADMAP.md>_。

贡献

感谢您考虑为hftbacktest做出贡献!欢迎任何形式的帮助来改进该项目。如果您有任何改进建议或错误修复的想法,请在GitHub上创建一个issue或讨论来进一步探讨。

以下是一些您可以为本项目做出的贡献示例:

请参阅路线图 <https://github.com/nkaz001/hftbacktest/blob/master/ROADMAP.md>_。

.. |python| image:: https://shields.io/badge/python-3.11+-blue :alt: Python版本 :target: https://www.python.org/

.. |codeql| image:: https://github.com/nkaz001/hftbacktest/actions/workflows/codeql.yml/badge.svg?branch=master&event=push :alt: CodeQL :target: https://github.com/nkaz001/hftbacktest/actions/workflows/codeql.yml

.. |pypi| image:: https://badge.fury.io/py/hftbacktest.svg :alt: 包版本 :target: https://pypi.org/project/hftbacktest

.. |downloads| image:: https://static.pepy.tech/badge/hftbacktest :alt: 下载量 :target: https://pepy.tech/project/hftbacktest

.. |crates| image:: https://img.shields.io/crates/v/hftbacktest.svg :alt: Rust crates.io 版本 :target: https://crates.io/crates/hftbacktest

.. |license| image:: https://img.shields.io/badge/License-MIT-green.svg :alt: 许可证 :target: https://github.com/nkaz001/hftbacktest/blob/master/LICENSE

.. |docs| image:: https://readthedocs.org/projects/hftbacktest/badge/?version=latest :target: https://hftbacktest.readthedocs.io/en/latest/?badge=latest :alt: 文档状态

.. |roadmap| image:: https://img.shields.io/badge/Roadmap-gray :target: https://github.com/nkaz001/hftbacktest/blob/master/ROADMAP.md :alt: 路线图

.. |github| image:: https://img.shields.io/github/stars/nkaz001/hftbacktest?style=social :target: https://github.com/nkaz001/hftbacktest :alt: Github

.. |rustc| image:: https://shields.io/badge/rustc-1.90-blue :alt: Rust 版本 :target: https://www.rust-lang.org/

版本历史

rust-v0.9.42025/12/10
rust-v0.9.32025/09/30
rust-v0.9.22025/08/24
rust-v0.9.12025/08/11
rust-v0.9.02025/08/03
rust-v0.8.12025/05/26
rust-v0.7.02025/02/07
py-v2.1.12024/11/24
rust-v0.5.02024/11/24
py-v2.1.02024/09/03
rust-v0.4.02024/09/03
py-v2.0.02024/08/14
py-v2.0.0rc12024/08/10
rust-v0.3.22024/08/10
py-2.0.0rc02024/08/04
rust-v0.3.12024/08/04
v1.8.42024/06/11
v1.8.32024/05/30
v1.8.22024/05/19
v1.8.12024/04/24

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|5天前
Agent开发框架图像

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85.1k|★★☆☆☆|昨天
图像数据工具视频

funNLP

funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。

79.9k|★☆☆☆☆|2天前
语言模型数据工具其他

cs-video-courses

cs-video-courses 是一个精心整理的计算机科学视频课程清单,旨在为自学者提供系统化的学习路径。它汇集了全球知名高校(如加州大学伯克利分校、新南威尔士大学等)的完整课程录像,涵盖从编程基础、数据结构与算法,到操作系统、分布式系统、数据库等核心领域,并深入延伸至人工智能、机器学习、量子计算及区块链等前沿方向。 面对网络上零散且质量参差不齐的教学资源,cs-video-courses 解决了学习者难以找到成体系、高难度大学级别课程的痛点。该项目严格筛选内容,仅收录真正的大学层级课程,排除了碎片化的简短教程或商业广告,确保用户能接触到严谨的学术内容。 这份清单特别适合希望夯实计算机基础的开发者、需要补充特定领域知识的研究人员,以及渴望像在校生一样系统学习计算机科学的自学者。其独特的技术亮点在于分类极其详尽,不仅包含传统的软件工程与网络安全,还细分了生成式 AI、大语言模型、计算生物学等新兴学科,并直接链接至官方视频播放列表,让用户能一站式获取高质量的教育资源,免费享受世界顶尖大学的课堂体验。

79.8k|★☆☆☆☆|2天前
其他图像数据工具

scikit-learn

scikit-learn 是一个基于 Python 构建的开源机器学习库,依托于 SciPy、NumPy 等科学计算生态,旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口,涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具,内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。 对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言,scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点,让用户无需重复造轮子,只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。 其核心技术亮点在于高度一致的 API 设计风格,所有估算器(Estimator)均遵循相同的调用逻辑,极大地降低了学习成本并提升了代码的可读性与可维护性。此外,它还提供了强大的模型选择与评估工具,如交叉验证和网格搜索,帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目,scikit-learn 以其稳定性、详尽的文档和活跃的社区支持,成为连接理论学习与工业级应用的最

65.8k|★☆☆☆☆|昨天
开发框架其他数据工具

keras

Keras 是一个专为人类设计的深度学习框架,旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。 无论是刚入门的学生、专注算法的研究人员,还是需要快速落地产品的工程师,都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。 Keras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码,即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性,还允许开发者根据需求自由选择:利用 JAX 或 PyTorch 的即时执行模式进行高效调试,或切换至速度最快的后端以获得最高 350% 的性能提升。此外,Keras 具备强大的扩展能力,能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群,是连接原型开发与生产部署的理想桥梁。

63.9k|★★☆☆☆|1周前
开发框架数据工具其他