4 个版本
0.4.1 | 2024年1月5日 |
---|---|
0.4.0 | 2024年1月4日 |
0.3.3 | 2023年10月11日 |
0.3.2 | 2023年10月11日 |
0.3.1 |
|
在 财经 类别中排名第 147
每月下载量 48 次
175KB
3.5K SLoC
什么是 Alator?
Alator 是 Rotala 的前端,Rotala 是一个用 Rust 构建的回测库。
Rotala 包含所有后端交易所代码。Alator 展示了如何使用这些后端代码来运行回测。Rotala 构建为运行 JSON 服务,但交易所可以作为一个库导入,Alator 使用了后者功能。
Alator 最初是作为另一个应用程序中使用的回测库。随着时间的推移,回测变得成为一个独立的应用程序,然后它转向开发一个可以在服务器上运行的多语言应用程序。这种过渡还处于早期阶段,这不是一个生产应用程序。
lib.rs
:
什么是 Alator?
Alator 是一个财经模拟库,可以与 Rotala 一起使用,以执行交易策略的回测。
Alator 之前是一个独立的包,但现在正在过渡到使用 Rotala 交易所后端的前端回测实现。v0.4 版本之后的版本实现了 Rotala。
回测由以下部分组成:* 策略 - 生成新订单 * 经纪人 - 在 Alator 中,这与其他包含位置计算(即位置/利润)的投资组合重叠,将新订单路由到交易所,嵌入成本。 * 交易所 - 执行新订单,可能嵌入进一步的成本和延迟。 * 数据源 - 策略/交易所使用的数据源,用于确定新订单/填充。 * 时钟 - 在组件之间同步时间。
Alator 包含策略和经纪人的代码。在回测策略时,您不需要使用此代码,并且由于某些交易所实现可以在网络上工作,因此您甚至不需要使用 Rust。此包内的代码表示通用功能,如上所述,已经构建,因此包含在此处。
当前的交易所实现不包含任何逻辑来确定交易的正确性。例如,如果客户以每单位 1 美元的价格下单 100 单位,并且以 50 美元的现金余额成交,那么这应该被经纪人阻止。
同步
状态通过交易所在组件之间同步。交易所持有时钟,应该是价格数据的唯一来源。
在性能方面,这看起来可能不是最佳选择。在库的早期版本中,当库作为另一个模拟应用程序的后端时,同步被分割,每个组件共享时钟和价格源。通过分割同步,发送给交易所的消息数量会成倍增加,例如,策略需要获取最近价格更新。
但通过在同一个地方保持状态,我们可以提供关于回测正确性的良好保证——通过使引入前瞻性偏差更加困难——并通过强制分离关注点,前端变得更加简单/复制生产环境。
重复一遍,一些回测库具有即时交易执行:你在纪元100创建一个订单,它将在同一纪元立即执行。这在Alator中是不可能的,回测不应有任何前瞻性偏差。
因此,不建议使用低频数据,因为订单将不会执行,直到下一个可用的tick(或者你可以填充下一个tick)。
同样,不断触发清算的策略,虽然通常表示前端的一个错误,也会因为Alator中经纪人的实现将尝试重新平衡以恢复偿付能力而表现不佳。由于这种重新平衡不会发生在下一个tick,在某些条件下(例如趋势价格),你可能会出现持续的不足。
依赖项
~24–38MB
~669K SLoC