2

我在看编年史,我不明白一件事。

举个例子——我有一个写者的队列——市场数据提供者在它们出现时写入分时数据。假设队列有 10 个读取器 - 每个读取器是读取新报价的不同交易策略,并可能发送买入或卖出订单,我们将它们命名为 Strategy1 .. Strategy10。假设有一条规则,我在任何给定时间只能进行一笔交易。

现在的问题 - 据我了解,无法保证这些订阅的读者如何处理 tick 事件的顺序。每个策略都订阅了队列,因此每个策略都将异步获取新的刻度。

因此,当我第一次运行它时,可能是 Strategy1 先收到报价并下订单,然后所有其他策略都无法下订单。

如果我要重播相同的事件序列,则可能是不同的策略首先处理滴答,然后下订单。

当使用相同的初始事件序列时,这将导致完全不同的结果。

我是不是理解错了,或者这真的是这样吗?这个问题有哪些可能的解决方案?

我想要实现的是相同的源事件(报价)序列总是产生相同的交易序列。

4

2 回答 2

1

如果您想要系统中的确定性,那么您需要删除非确定性的来源。在您的情况下,由于您一次只能打开一个交易,因此在单个线程上运行所有 10 个策略(阅读器)听起来是明智的。这也将消除读取器端任何同步的需要,以确保只有一个未平仓交易。

然后,您可以对您的策略(例如循环)使用一些固定的顺序,这将始终为给定的一组输入产生相同的输出。或者,如果决策逻辑太昂贵而无法串行运行,它可以并行执行,每个读取器都输入某种形式的门(类似 Phaser 的结构),在该门上可以决定使用什么策略确定性地。这种设计的缺点是最慢的交易策略会阻碍所有其他策略。

于 2018-01-29T08:13:21.453 回答
0

认为您需要选择同时和独立地想要多少,以及您想要多少顺序和连续。我建议您允许策略独立下订单,但是这些订单的读者通过检查序列号(例如第一个队列中的队列索引)以原始顺序处理它们。

这样,订单的阅读者将以相同的顺序处理它们,而不管它们的处理和写入顺序如何,这似乎是您的目标。

于 2018-01-29T09:34:25.180 回答