[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-nkaz001--hftbacktest":3,"tool-nkaz001--hftbacktest":65},[4,18,32,41,49,57],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":24,"last_commit_at":25,"category_tags":26,"status":17},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85092,2,"2026-04-10T11:13:16",[15,16,27,28,13,29,30,14,31],"视频","插件","其他","语言模型","音频",{"id":33,"name":34,"github_repo":35,"description_zh":36,"stars":37,"difficulty_score":38,"last_commit_at":39,"category_tags":40,"status":17},5784,"funNLP","fighting41love\u002FfunNLP","funNLP 是一个专为中文自然语言处理（NLP）打造的超级资源库，被誉为\"NLP 民工的乐园”。它并非单一的软件工具，而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。\n\n面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点，funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具，还独特地收录了丰富的垂直领域资源，如法律、医疗、金融行业的专用词库与数据集，甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性，从基础的字典词典到前沿的 BERT、GPT-2 模型代码，再到高质量的标注数据和竞赛方案，应有尽有。\n\n无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师，还是从事人工智能研究的学者，都能在这里找到急需的“武器弹药”。对于开发者而言，它能大幅减少寻找数据和复现模型的时间；对于研究者，它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神，极大地降低了中文自然语言处理的开发与研究成本，是中文 AI 社区不可或缺的宝藏仓库。",79857,1,"2026-04-08T20:11:31",[30,16,29],{"id":42,"name":43,"github_repo":44,"description_zh":45,"stars":46,"difficulty_score":38,"last_commit_at":47,"category_tags":48,"status":17},5773,"cs-video-courses","Developer-Y\u002Fcs-video-courses","cs-video-courses 是一个精心整理的计算机科学视频课程清单，旨在为自学者提供系统化的学习路径。它汇集了全球知名高校（如加州大学伯克利分校、新南威尔士大学等）的完整课程录像，涵盖从编程基础、数据结构与算法，到操作系统、分布式系统、数据库等核心领域，并深入延伸至人工智能、机器学习、量子计算及区块链等前沿方向。\n\n面对网络上零散且质量参差不齐的教学资源，cs-video-courses 解决了学习者难以找到成体系、高难度大学级别课程的痛点。该项目严格筛选内容，仅收录真正的大学层级课程，排除了碎片化的简短教程或商业广告，确保用户能接触到严谨的学术内容。\n\n这份清单特别适合希望夯实计算机基础的开发者、需要补充特定领域知识的研究人员，以及渴望像在校生一样系统学习计算机科学的自学者。其独特的技术亮点在于分类极其详尽，不仅包含传统的软件工程与网络安全，还细分了生成式 AI、大语言模型、计算生物学等新兴学科，并直接链接至官方视频播放列表，让用户能一站式获取高质量的教育资源，免费享受世界顶尖大学的课堂体验。",79792,"2026-04-08T22:03:59",[29,15,16,14],{"id":50,"name":51,"github_repo":52,"description_zh":53,"stars":54,"difficulty_score":38,"last_commit_at":55,"category_tags":56,"status":17},2234,"scikit-learn","scikit-learn\u002Fscikit-learn","scikit-learn 是一个基于 Python 构建的开源机器学习库，依托于 SciPy、NumPy 等科学计算生态，旨在让机器学习变得简单高效。它提供了一套统一且简洁的接口，涵盖了从数据预处理、特征工程到模型训练、评估及选择的全流程工具，内置了包括线性回归、支持向量机、随机森林、聚类等在内的丰富经典算法。\n\n对于希望快速验证想法或构建原型的数据科学家、研究人员以及 Python 开发者而言，scikit-learn 是不可或缺的基础设施。它有效解决了机器学习入门门槛高、算法实现复杂以及不同模型间调用方式不统一的痛点，让用户无需重复造轮子，只需几行代码即可调用成熟的算法解决分类、回归、聚类等实际问题。\n\n其核心技术亮点在于高度一致的 API 设计风格，所有估算器（Estimator）均遵循相同的调用逻辑，极大地降低了学习成本并提升了代码的可读性与可维护性。此外，它还提供了强大的模型选择与评估工具，如交叉验证和网格搜索，帮助用户系统地优化模型性能。作为一个由全球志愿者共同维护的成熟项目，scikit-learn 以其稳定性、详尽的文档和活跃的社区支持，成为连接理论学习与工业级应用的最",65751,"2026-04-10T08:35:09",[14,29,16],{"id":58,"name":59,"github_repo":60,"description_zh":61,"stars":62,"difficulty_score":24,"last_commit_at":63,"category_tags":64,"status":17},3364,"keras","keras-team\u002Fkeras","Keras 是一个专为人类设计的深度学习框架，旨在让构建和训练神经网络变得简单直观。它解决了开发者在不同深度学习后端之间切换困难、模型开发效率低以及难以兼顾调试便捷性与运行性能的痛点。\n\n无论是刚入门的学生、专注算法的研究人员，还是需要快速落地产品的工程师，都能通过 Keras 轻松上手。它支持计算机视觉、自然语言处理、音频分析及时间序列预测等多种任务。\n\nKeras 3 的核心亮点在于其独特的“多后端”架构。用户只需编写一套代码，即可灵活选择 TensorFlow、JAX、PyTorch 或 OpenVINO 作为底层运行引擎。这一特性不仅保留了 Keras 一贯的高层易用性，还允许开发者根据需求自由选择：利用 JAX 或 PyTorch 的即时执行模式进行高效调试，或切换至速度最快的后端以获得最高 350% 的性能提升。此外，Keras 具备强大的扩展能力，能无缝从本地笔记本电脑扩展至大规模 GPU 或 TPU 集群，是连接原型开发与生产部署的理想桥梁。",63927,"2026-04-04T15:24:37",[14,16,29],{"id":66,"github_repo":67,"name":68,"description_en":69,"description_zh":70,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":77,"owner_avatar_url":78,"owner_bio":79,"owner_company":77,"owner_location":77,"owner_email":77,"owner_twitter":77,"owner_website":77,"owner_url":80,"languages":81,"stars":90,"forks":91,"last_commit_at":92,"license":93,"difficulty_score":10,"env_os":94,"env_gpu":94,"env_ram":94,"env_deps":95,"category_tags":100,"github_topics":101,"view_count":10,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":122,"updated_at":123,"faqs":124,"releases":160},2948,"nkaz001\u002Fhftbacktest","hftbacktest","Free, open source, a high frequency trading and market making backtesting and trading bot, which accounts for limit orders, queue positions, and latencies, utilizing full tick data for trades and order books(Level-2 and Level-3), with real-world crypto trading examples for Binance and Bybit","hftbacktest 是一款专为高频交易和做市策略打造的开源回测框架，旨在通过高度还原真实市场环境，帮助交易者验证策略的有效性。传统回测往往因忽略网络延迟、订单排队位置等微观因素，导致结果过于乐观或悲观，难以指导实盘。hftbacktest 解决了这一痛点，它利用完整的逐笔成交和订单簿数据（Level-2 及 Level-3），精确模拟数据馈送延迟、下单延迟以及订单在队列中的具体位置，从而提供基于市场重放的高精度回测。\n\n该工具特别适合量化开发者、高频交易研究员以及希望将策略从原型快速转化为实盘的算法工程师。其核心技术亮点在于支持使用 Numba 加速的 Python JIT 函数进行开发，兼顾了编写灵活性与执行效率；同时，它允许用户使用同一套算法代码直接部署到币安（Binance）和 Bybit 的期货市场中进行实盘交易，极大降低了从回测到实盘的迁移成本。无论是构建高频网格交易还是基于订单簿不平衡的做市策略，hftbacktest 都能为策略研发提供坚实可靠的数据基础。","===========\nHftBacktest\n===========\n\n|codeql| |python| |pypi| |downloads| |rustc| |crates| |license| |docs| |roadmap| |github|\n\nHigh-Frequency Trading Backtesting Tool\n=======================================\n\nThis framework is designed for developing high frequency trading and market making strategies. It focuses on accounting for both feed and order latencies, as well as the order queue position for order fill simulation. The framework aims to provide more accurate market replay-based backtesting, based on full order book and trade tick feed data.\n\nKey Features\n============\n\n* Working in `Numba \u003Chttps:\u002F\u002Fnumba.pydata.org\u002F>`_ JIT function (Python).\n* Complete tick-by-tick simulation with a customizable time interval or based on the feed and order receipt.\n* Full order book reconstruction based on Level-2 Market-By-Price and Level-3 Market-By-Order feeds.\n* Backtest accounting for both feed and order latency, using provided models or your own custom model.\n* Order fill simulation that takes into account the order queue position, using provided models or your own custom model.\n* Backtesting of multi-asset and multi-exchange models\n* Deployment of a live trading bot for quick prototyping and testing using the same algorithm code: currently for Binance Futures and Bybit. (Rust-only)\n\nDocumentation\n=============\n\nSee `full document here \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002F>`_.\n\nTutorials you’ll likely find interesting:\n\n* `High-Frequency Grid Trading - Simplified from GLFT \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading%20-%20Simplified%20from%20GLFT.html>`_\n* `Market Making with Alpha - Order Book Imbalance \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20Order%20Book%20Imbalance.html>`_\n* `Market Making with Alpha - APT \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20APT.html>`_\n* `Accelerated Backtesting \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FAccelerated%20Backtesting.html>`_\n* `Pricing Framework \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FPricing%20Framework.html>`_\n\nWhy Accurate Backtesting Matters — Not Just Conservative Approach\n=================================================================\n\nTrading is a highly competitive field where only the small edges usually exist, but they can still make a significant\ndifference. Because of this, backtesting must accurately simulate real-world conditions.: It should neither rely on an\noverly pessimistic approach that hides these small edges and profit opportunities, nor on an overly optimistic one that\noverstates them through unrealistic simulation. Or at the very least, you should clearly understand what differs from\nlive trading and by how much, since sometimes fully accurate backtesting is not practical due to the time it requires.\n\nThis is not about overfitting at the start—before you even consider issues like overfitting, you need confidence that\nyour backtesting truly reflects real-world execution. For example, if you run a live trading strategy in January 2025,\nthe backtest for that exact period should produce results that closely align with the actual results. Once you’ve\nvalidated that your backtesting can accurately reproduce live trading results, then you can proceed to deeper research,\noptimization, and considerations around overfitting.\n\nAccurate backtesting is the foundation. Without it, all further analysis—whether conservative or aggressive—becomes\nunreliable.\n\nGetting started\n===============\n\nInstallation\n------------\n\nhftbacktest supports Python 3.11+. You can install hftbacktest using ``pip``:\n\n.. code-block:: console\n\n pip install hftbacktest\n\nOr you can clone the latest development version from the Git repository with:\n\n.. code-block:: console\n\n git clone https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\n\nData Source & Format\n--------------------\n\nPlease see `Data \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Fdata.html>`_ or `Data Preparation \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FData%20Preparation.html>`_.\n\nYou can also find some data `here \u003Chttps:\u002F\u002Freach.stratosphere.capital\u002Fdata\u002Fusdm\u002F>`_, hosted by the supporter.\n\nA Quick Example\n---------------\n\nGet a glimpse of what backtesting with hftbacktest looks like with these code snippets:\n\n.. code-block:: python\n\n    @njit\n    def market_making_algo(hbt):\n        asset_no = 0\n        tick_size = hbt.depth(asset_no).tick_size\n        lot_size = hbt.depth(asset_no).lot_size\n\n        # in nanoseconds\n        while hbt.elapse(10_000_000) == 0:\n            hbt.clear_inactive_orders(asset_no)\n\n            a = 1\n            b = 1\n            c = 1\n            hs = 1\n\n            # Alpha, it can be a combination of several indicators.\n            forecast = 0\n            # In HFT, it can be various measurements of short-term market movements,\n            # such as the high-low range in the last X minutes.\n            volatility = 0\n            # Delta risk, it can be a combination of several risks.\n            position = hbt.position(asset_no)\n            risk = (c + volatility) * position\n            half_spread = (c + volatility) * hs\n\n            max_notional_position = 1000\n            notional_qty = 100\n\n            depth = hbt.depth(asset_no)\n\n            mid_price = (depth.best_bid + depth.best_ask) \u002F 2.0\n\n            # fair value pricing = mid_price + a * forecast\n            #                      or underlying(correlated asset) + adjustment(basis + cost + etc) + a * forecast\n            # risk skewing = -b * risk\n            reservation_price = mid_price + a * forecast - b * risk\n            new_bid = reservation_price - half_spread\n            new_ask = reservation_price + half_spread\n\n            new_bid_tick = min(np.round(new_bid \u002F tick_size), depth.best_bid_tick)\n            new_ask_tick = max(np.round(new_ask \u002F tick_size), depth.best_ask_tick)\n\n            order_qty = np.round(notional_qty \u002F mid_price \u002F lot_size) * lot_size\n\n            # Elapses a process time.\n            if not hbt.elapse(1_000_000) != 0:\n                return False\n\n            last_order_id = -1\n            update_bid = True\n            update_ask = True\n            buy_limit_exceeded = position * mid_price > max_notional_position\n            sell_limit_exceeded = position * mid_price \u003C -max_notional_position\n            orders = hbt.orders(asset_no)\n            order_values = orders.values()\n            while order_values.has_next():\n                order = order_values.get()\n                if order.side == BUY:\n                    if order.price_tick == new_bid_tick or buy_limit_exceeded:\n                        update_bid = False\n                    if order.cancellable and (update_bid or buy_limit_exceeded):\n                        hbt.cancel(asset_no, order.order_id, False)\n                        last_order_id = order.order_id\n                elif order.side == SELL:\n                    if order.price_tick == new_ask_tick or sell_limit_exceeded:\n                        update_ask = False\n                    if order.cancellable and (update_ask or sell_limit_exceeded):\n                        hbt.cancel(asset_no, order.order_id, False)\n                        last_order_id = order.order_id\n\n            # It can be combined with a grid trading strategy by submitting multiple orders to capture better spreads and\n            # have queue position.\n            # This approach requires more sophisticated logic to efficiently manage resting orders in the order book.\n            if update_bid:\n                # There is only one order at a given price, with new_bid_tick used as the order ID.\n                order_id = new_bid_tick\n                hbt.submit_buy_order(asset_no, order_id, new_bid_tick * tick_size, order_qty, GTX, LIMIT, False)\n                last_order_id = order_id\n            if update_ask:\n                # There is only one order at a given price, with new_ask_tick used as the order ID.\n                order_id = new_ask_tick\n                hbt.submit_sell_order(asset_no, order_id, new_ask_tick * tick_size, order_qty, GTX, LIMIT, False)\n                last_order_id = order_id\n\n            # All order requests are considered to be requested at the same time.\n            # Waits until one of the order responses is received.\n            if last_order_id >= 0:\n                # Waits for the order response for a maximum of 5 seconds.\n                timeout = 5_000_000_000\n                if not hbt.wait_order_response(asset_no, last_order_id, timeout):\n                    return False\n\n        return True\n\n\nTutorials\n=========\n* `Data Preparation \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FData%20Preparation.html>`_\n* `Getting Started \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FGetting%20Started.html>`_\n* `Working with Market Depth and Trades \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FWorking%20with%20Market%20Depth%20and%20Trades.html>`_\n* `Integrating Custom Data \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FIntegrating%20Custom%20Data.html>`_\n* `Making Multiple Markets - Introduction \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMaking%20Multiple%20Markets%20-%20Introduction.html>`_\n* `High-Frequency Grid Trading \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading.html>`_\n* `High-Frequency Grid Trading - Comparison Across Other Exchanges \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading%20-%20Comparison%20Across%20Other%20Exchanges.html>`_\n* `High-Frequency Grid Trading - Simplified from GLFT \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading%20-%20Simplified%20from%20GLFT.html>`_\n* `Impact of Order Latency \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FImpact%20of%20Order%20Latency.html>`_\n* `Order Latency Data \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FOrder%20Latency%20Data.html>`_\n* `Guéant–Lehalle–Fernandez-Tapia Market Making Model and Grid Trading \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FGLFT%20Market%20Making%20Model%20and%20Grid%20Trading.html>`_\n* `Making Multiple Markets \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMaking%20Multiple%20Markets.html>`_\n* `Risk Mitigation through Price Protection in Extreme Market Conditions \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FRisk%20Mitigation%20through%20Price%20Protection%20in%20Extreme%20Market%20Conditions.html>`_\n* `Level-3 Backtesting \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FLevel-3%20Backtesting.html>`_\n* `Market Making with Alpha - Order Book Imbalance \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20Order%20Book%20Imbalance.html>`_\n* `Market Making with Alpha - Basis \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20Basis.html>`_\n* `Market Making with Alpha - APT \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20APT.html>`_\n* `Queue-Based Market Making in Large Tick Size Assets \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FQueue-Based%20Market%20Making%20in%20Large%20Tick%20Size%20Assets.html>`_\n* `Fusing Depth Data \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FFusing%20Depth%20Data.html>`_\n* `Accelerated Backtesting \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FAccelerated%20Backtesting.html>`_\n* `Pricing Framework \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FPricing%20Framework.html>`_\n\nExamples\n========\n\nYou can find more examples in `examples \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Ftree\u002Fmaster\u002Fexamples>`_ directory and `Rust examples \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002Fhftbacktest\u002Fexamples\u002F>`_.\n\nThe complete process of backtesting Binance Futures\n---------------------------------------------------\n`high-frequency gridtrading \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002Fhftbacktest\u002Fexamples\u002Fgridtrading.ipynb>`_: The complete process of backtesting Binance Futures using a high-frequency grid trading strategy implemented in Rust.\n\nMigration to V2\n===============\nPlease see the `migration guide \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Fmigration2.html>`_.\n\nRoadmap\n=======\n\nPlease see the `roadmap \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002FROADMAP.md>`_.\n\nContributing\n============\n\nThank you for considering contributing to hftbacktest! Welcome any and all help to improve the project. If you have an\nidea for an enhancement or a bug fix, please open an issue or discussion on GitHub to discuss it.\n\nThe following items are examples of contributions you can make to this project:\n\nPlease see the `roadmap \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002FROADMAP.md>`_.\n\n.. |python| image:: https:\u002F\u002Fshields.io\u002Fbadge\u002Fpython-3.11+-blue\n    :alt: Python Version\n    :target: https:\u002F\u002Fwww.python.org\u002F\n\n.. |codeql| image:: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Factions\u002Fworkflows\u002Fcodeql.yml\u002Fbadge.svg?branch=master&event=push\n    :alt: CodeQL\n    :target: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Factions\u002Fworkflows\u002Fcodeql.yml\n\n.. |pypi| image:: https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Fhftbacktest.svg\n    :alt: Package Version\n    :target: https:\u002F\u002Fpypi.org\u002Fproject\u002Fhftbacktest\n\n.. |downloads| image:: https:\u002F\u002Fstatic.pepy.tech\u002Fbadge\u002Fhftbacktest\n    :alt: Downloads\n    :target: https:\u002F\u002Fpepy.tech\u002Fproject\u002Fhftbacktest\n\n.. |crates| image:: https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fhftbacktest.svg\n    :alt: Rust crates.io version\n    :target: https:\u002F\u002Fcrates.io\u002Fcrates\u002Fhftbacktest\n\n.. |license| image:: https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green.svg\n    :alt: License\n    :target: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002FLICENSE\n\n.. |docs| image:: https:\u002F\u002Freadthedocs.org\u002Fprojects\u002Fhftbacktest\u002Fbadge\u002F?version=latest\n    :target: https:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002F?badge=latest\n    :alt: Documentation Status\n\n.. |roadmap| image:: https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRoadmap-gray\n    :target: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002FROADMAP.md\n    :alt: Roadmap\n\n.. |github| image:: https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fnkaz001\u002Fhftbacktest?style=social\n    :target: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\n    :alt: Github\n\n.. |rustc| image:: https:\u002F\u002Fshields.io\u002Fbadge\u002Frustc-1.90-blue\n    :alt: Rust Version\n    :target: https:\u002F\u002Fwww.rust-lang.org\u002F\n","===========\nHftBacktest\n===========\n\n|codeql| |python| |pypi| |downloads| |rustc| |crates| |license| |docs| |roadmap| |github|\n\n高频交易回测工具\n=================\n\n该框架专为开发高频交易和做市策略而设计。它着重考虑行情与订单的延迟，以及订单在队列中的位置，以实现更精确的订单成交模拟。基于完整的深度数据和逐笔成交数据，该框架旨在提供更为准确的市场重放式回测。\n\n关键特性\n========\n\n* 在 `Numba \u003Chttps:\u002F\u002Fnumba.pydata.org\u002F>`_ 的 JIT 函数中运行（Python）。\n* 完整的逐笔模拟，支持自定义时间间隔或依据行情与订单接收时间进行推进。\n* 基于 Level-2 价格驱动型和 Level-3 订单驱动型行情源，重建完整订单簿。\n* 回测同时考虑行情与订单延迟，可使用提供的模型或自定义模型。\n* 成交模拟会根据订单在队列中的位置进行，支持使用提供的模型或自定义模型。\n* 支持多资产、多交易所的回测模型。\n* 可部署实时交易机器人，利用相同的算法代码快速原型化与测试：目前支持 Binance Futures 和 Bybit。（仅限 Rust）\n\n文档\n====\n\n请参阅 `完整文档 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002F>`_。\n\n您可能会感兴趣的教程：\n\n* `高频网格交易——简化版 GLFT \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading%20-%20Simplified%20from%20GLFT.html>`_\n* `基于 Alpha 的做市——订单簿失衡 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20Order%20Book%20Imbalance.html>`_\n* `基于 Alpha 的做市——APT \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20APT.html>`_\n* `加速回测 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FAccelerated%20Backtesting.html>`_\n* `定价框架 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FPricing%20Framework.html>`_\n\n为何准确的回测至关重要——不仅仅是保守方法\n=========================================\n\n交易是一个高度竞争的领域，优势往往非常微小，但这些微小的优势却能带来显著的收益。因此，回测必须准确地模拟真实环境：既不能采用过于悲观的方法掩盖这些细微优势和盈利机会，也不能采取过于乐观的方式通过不切实际的模拟夸大它们。至少，您应当清楚回测结果与实盘交易之间的差异及其程度，因为在某些情况下，完全准确的回测由于耗时较长并不实用。\n\n这并非关于过拟合的问题——在考虑过拟合之前，您需要确信自己的回测能够真实反映实际执行情况。例如，如果您在 2025 年 1 月运行一个实盘交易策略，那么针对同一时期的回测结果应与实际表现高度一致。一旦验证了回测能够准确重现实盘结果，您才能进一步开展深入研究、优化以及对过拟合等问题的考量。\n\n准确的回测是基础。没有它，无论采取保守还是激进的分析方法，后续的一切都将变得不可靠。\n\n开始使用\n========\n\n安装\n----\n\nhftbacktest 支持 Python 3.11 及以上版本。您可以通过 ``pip`` 安装 hftbacktest：\n\n.. code-block:: console\n\n pip install hftbacktest\n\n或者从 Git 仓库克隆最新的开发版本：\n\n.. code-block:: console\n\n git clone https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\n\n数据来源与格式\n--------------\n\n请参阅 `数据 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Fdata.html>`_ 或 `数据准备 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FData%20Preparation.html>`_。\n\n此外，您也可以在 `这里 \u003Chttps:\u002F\u002Freach.stratosphere.capital\u002Fdata\u002Fusdm\u002F>`_ 找到一些由赞助方托管的数据。\n\n快速示例\n---------\n\n通过以下代码片段，您可以初步了解使用 hftbacktest 进行回测的效果：\n\n.. code-block:: python\n\n    @njit\n    def market_making_algo(hbt):\n        asset_no = 0\n        tick_size = hbt.depth(asset_no).tick_size\n        lot_size = hbt.depth(asset_no).lot_size\n\n        # 单位为纳秒\n        while hbt.elapse(10_000_000) == 0:\n            hbt.clear_inactive_orders(asset_no)\n\n            a = 1\n            b = 1\n            c = 1\n            hs = 1\n\n            # Alpha，可以是多种指标的组合。\n            forecast = 0\n            # 在 HFT 中，它可以是短期市场波动的各种度量，\n            # 例如过去 X 分钟内的高低区间。\n            volatility = 0\n            # Delta 风险，可以是多种风险的组合。\n            position = hbt.position(asset_no)\n            risk = (c + volatility) * position\n            half_spread = (c + volatility) * hs\n\n            max_notional_position = 1000\n            notional_qty = 100\n\n            depth = hbt.depth(asset_no)\n\n            mid_price = (depth.best_bid + depth.best_ask) \u002F 2.0\n\n            # 公平价值定价 = mid_price + a * forecast\n            #                      或标的资产（相关资产）+ 调整项（基差 + 成本等）+ a * forecast\n            # 风险倾斜 = -b * risk\n            reservation_price = mid_price + a * forecast - b * risk\n            new_bid = reservation_price - half_spread\n            new_ask = reservation_price + half_spread\n\n            new_bid_tick = min(np.round(new_bid \u002F tick_size), depth.best_bid_tick)\n            new_ask_tick = max(np.round(new_ask \u002F tick_size), depth.best_ask_tick)\n\n            order_qty = np.round(notional_qty \u002F mid_price \u002F lot_size) * lot_size\n\n            # 推进模拟时间。\n            if not hbt.elapse(1_000_000) != 0:\n                return False\n\nlast_order_id = -1\n            update_bid = True\n            update_ask = True\n            buy_limit_exceeded = position * mid_price > max_notional_position\n            sell_limit_exceeded = position * mid_price \u003C -max_notional_position\n            orders = hbt.orders(asset_no)\n            order_values = orders.values()\n            while order_values.has_next():\n                order = order_values.get()\n                if order.side == BUY:\n                    if order.price_tick == new_bid_tick or buy_limit_exceeded:\n                        update_bid = False\n                    if order.cancellable and (update_bid or buy_limit_exceeded):\n                        hbt.cancel(asset_no, order.order_id, False)\n                        last_order_id = order.order_id\n                elif order.side == SELL:\n                    if order.price_tick == new_ask_tick or sell_limit_exceeded:\n                        update_ask = False\n                    if order.cancellable and (update_ask or sell_limit_exceeded):\n                        hbt.cancel(asset_no, order.order_id, False)\n                        last_order_id = order.order_id\n\n            # 可以结合网格交易策略，提交多笔订单以获取更好的价差并占据队列位置。\n            # 这种方法需要更复杂的逻辑来高效管理订单簿中的挂单。\n            if update_bid:\n                # 在给定价格上仅有一笔订单，使用new_bid_tick作为订单ID。\n                order_id = new_bid_tick\n                hbt.submit_buy_order(asset_no, order_id, new_bid_tick * tick_size, order_qty, GTX, LIMIT, False)\n                last_order_id = order_id\n            if update_ask:\n                # 在给定价格上仅有一笔订单，使用new_ask_tick作为订单ID。\n                order_id = new_ask_tick\n                hbt.submit_sell_order(asset_no, order_id, new_ask_tick * tick_size, order_qty, GTX, LIMIT, False)\n                last_order_id = order_id\n\n            # 所有订单请求都被视为同时发出。\n            # 等待直到收到其中一条订单响应。\n            if last_order_id >= 0:\n                # 最多等待5秒钟以获取订单响应。\n                timeout = 5_000_000_000\n                if not hbt.wait_order_response(asset_no, last_order_id, timeout):\n                    return False\n\n        return True\n\n\n教程\n=========\n* `数据准备 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FData%20Preparation.html>`_\n* `入门指南 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FGetting%20Started.html>`_\n* `市场深度与成交数据的使用 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FWorking%20with%20Market%20Depth%20and%20Trades.html>`_\n* `自定义数据集成 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FIntegrating%20Custom%20Data.html>`_\n* `多市场构建——简介 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMaking%20Multiple%20Markets%20-%20Introduction.html>`_\n* `高频网格交易 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading.html>`_\n* `高频网格交易——与其他交易所的比较 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading%20-%20Comparison%20Across%20Other%20Exchanges.html>`_\n* `高频网格交易——基于GLFT的简化版本 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading%20-%20Simplified%20from%20GLFT.html>`_\n* `订单延迟的影响 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FImpact%20of%20Order%20Latency.html>`_\n* `订单延迟数据 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FOrder%20Latency%20Data.html>`_\n* `Guéant–Lehalle–Fernandez-Tapia做市模型与网格交易 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FGLFT%20Market%20Making%20Model%20and%20Grid%20Trading.html>`_\n* `多市场构建 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMaking%20Multiple%20Markets.html>`_\n* `极端市场条件下通过价格保护进行风险缓解 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FRisk%20Mitigation%20through%20Price%20Protection%20in%20Extreme%20Market%20Conditions.html>`_\n* `3级回测 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FLevel-3%20Backtesting.html>`_\n* `基于Alpha的做市——订单簿失衡 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20Order%20Book%20Imbalance.html>`_\n* `基于Alpha的做市——基差 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20Basis.html>`_\n* `基于Alpha的做市——APT模型 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FMarket%20Making%20with%20Alpha%20-%20APT.html>`_\n* `大tick size资产中的基于队列的做市 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FQueue-Based%20Market%20Making%20in%20Large%20Tick%20Size%20Assets.html>`_\n* `融合深度数据 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FFusing%20Depth%20Data.html>`_\n* `加速回测 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FAccelerated%20Backtesting.html>`_\n* `定价框架 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FPricing%20Framework.html>`_\n\n示例\n========\n\n更多示例可在`examples \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Ftree\u002Fmaster\u002Fexamples>`_目录及`Rust示例 \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002Fhftbacktest\u002Fexamples\u002F>`_中找到。\n\n币安永续合约的完整回测流程\n---------------------------------------------------\n`高频网格交易 \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002Fhftbacktest\u002Fexamples\u002Fgridtrading.ipynb>`_: 使用Rust实现的高频网格交易策略对币安永续合约进行完整回测的过程。\n\n迁移到V2\n===============\n请参阅`迁移指南 \u003Chttps:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Fmigration2.html>`_。\n\n路线图\n=======\n\n请参阅`路线图 \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002FROADMAP.md>`_。\n\n贡献\n============\n\n感谢您考虑为hftbacktest做出贡献！欢迎任何形式的帮助来改进该项目。如果您有任何改进建议或错误修复的想法，请在GitHub上创建一个issue或讨论来进一步探讨。\n\n以下是一些您可以为本项目做出的贡献示例：\n\n请参阅`路线图 \u003Chttps:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002FROADMAP.md>`_。\n\n.. |python| image:: https:\u002F\u002Fshields.io\u002Fbadge\u002Fpython-3.11+-blue\n    :alt: Python版本\n    :target: https:\u002F\u002Fwww.python.org\u002F\n\n.. |codeql| image:: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Factions\u002Fworkflows\u002Fcodeql.yml\u002Fbadge.svg?branch=master&event=push\n    :alt: CodeQL\n    :target: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Factions\u002Fworkflows\u002Fcodeql.yml\n\n.. |pypi| image:: https:\u002F\u002Fbadge.fury.io\u002Fpy\u002Fhftbacktest.svg\n    :alt: 包版本\n    :target: https:\u002F\u002Fpypi.org\u002Fproject\u002Fhftbacktest\n\n.. |downloads| image:: https:\u002F\u002Fstatic.pepy.tech\u002Fbadge\u002Fhftbacktest\n    :alt: 下载量\n    :target: https:\u002F\u002Fpepy.tech\u002Fproject\u002Fhftbacktest\n\n.. |crates| image:: https:\u002F\u002Fimg.shields.io\u002Fcrates\u002Fv\u002Fhftbacktest.svg\n    :alt: Rust crates.io 版本\n    :target: https:\u002F\u002Fcrates.io\u002Fcrates\u002Fhftbacktest\n\n.. |license| image:: https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-green.svg\n    :alt: 许可证\n    :target: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002FLICENSE\n\n.. |docs| image:: https:\u002F\u002Freadthedocs.org\u002Fprojects\u002Fhftbacktest\u002Fbadge\u002F?version=latest\n    :target: https:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002F?badge=latest\n    :alt: 文档状态\n\n.. |roadmap| image:: https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRoadmap-gray\n    :target: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fblob\u002Fmaster\u002FROADMAP.md\n    :alt: 路线图\n\n.. |github| image:: https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fnkaz001\u002Fhftbacktest?style=social\n    :target: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\n    :alt: Github\n\n.. |rustc| image:: https:\u002F\u002Fshields.io\u002Fbadge\u002Frustc-1.90-blue\n    :alt: Rust 版本\n    :target: https:\u002F\u002Fwww.rust-lang.org\u002F","# hftbacktest 快速上手指南\n\nhftbacktest 是一个专为高频交易（HFT）和做市策略设计的回测框架。它基于完整的订单簿（Level-2\u002FLevel-3）和逐笔成交数据，重点模拟了**行情延迟**、**订单延迟**以及**订单队列位置**，旨在提供比传统回测更贴近实盘的高精度仿真环境。\n\n## 环境准备\n\n在开始之前，请确保您的开发环境满足以下要求：\n\n*   **操作系统**：支持 Linux, macOS, Windows (推荐 Linux 以获得最佳性能)\n*   **Python 版本**：Python 3.11 或更高版本\n*   **编译器依赖**：由于核心逻辑使用 Numba 进行 JIT 加速，建议安装 LLVM 编译器（通常安装 `numba` 时会自动处理，但在某些 Linux 发行版上可能需要手动安装 `llvm`）。\n*   **可选依赖**：若需使用 Rust 部分进行实盘部署，需安装 Rust 工具链。\n\n## 安装步骤\n\n### 方式一：通过 PyPI 安装（推荐）\n\n使用 pip 直接安装稳定版：\n\n```bash\npip install hftbacktest\n```\n\n**国内加速建议**：\n如果您在中国大陆，建议使用清华源或阿里源以加快下载速度：\n\n```bash\npip install hftbacktest -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n```\n\n### 方式二：从源码安装（开发版）\n\n如果您需要最新的功能或参与开发，可以克隆仓库：\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\ncd hftbacktest\npip install -e .\n```\n\n## 基本使用\n\nhftbacktest 的核心算法需要在 `@njit` 装饰的 Numba 函数中编写，以实现高性能的逐笔模拟。以下是一个简化版的**做市策略**示例，展示了如何获取市场深度、计算报价并提交订单。\n\n### 最小可运行示例\n\n```python\nimport numpy as np\nfrom numba import njit\nfrom hftbacktest import BacktestAsset, DataReader\nfrom hftbacktest.order import BUY, SELL, LIMIT, GTX\n\n# 定义核心策略逻辑 (必须在 @njit 装饰器下)\n@njit\ndef market_making_algo(hbt):\n    asset_no = 0\n    # 获取资产的最小变动价位和手数\n    tick_size = hbt.depth(asset_no).tick_size\n    lot_size = hbt.depth(asset_no).lot_size\n\n    # 主循环：每次推进 10 毫秒 (10,000,000 纳秒)\n    while hbt.elapse(10_000_000) == 0:\n        hbt.clear_inactive_orders(asset_no)\n\n        # --- 策略参数与信号计算 ---\n        a, b, c, hs = 1, 1, 1, 1\n        forecast = 0  # Alpha 信号\n        volatility = 0 # 波动率\n        \n        # 计算风险敞口\n        position = hbt.position(asset_no)\n        risk = (c + volatility) * position\n        half_spread = (c + volatility) * hs\n\n        depth = hbt.depth(asset_no)\n        mid_price = (depth.best_bid + depth.best_ask) \u002F 2.0\n\n        # 计算保留价格 (Reservation Price) 和买卖挂单价\n        reservation_price = mid_price + a * forecast - b * risk\n        new_bid = reservation_price - half_spread\n        new_ask = reservation_price + half_spread\n\n        # 转换为 Tick 整数并限制在最优价以内\n        new_bid_tick = min(np.round(new_bid \u002F tick_size), depth.best_bid_tick)\n        new_ask_tick = max(np.round(new_ask \u002F tick_size), depth.best_ask_tick)\n\n        # 计算订单数量\n        notional_qty = 100\n        order_qty = np.round(notional_qty \u002F mid_price \u002F lot_size) * lot_size\n\n        # 模拟处理耗时 (1 毫秒)\n        if hbt.elapse(1_000_000) != 0:\n            return False\n\n        # --- 订单管理逻辑 ---\n        last_order_id = -1\n        update_bid = True\n        update_ask = True\n        \n        # 检查持仓限额\n        max_notional_position = 1000\n        buy_limit_exceeded = position * mid_price > max_notional_position\n        sell_limit_exceeded = position * mid_price \u003C -max_notional_position\n\n        orders = hbt.orders(asset_no)\n        order_values = orders.values()\n        \n        # 遍历现有订单，决定取消或保留\n        while order_values.has_next():\n            order = order_values.get()\n            if order.side == BUY:\n                if order.price_tick == new_bid_tick or buy_limit_exceeded:\n                    update_bid = False\n                if order.cancellable and (update_bid or buy_limit_exceeded):\n                    hbt.cancel(asset_no, order.order_id, False)\n                    last_order_id = order.order_id\n            elif order.side == SELL:\n                if order.price_tick == new_ask_tick or sell_limit_exceeded:\n                    update_ask = False\n                if order.cancellable and (update_ask or sell_limit_exceeded):\n                    hbt.cancel(asset_no, order.order_id, False)\n                    last_order_id = order.order_id\n\n        # 提交新订单\n        if update_bid:\n            order_id = new_bid_tick\n            hbt.submit_buy_order(asset_no, order_id, new_bid_tick * tick_size, order_qty, GTX, LIMIT, False)\n            last_order_id = order_id\n            \n        if update_ask:\n            order_id = new_ask_tick\n            hbt.submit_sell_order(asset_no, order_id, new_ask_tick * tick_size, order_qty, GTX, LIMIT, False)\n            last_order_id = order_id\n\n        # 等待订单响应 (最多等待 5 秒)\n        if last_order_id >= 0:\n            timeout = 5_000_000_000\n            if not hbt.wait_order_response(asset_no, last_order_id, timeout):\n                return False\n\n    return True\n\n# 注意：实际运行时，您需要先准备数据 (Data Preparation)，\n# 构建 Backtest 对象，并将 market_making_algo 传入运行。\n# 完整的数据加载和回测启动流程请参考官方教程 \"Getting Started\"。\n```\n\n### 下一步建议\n\n1.  **数据准备**：hftbacktest 依赖高质量的 Level-2 或 Level-3 数据。请参阅官方文档中的 [Data Preparation](https:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FData%20Preparation.html) 教程学习如何格式化数据。\n2.  **深入教程**：推荐阅读 [High-Frequency Grid Trading](https:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FHigh-Frequency%20Grid%20Trading%20-%20Simplified%20from%20GLFT.html) 以了解更复杂的策略实现。\n3.  **实盘部署**：该框架支持将相同的算法逻辑部署到 Binance Futures 和 Bybit 进行实盘交易（需使用 Rust 接口）。","某量化团队正在为比特币永续合约开发高频网格做市策略，急需验证策略在极端行情下的真实盈利能力。\n\n### 没有 hftbacktest 时\n- **回测结果虚高**：传统工具忽略订单排队位置，假设挂单立即成交，导致回测利润比实盘高出 30% 以上，误导决策。\n- **延迟影响被无视**：无法模拟网络传输和交易所撮合的微小延迟，在毫秒级竞争中掩盖了策略因速度慢而错失良机或遭受逆向选择的风险。\n- **数据粒度粗糙**：仅使用 K 线或部分 Tick 数据，丢失了 Level-2\u002FLevel-3 深度账本细节，无法还原真实的市场微观结构变化。\n- **实盘落差巨大**：由于仿真过于理想化，策略上线后频繁出现“回测猛如虎，实盘二百五”的现象，调试成本极高。\n\n### 使用 hftbacktest 后\n- **精准成交仿真**：利用完整的订单簿重建和排队位置模型，精确计算挂单成交概率，回测收益曲线与实盘表现高度吻合。\n- **真实延迟建模**：内置可配置的馈送与订单延迟模型，提前暴露策略在网络波动下的脆弱点，确保上线前已优化响应速度。\n- **全量 Tick 回放**：基于 Binance 和 Bybit 的全量逐笔交易及深度数据进行回放，完整捕捉市场瞬间的流动性枯竭或插针行为。\n- **代码无缝切换**：同一套算法代码既用于高精度回测，也可直接部署为实盘机器人，大幅缩短从研发到生产的验证周期。\n\nhftbacktest 通过还原高频交易中的延迟、排队和数据细节，消除了回测与实盘间的“幻想差距”，让每一分预期利润都经得起市场检验。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fnkaz001_hftbacktest_a499a166.png","nkaz001",null,"https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fnkaz001_710a1c7a.png","serious hobbyist","https:\u002F\u002Fgithub.com\u002Fnkaz001",[82,86],{"name":83,"color":84,"percentage":85},"Rust","#dea584",75.9,{"name":87,"color":88,"percentage":89},"Python","#3572A5",24.1,3900,754,"2026-04-03T18:03:33","MIT","未说明",{"notes":96,"python":97,"dependencies":98},"该工具专注于高频交易回测，核心算法运行在 Numba JIT 编译的 Python 函数中。实盘交易机器人部分仅支持 Rust。需要 Level-2 或 Level-3 的市场深度数据及交易 tick 数据。","3.11+",[99],"numba",[16],[102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121],"backtesting","high-frequency-trading","market-making","backtesting-engine","market-maker","algotrading","hft","algorithmic-trading","backtesting-trading-strategies","limit-order-book","orderbook-tick-data","quantitative-trading","trading-algorithms","binance","crypto-trading","trading-simulator","crypto-bot","orderbook","trading-strategies","tradingbot","2026-03-27T02:49:30.150509","2026-04-11T18:32:47.023652",[125,130,135,140,145,150,155],{"id":126,"question_zh":127,"answer_zh":128,"source_url":129},13612,"在哪里可以找到用于运行示例的测试数据？","您可以从社区提供的资源中免费下载数据。访问链接：https:\u002F\u002Freach.stratosphere.capital\u002Fdata\u002Fusdm\u002F。请注意该链接有一定的带宽限制，请勿滥用。官方文档即将更新包含此信息。","https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fissues\u002F69",{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},13613,"如何在 hftbacktest 中归一化币安合约（Binance Futures）的订单簿数据？","相关的教程和代码示例已经提供。您可以查看官方文档的教程页面 (https:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Findex.html) 或者 GitHub 仓库中的 examples 目录 (https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Ftree\u002Fmaster\u002Fexamples)，其中包含了结合历史交易数据和订单簿数据进行归一化的方法。","https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fissues\u002F27",{"id":136,"question_zh":137,"answer_zh":138,"source_url":139},13614,"为什么在导入 BacktestAsset 或 HashMapMarketDepthBacktest 时出现 ImportError？","这通常是因为缺少系统依赖项。请尝试安装 pkg-config（例如在 Ubuntu 上运行 `sudo apt install pkg-config`）。如果是编译 openssl-sys 失败，可能需要配置 OpenSSL 环境。此外，确保您克隆的是最新版本的仓库，并且没有遗漏 README.rst 等必要文件，否则 maturin 构建会失败。","https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fissues\u002F106",{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},13615,"hftbacktest 支持在 Windows 上运行吗？","目前不推荐在 Windows 上直接运行，特别是需要使用 connector 模块时。底层的 iceoryx 库在 Windows 上存在兼容性问题。建议用户使用 Linux 环境或 Windows Subsystem for Linux (WSL) 来运行该工具。虽然有用户在 macOS 上通过调整 Cargo.toml 中的 bincode 版本成功运行，但 Windows 10 仍会报错。","https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fissues\u002F192",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},13616,"为什么版本 2.0.0rc0 的回测运行速度感觉比旧版本慢？","运行速度主要取决于 `elapse` 循环内的计算量。维护者指出，v2 版本针对增量深度馈送和完整的逐笔交易馈送进行了优化。如果您使用的采样数据时间间隔大于 100 毫秒，改变循环参数对运行时间影响不大；但如果将间隔减少到 10 毫秒或更少，计算量会显著增加，导致回测时间变长。通常不建议使用采样数据进行高频回测。","https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fissues\u002F117",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},13617,"如何确定回测参数 roi_lb 和 roi_ub 的合适数值？","这两个参数通常基于数据的历史最高价和最低价来设定。一个实用的方法是创建一个 JSON 文件，记录您所用数据集中每个资产的历史最高高点（highest high）和最低低点（lowest low），并在处理多个资产时使用这些值来动态设置 roi_ub 和 roi_lb，以避免因数据范围不当导致的计算异常。","https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fissues\u002F181",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},13618,"当发生流错误（如 TLS UnexpectedEof）导致实时机器人停止更新市场数据时，该如何调试？","日志通常会打印到控制台（stdout）。为了获取更详细的连接和错误信息，您可以查看并修改 connector 源码中的日志配置部分（参考代码位置：connector\u002Fsrc\u002Fmain.rs 第 296 行附近），根据需要调整日志级别以捕获重连逻辑中的具体异常细节。","https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fissues\u002F210",[161,166,171,176,181,186,191,196,201,206,210,214,218,222,226,231,236,241,246,251],{"id":162,"version":163,"summary_zh":164,"released_at":165},72415,"rust-v0.9.4","## 变更内容\n* Bybit 转换器，由 @inheritag 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F276 中实现\n* 修复（tardis）：解决在使用结构化数组调用 convert() 方法时出现的 numpy.void AttributeError 和段错误，由 @Garvitpant777 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F288 中完成\n\n## 新贡献者\n* @inheritag 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F276 中完成了首次贡献\n* @Garvitpant777 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F288 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fcompare\u002Frust-v0.9.3...rust-v0.9.4","2025-12-10T16:17:40",{"id":167,"version":168,"summary_zh":169,"released_at":170},72416,"rust-v0.9.3","**完整更新日志**: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fcompare\u002Frust-v0.9.2...rust-v0.9.3","2025-09-30T12:25:21",{"id":172,"version":173,"summary_zh":174,"released_at":175},72417,"rust-v0.9.2","**完整更新日志**: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fcompare\u002Fpy-v2.4.1...rust-v0.9.2","2025-08-24T03:43:04",{"id":177,"version":178,"summary_zh":179,"released_at":180},72418,"rust-v0.9.1","## 变更内容\n* 修复：由 @kylejan 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F245 中修复了 i64 MAX 的死循环问题\n\n## 新贡献者\n* @kylejan 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F245 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fcompare\u002Frust-v0.9.0...rust-v0.9.1","2025-08-11T13:48:14",{"id":182,"version":183,"summary_zh":184,"released_at":185},72419,"rust-v0.9.0","## 变更内容\n* @lidarbtc 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F217 中将 Hyperliquid 添加到数据采集器\n* @CodrinSocol 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F219 中修复了 Matplotlib 图例重叠的 bug\n* fix(rust): @zzho325 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F220 中实现了在接收到 SIGTERM\u002FSIGINT 信号时关闭连接器的功能\n* @Ayushi-Angelone 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F222 中启用了数据源中的 S3 文件\n* @mokcoo 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F229 中实现了币安现货连接器\n* @MarcoAndreaBuchmann 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F232 中改进了 DataError\n\n## 新贡献者\n* @lidarbtc 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F217 中做出了首次贡献\n* @CodrinSocol 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F219 中做出了首次贡献\n* @Ayushi-Angelone 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F222 中做出了首次贡献\n* @mokcoo 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F229 中做出了首次贡献\n* @MarcoAndreaBuchmann 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F232 中做出了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fcompare\u002Frust-v0.8.1...rust-v0.9.0","2025-08-03T14:35:39",{"id":187,"version":188,"summary_zh":189,"released_at":190},72420,"rust-v0.8.1","## 变更内容\n* @SidKZ0 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F194 中引入了不可变记录器\n* @volemont 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F196 中使用缓冲写入来记录数据\n* fix(rust): @zzho325 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F216 中修复了在计算持续时间差时可能出现的溢出问题\n\n## 新贡献者\n* @volemont 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F196 中完成了首次贡献\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fcompare\u002Frust-v0.7.0...rust-v0.8.1","2025-05-26T14:49:48",{"id":192,"version":193,"summary_zh":194,"released_at":195},72421,"rust-v0.7.0","## 变更内容\n* [修复] @spacegoing 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F169 中修复了 binancehistmktdata 转换中的 bug\n* 重构：将 IO 责任从 Processor trait 中移出，由 @garyttierney 完成，链接为 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F134\n* 新增 mexc 支持，由 @calumrussell 完成，链接为 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F173\n* 新增 hyperliquid 支持，由 @calumrussell 完成，链接为 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F174\n* 更新 btreemarketdepth.rs，由 @SidKZ0 完成，链接为 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F179\n\n## 新贡献者\n* @spacegoing 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F169 中完成了首次贡献\n* @garyttierney 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F134 中完成了首次贡献\n* @calumrussell 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F173 中完成了首次贡献\n* @SidKZ0 在 https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fpull\u002F179 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fnkaz001\u002Fhftbacktest\u002Fcompare\u002Fpy-v2.1.1...rust-v0.7.0","2025-02-07T12:07:29",{"id":197,"version":198,"summary_zh":199,"released_at":200},72422,"py-v2.1.1","特性：实验性直播功能。\n修复：解决在 ROIVecMarketDepth 中清空市场深度时出现的未检查边界问题。\n修复：在数据工具中检查 Tardis 模式。\n杂项：将 NumPy 升级至 2.0 版本。","2024-11-24T12:55:29",{"id":202,"version":203,"summary_zh":204,"released_at":205},72423,"rust-v0.5.0","特性：使用 Iceoryx2 实现统一的连接器。\n修复：解决 `ROIVecMarketDepth` 中清空市场深度时存在的未检查边界问题。","2024-11-24T12:54:44",{"id":207,"version":208,"summary_zh":77,"released_at":209},72424,"py-v2.1.0","2024-09-03T12:27:56",{"id":211,"version":212,"summary_zh":77,"released_at":213},72425,"rust-v0.4.0","2024-09-03T12:27:28",{"id":215,"version":216,"summary_zh":77,"released_at":217},72426,"py-v2.0.0","2024-08-14T12:45:32",{"id":219,"version":220,"summary_zh":77,"released_at":221},72427,"py-v2.0.0rc1","2024-08-10T14:39:22",{"id":223,"version":224,"summary_zh":77,"released_at":225},72428,"rust-v0.3.2","2024-08-10T14:21:56",{"id":227,"version":228,"summary_zh":229,"released_at":230},72429,"py-2.0.0rc0","基于 Rust-v0.3.1","2024-08-04T14:39:53",{"id":232,"version":233,"summary_zh":234,"released_at":235},72430,"rust-v0.3.1","A significant amount of refactoring has been done. Many backtesting APIs are now stabilized. One major change is the unification of L2 and L3 events to provide more streamlined APIs. Unfortunately, this induces changes to the data file structure, requiring raw data to be processed into normalized data again. Please see the [Data Preparation](https:\u002F\u002Fhftbacktest.readthedocs.io\u002Fen\u002Flatest\u002Ftutorials\u002FData%20Preparation.html) for the conversion.\r\n\r\nThanks to \r\n@ian-wazowski\r\n@roykim98\r\n@d23rojew\r\n@WannabeBotter\r\n@dogfood1","2024-08-04T07:35:15",{"id":237,"version":238,"summary_zh":239,"released_at":240},72431,"v1.8.4","**Fixed**\r\nFixed missing parenthesis in stat.\r\n\r\n**Improved**\r\nReduced the memory usage in the data conversion utils.","2024-06-11T13:58:28",{"id":242,"version":243,"summary_zh":244,"released_at":245},72432,"v1.8.3","**Fixed**\r\nFixed incorrect event flag handling in the data utilities for the Rust implementation.\r\n\r\n**Added**\r\nAverage daily turnover (average daily trading amount \u002F capital) and return per trade in basis points are added to stat.","2024-05-30T15:46:36",{"id":247,"version":248,"summary_zh":249,"released_at":250},72433,"v1.8.2","**Added**\r\nThe data utilities and data preparation tutorials have been updated for the Rust version.","2024-05-19T13:50:59",{"id":252,"version":253,"summary_zh":254,"released_at":255},72434,"v1.8.1","**Fixed**\r\nFixed data conversion errors in the Rust experimental implementation.\r\nChanged ceil to floor to adopt a more conservative approach for calculating executed quantity in the PartialFillExchange model.\r\n\r\n**Added**\r\nImplemented timestamp unit conversion in data utilities.\r\nEnabled support for regular stream conversion for Binance Futures feed data. (Previously, only combined stream was supported.)","2024-04-24T14:35:17"]