#order #order-book #backtesting #trading #queue #position #data

hftbacktest-derive

hftbacktest: [内部] 辅助推导过程宏

1 个不稳定版本

0.1.0 2024年8月4日

10#backtesting

Download history 82/week @ 2024-07-29 45/week @ 2024-08-05

每月127次下载
hftbacktest 中使用

MIT 许可证

14KB
297

HftBacktest

CodeQL Python版本 包版本 下载 Rust版本 Rust crates.io版本 许可证 文档状态 路线图 Github

主分支已切换到hftbacktest-2.0.0-alpha,它使用Rust实现作为后端。如果您想查看当前版本1.8.4,请查看相应的标签。

高频交易回测工具

该框架旨在开发高频交易和做市策略。它侧重于考虑数据馈送和订单延迟,以及订单队列位置以进行订单填充模拟。该框架旨在提供更精确的基于完整订单簿和交易tick馈送数据的市场回放式回测。

关键特性

实验性功能目前处于开发初期,已经完全用Rust重写,以支持以下功能。

  • Numba JIT函数中工作(Python)。
  • 支持自定义时间间隔或基于行情和订单接收的完全逐tick模拟。
  • 基于L2价格市场订单和L3订单市场订单(仅Rust,正在进行中)的完整订单簿重建。
  • 使用提供的模型或您自己的自定义模型考虑行情和订单延迟的回测会计。
  • 考虑订单队列位置并使用提供的模型或您自己的自定义模型进行订单填充模拟。
  • 多资产和多交易所模型的回测。
  • 使用相同的算法代码部署实时交易机器人:目前适用于Binance期货和Bybit。(仅Rust)

示例:Binance期货完全回测过程

高频网格交易:使用在Rust中实现的高频网格交易策略进行Binance期货完全回测的过程。

文档

请参阅完整文档

入门

安装

hftbacktest支持Python 3.10+。您可以使用pip:

pip install hftbacktest

或者您可以使用以下命令从Git仓库克隆最新开发版本:

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

数据源与格式

请参阅数据数据准备

快速示例

通过以下代码片段了解使用hftbacktest进行回测的概览

@njit
def simple_two_sided_quote(hbt):
    max_position = 5
    half_spread = hbt.tick_size * 20
    skew = 1
    order_qty = 0.1
    last_order_id = -1
    order_id = 0
    asset_no = 0

    # Checks every 0.1s
    while hbt.elapse(100_000_000) == 0:
        # Clears cancelled, filled or expired orders.
        hbt.clear_inactive_orders(asset_no)

        # Gets the market depth.
        depth = hbt.depth(asset_no)

        # Obtains the current mid-price and computes the reservation price.
        mid_price = (depth.best_bid + depth.best_ask) / 2.0
        reservation_price = mid_price - skew * hbt.position(asset_no) * depth.tick_size

        buy_order_price = reservation_price - half_spread
        sell_order_price = reservation_price + half_spread

        last_order_id = -1
        # Cancel all outstanding orders
        orders = hbt.orders(asset_no)
        values = orders.values()
        while True:
            order = values.next()
            if order is None:
                break
            if order.cancellable:
                hbt.cancel(asset_no, order.order_id)
                last_order_id = order.order_id

        # All order requests are considered to be requested at the same time.
        # Waits until one of the order cancellation responses is received.
        if last_order_id >= 0:
            hbt.wait_order_response(asset_no, last_order_id)

        # Clears cancelled, filled or expired orders.
        hbt.clear_inactive_orders(asset_no)

            last_order_id = -1
        if hbt.position < max_position:
            # Submits a new post-only limit bid order.
            order_id += 1
            hbt.submit_buy_order(
                asset_no,
                order_id,
                buy_order_price,
                order_qty,
                GTX,
                LIMIT,
                False
            )
            last_order_id = order_id

        if hbt.position > -max_position:
            # Submits a new post-only limit ask order.
            order_id += 1
            hbt.submit_sell_order(
                asset_no,
                order_id,
                sell_order_price,
                order_qty,
                GTX,
                LIMIT,
                False
            )
            last_order_id = order_id

        # All order requests are considered to be requested at the same time.
        # Waits until one of the order responses is received.
        if last_order_id >= 0:
            hbt.wait_order_response(asset_no, last_order_id)

示例

您可以在示例目录Rust示例中找到更多示例。

迁移到V2

请参阅迁移指南

路线图

目前,由于Numba的限制,新功能正在Rust中实现,因为高频数据的大小要求性能至关重要。即将到来的任务是将Python中的hftbacktest与Rust中的hftbacktest集成,使用Rust实现作为后端。同时,目前不同的数据格式需要统一。在纯Python方面,性能报告工具应得到改进,以提供更多性能指标并提高速度。

请参阅路线图

贡献

感谢您考虑为hftbacktest做出贡献!欢迎任何形式的帮助来改进项目。如果您有任何改进的想法或错误修复,请在GitHub上打开问题或讨论。

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

请参阅路线图

依赖项

~280–730KB
~17K SLoC