哪种编程语言用于计算密集型交易组合模拟?

Bij*_*jan 6 python java trading

我正在建立一个交易组合管理系统,负责非高频交易组合的生产,优化和模拟(处理1分钟或3分钟的数据条,而不是标记数据).

我计划使用Amazon Web服务来承担整个应用程序的负载.

我有四种选择,我正在考虑作为语言.

  1. Java的
  2. C++
  3. C#
  4. 蟒蛇

这是项目范围的极端范围.这不是它的方式,也许永远不会,但它符合要求的范围:

  • 每周模拟10,000,000个交易系统.
  • (每个交易系统都有自己的数据挖掘方法,包括特征选择算法,这些算法的计算成本非常高.想象一下使用包装器的500-5000特性.这些都不是经常运行的,但它仍然是一个考虑因素)
  • 实时生产具有100,000个交易策略的投资组合
  • 从全球每个股票/期货市场获取1分钟或3分钟的数据(约100,000)
  • 投资组合的投资组合优化,最多100,000个策略.(相当密集的算法)

速度是一个问题,但我相信Java可以处理负载.

我只是想确保Java CAN能够轻松地处理上述要求.我不想在C++中使用该项目,但如果需要,我会这样做.

C#之所以存在,是因为我认为它是Java的一个很好的替代品,即使我根本不喜欢Windows,如果所有的东西都相同,我会更喜欢Java.

Python - 我读过关于PyPy和pyscho的事情,声称python可以通过JIT编译进行优化,以接近类似C的速度运行......这几乎是它在这个列表中的唯一原因,除了Python是一个事实伟大的语言,可能是最令人愉快的编码语言,这不是这个项目的一个因素,而是一个振作.

总结一下:

  • 实时制作
  • 每周模拟大量系统
  • 每周/每月优化投资组合
  • 从中收集数据的大量连接

没有涉及毫秒甚至第二的交易.唯一的考虑因素是Java是否可以在分散必要数量的EC2服务器时处理这种负载.

非常感谢你们的智慧.

Bry*_*ley 5

选择您最熟悉的语言.如果你平等地了解它们并且速度是一个真正的问题,请选择C.

  • 说实话:如果他对他们都同样了解,那么他可能就不需要在这里问了。 (3认同)

Sim*_*bbs 5

虽然我是Python的忠实粉丝,但我并不是Java的忠实拥护者,在这种情况下,我必须承认Java是正确的方法.

对于许多项目来说,Python的性能不是问题,但在您的情况下,即使是轻微的性能损失也会非常快.我知道这不是一个实时模拟,但即使是批量处理,它仍然是一个需要考虑的因素.如果事实证明一个虚拟服务器的负载太大,那么实现速度提高一倍的实施将使虚拟服务器成本减半.

对于许多项目,我也认为Python将允许您更快地开发解决方案,但在这里我不确定是否会出现这种情况.Java拥有世界一流的开发工具和顶级的企业级框架,用于并行处理和跨服务器部署,虽然Python在这方面有解决方案,但Java显然具有优势.您还拥有Python无法匹配的Java架构选项,例如Javaspaces.

我认为C和C++对这样的项目施加了太多的开发开销.它们是可行的,如果你非常熟悉这些语言,我相信它是可行的,但除了可能提高性能之外,它们没有别的东西可以带到桌面上.

C#只是Java的重写.如果你是Windows开发人员并且如果你更喜欢Windows,我会使用C#而不是Java,这不是一件坏事,但如果你不关心Windows,就没有理由关心C#.


Rol*_*lig 4

我会选择 Java 来完成这项任务。在RAM方面,Java和C++的区别在于,在Java中,每个Object有8个字节的开销(使用Sun 32位JVM或带有压缩指针的Sun 64位JVM)。因此,如果有数百万个物体在周围飞行,这可能会产生影响。就速度而言,Java 和 C++ 在该规模上几乎相等。

所以对我来说更重要的是开发时间。如果你在 C++ 中犯了一个错误,你会得到一个分段错误(有时你甚至没有得到它)​​,而在 Java 中你会得到一个带有堆栈跟踪的漂亮异常。我一直更喜欢这个。

在 C++ 中,您可以拥有原始类型的集合,而 Java 则没有。您必须使用外部库来获取它们。

如果您有实时要求,Java 垃圾收集器可能会很麻烦,因为即使在具有 24 个核心的计算机上,也需要花费几分钟来收集 20 GB 堆。但如果您在运行时没有创建太多临时对象,那也应该没问题。只是您的程序可以在您不期望的时候暂停垃圾收集。