【发布时间】:2011-03-11 15:27:55
【问题描述】:
我认为 C/C++ 与 C#/Java 性能问题已经很好地解决了,这意味着我已经阅读了足够多的证据表明 VM 语言不一定比“接近硅”的语言慢。主要是因为 JIT 编译器可以做静态编译语言做不到的优化。
但是,我最近收到了一个人的简历,他声称基于 Java 的高频交易总是被 C++ 击败,并且他一直处于这种情况。
快速浏览求职网站确实表明 HFT 申请者需要 C++ 知识,查看Wilmott 论坛显示所有从业者都在谈论 C++。
出现这种情况有什么特别的原因吗?我原以为现代金融业务有点复杂,具有类型安全、托管内存和丰富库的 VM 语言将是首选。这样生产率会更高。另外,JIT 编译器越来越好。他们可以在程序运行时进行优化,因此您会认为他们使用该运行时信息来击败非托管程序的性能。
也许这些人正在用 C++ 编写关键位并从托管环境(P/Invoke 等)调用它们?这可能吗?
最后,有没有人对这个中心问题有经验,这就是为什么在这个领域中,非托管代码无疑比托管代码更受欢迎?
据我所知,高频交易人员需要尽快对传入的市场数据做出反应,但这不一定是hard realtime 的要求。如果你反应慢,你的情况会更糟,这是肯定的,但你不需要保证每次响应都有一定的速度,你只需要一个快速的平均值。
编辑
是的,到目前为止,有几个很好的答案,但很笼统(广为人知)。让我指定 HFT 人员将运行什么样的程序。
主要标准是响应能力。当订单进入市场时,您希望成为第一个能够对其做出反应的人。如果你迟到了,其他人可能会抢在你之前,但每个公司的策略略有不同,所以如果一个迭代有点慢,你可能会没事。
该程序整天运行,几乎没有用户干预。无论处理每条新市场数据的功能如何,每秒都会运行数十次(甚至数百次)。
这些公司通常对硬件的价格没有限制。
【问题讨论】:
-
并且说“如果一次迭代有点慢可能没关系”似乎是一厢情愿,tbh。听起来像是“我真的很想用 C#,你确定不行吗?”一次迭代缓慢意味着一次迭代中您的利润较低。这可能是“好的”,但如果可能的话,你想避免它。几天前与我交谈的一位 HFT 开发人员非常清楚地强调“如果一个操作需要 1 毫秒,那就太慢了”。他们确实使用了 C# 和 C++ 的混合体,但祝你好运,向那些认为 1ms 延迟不可接受的人出售一种用于时间关键组件的 GC 语言。
-
你不认为 1 次慢迭代是可以的,因为它会运行数百万次吗?当然,如果你总是比每个人都慢,那是行不通的。但是,如果您每天要获取数百万次股票,那么平均速度更快才是最重要的?我想我想知道对 C++ 的需求是否是历史性的(已建立的代码库),或者它是否真的是一种性能优势。
-
也许 GC 造成的延迟是您在使用竞争对手的平台编程非 GC 语言时输给其他人的决定因素。我认为这对活跃的交易者会产生巨大的影响。
-
@Carlos:但你假设这只是一个“有点慢”的迭代。假设您每秒获得 20,000 个价格(这就是我与之交谈的开发人员说他们的系统处理的)。这意味着如果 GC 需要 50 毫秒来运行一个集合,您不会错过一个单一的价格。你错过了很多。而且它不会只发生一次。随着垃圾的堆积,它会定期发生。坦率地说,你不会假设“如果我能保持 80% 的时间就可以了”就进入 HFT。你这样做是因为你认为你可以超越其他人。每次迭代。
-
我认为要记住的重要一点是,当 JIT 运行的平台在编译时未知时,它非常擅长优化。这(可能)不适用于 HFT。 Java 可以利用特定硬件,但如果您愿意牺牲二进制文件的可移植性,C++ 也可以。
标签: .net c++ performance real-time finance