在HFT中尝试并行订单处理是否有意义?
我认为对于那些熟悉hft的人来说,这是一个更理论性的问题。 我收到FAST的订单并处理它们。 我每秒收到大约2-3千个订单。 问题是我是否应该尝试同步或异步处理它们。
每次收到下一个订单,我都需要做以下事情:
为了做同步,我有大约200-300μs(能够每秒处理3000个订单)。 我认为这应该足够了。
只是为了安排异步任务我花了大约30μs
利弊:
同步:
异步:
同步示例:我们收到更新的MSFT订单,然后更新INTC订单并在不同的线程中处理它们。 在这两种情况下,我们都会触发NASDAQ指数重新计算。 因此纳斯达克指数的计算应该是同步的。 然而,这个特殊问题可以通过工作以避免同步……这只是可能同步的一个例子。
所以问题是我应该处理同步或异步的订单更新。 到目前为止,我处理它们异步,我有每个仪器的专用线程。 因为我可以处理针对不同仪器更新的异步两个(MSFT和INTC),但是应该同步处理一个仪器(MSFT)的两个更新。
我收到FAST的订单并处理它们。 我每秒收到大约2-3千个订单
真? 你在交易所工作? 严肃地说,我从5个交易所获得数据,但这些不是订单;)我建议你排好你的期限 – 你得到2-3万个事件,但我真的怀疑你得到了ORDERS。
你有没有想过做多阶段处理设置? 即你在2个线程中获取数据,将其移交给另一个线程以找到该工具(id而不是字符串),将其移交给另一个线程以更新订单簿,将其交给另一个线程来做指标,将其交给X线程做策略?
无需在任何时间安排任务,只需同步队列就可以在每个队列上处理消息。 使用无锁方法可以超级有效。
残酷地说:我都是multithreading的,但核心处理中的所有内容都必须保持基数,所以经典的multithreading就不存在了。 为什么? 我需要完全可重复的处理,以便unit testing得到确定的输出。
到目前为止,我处理它们异步,我有每个仪器的专用线程
你不交易很多,对吗? 我的意思是,我跟踪了大约200,000个乐器(5个完整的交换)。 分配200.000个线程将是 – 啊 – 禁止;)
GO分段管道 – 这意味着核心环路可以很小,您可以将它们分配到足够多的核心,以便您可以扩展。 然后进行适当的优化 – 例如,对于一台仪器的更新,然后是SAME仪器的另一次更新(例如,在执行大订单时执行多次),这是很常见的。 利用这一点。
上述就是C#学习教程:在HFT中尝试并行订单处理是否有意义?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/986764.html