在HFT它是有意义的尝试平行订单处理?(in HFT does it make sense to t

2019-07-30 05:13发布

嗯,我认为这是为那些谁与HFT familar更多的理论问题。 我从FAST接收订单并对其进行处理。 我收到大约每秒2-3上千份订单。 现在的问题是,如果我应该尝试对它们进行处理同步或异步的。

我收到一个订单每当我需要做以下几点:

  • 相应仪表的更新手持订单
  • 更新指标和指标取决于该顺序
  • 更新策略和安排一些行动(如有需要买/卖东西等)

要做到这一点同步我有大约200-300微秒(能够每秒处理3000吨的订单)。 这应该是足够的,我认为。

只是安排异步任务,我花我觉得〜30微秒

优缺点:

同步:

  • ++并不需要同步的东西!
  • ++之间延迟“接收定单”和“采取行动”是减少,因为不需要安排任务或者传递数据/工作到另一个进程(在HFT很重要!)。
  • - 然而,“收到订单”行动可能会推迟,因为我们可以在套接字缓冲区等待等待以前为了处理

异步:

  • ++利用现代服务器的强大能力(我的服务器例如具有24个核心)
  • ++在某些情况下更快,因为没有同时被处理前一消息等待。
  • ++可以处理更多的消息,或者可以做每个消息更“复杂”的东西
  • - 需要同步的东西很多东西可以慢降编程

同步的例子:我们收到MSFT为了更新,然后INTC为了更新而在不同的线程处理它们。 在这两种情况下,我们触发纳斯达克指数重新计算。 所以,纳斯达克指数的计算应该是同步的。 然而这方面的问题,可以workarounded避免同步...这只是可能的同步的例子。

所以,问题是应该怎么处理订单更新同步或异步的。 到目前为止,我处理这些异步的,我有专门的仪器每线程。 因为我可以处理异步的两更新的不同仪器(MSFT和INTC),但对于一台仪器(MSFT)两个更新应当被处理同步。

Answer 1:

我从FAST接收订单并对其进行处理。 我收到大约每秒2-3上千份订单

真? 您在兑换工作? 监守严重的是,我从5个交换数据,但这些AREN OT订单;)我建议你得到你的术语行 - 你得到2-3万元的事件,但我真的怀疑你拿到订单。

你有没有想过做一个多级处理设置的? 即你在2线程获取数据,把它交给另一个线程来发现仪器(ID而不是字符串),把它交给另一个线程来更新订单,把它交给另一个线程做指标,手IRT到X线程做战略?

无需安排任务人lthe时间,只是同步队列,一个TAS他们每个人的处理消息。 可以用无锁的方法超级fficient。

残酷地讲:我完全支持多线程,但都在核心处理必须保持基数,所以经典的多线程是出来。 为什么? 我需要完全重复处理,使单元测试得到确定的输出。

到目前为止,我处理这些异步的,我有专门的仪器每线程

你不交易了很多,对不对? 我的意思是,我追踪约200.000仪器(5层完整的交换)。 分配200.000线程是 - 啊 - 望而却步;)

GO上演管道 - 这意味着核心的循环可以很小,并且可以将它们分发到足够多的核心,你有很多更具扩展性。 然后正确地优化 - 例如,它是一个工具的更新相当普遍的来到紧接着又更新同一仪器(例如多个执行而大顺序执行)。 利用这一优势。



文章来源: in HFT does it make sense to try to parallel orders processing?