2 个版本
0.1.1 | 2024 年 1 月 5 日 |
---|---|
0.1.0 | 2024 年 1 月 4 日 |
#281 in 金融
在 alator 中使用
63KB
1.5K SLoC
什么是罗塔拉?
罗塔拉是一个使用 Rust 构建的的后端回测库/应用程序。您可以将其作为独立服务器运行罗塔拉,或将交易所导入 Rust。Alator 是后者方法的示例实现。
Alator 最初是另一个应用程序中使用的回测库。随着时间的推移,回测成为了一个独立的应用程序,然后它开始开发跨语言的解决方案,可以在服务器上运行。这个过渡还处于早期阶段,这并不是一个生产应用程序。
lib.rs
:
什么是罗塔拉?
罗塔拉提供了交易所后端,用户可以针对其运行回测。创建和运行回测的标准机制是 JSON 服务器,但用户也可以导入一个库。库主要用于 Rust 中的测试和示例创建。使用罗塔拉库实现的前端代码在 Alator 库中。
罗塔拉处于早期开发阶段。文章中使用的多数组件已在先前应用程序中使用。这个库中的责任分离仍在进行中,因此当前使用的许多抽象可能会减少。
实现
单个交易所实现由以下组成
- 一个输入,Penelope 是一个示例。输入产生报价,并将定义交易所希望使用该来源必须使用的报价格式。
- 一个订单簿实现,Diana 是一个示例。订单簿包含核心执行逻辑,并定义了订单和交易的格式。这与交易所不同,因为订单簿可以是 LOB、可以使用蜡烛图等。并且这与向客户端呈现的接口有明显的区别。
- 一个交易所实现,例如 Uist。从代码的角度来看,这通常是一个相当薄的包装,更多地依赖于客户端类型,而不是订单簿实际使用的执行逻辑。从上面的内容进一步解释,交易所是提供给用户一系列可能操作的外部接口,它并不太关心事物的具体实现方式(但确实需要绑定到一个特定的订单簿实现)。例如,Uist有很多关于编排以及客户端如何与交易所匹配状态的方法。
- 交易所的服务器实现返回JSON响应,通过交易所实现。
- 交易所的客户端实现提供了一组Rust API,既用于记录客户端如何调用服务器。
除此之外,我们还有一些数据源,它们调用外部源并绑定到交易所:例如,可以使用Binance输入创建Uist交易所。
抽象的激增是为了给用户提供最大的灵活性,但随着我对这个应用程序了解的更多,这可能会发生变化。
Uist
Uist的接口定义在 UistClient 中。
Uist的流程如下:
- 在启动时调用init,返回有关数据集的一些信息
- loop
- fetch_quotes,返回当前日期的价格信息
- insert_order/delete_order
- tick,返回是否有另一个tick以及在上一个tick上执行的交易
Uist没有客户端标识符。尽管可以在Uist上运行多个策略,但这并不可取,因为很难确定哪些交易分配给每个策略。服务器支持并发执行,但没有客户端标识符,因此无法返回正确同步的结果。
Order_id仅在订单传递到订单簿后设置一次。交易所仅在调用tick时将交易传递给订单簿,这些挂单将被重新排序,以便在购买之前执行销售。Order_id并不总是反映执行优先级。
一旦插入订单,就不能在同一tick中删除它,因为订单只有在通过订单簿后才会获得一个id。
cargo运行 --binuist_server_v1[ipv4_address] [端口]
开发优先级
短期
- 添加示例代码,展示在Python中运行的策略。
- 添加更多外部数据源
- 添加更多带有加载外部数据的二进制文件的服务器
- 添加另一个交易所,以便更清晰地分离关注点
长期
- 添加包含L2数据的订单簿,这需要L2源
依赖关系
~23–38MB
~653K SLoC