1 个不稳定版本
0.1.0 | 2024年8月4日 |
---|
10 在 #backtesting
每月127次下载
在 hftbacktest 中使用
14KB
297 行
HftBacktest
主分支已切换到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)
教程
迁移到V2
请参阅迁移指南。
路线图
目前,由于Numba的限制,新功能正在Rust中实现,因为高频数据的大小要求性能至关重要。即将到来的任务是将Python中的hftbacktest与Rust中的hftbacktest集成,使用Rust实现作为后端。同时,目前不同的数据格式需要统一。在纯Python方面,性能报告工具应得到改进,以提供更多性能指标并提高速度。
请参阅路线图。
贡献
感谢您考虑为hftbacktest做出贡献!欢迎任何形式的帮助来改进项目。如果您有任何改进的想法或错误修复,请在GitHub上打开问题或讨论。
以下是一些您可以为此项目做出的贡献示例
请参阅路线图。
依赖项
~280–730KB
~17K SLoC