Python&Java在Ricequant的哥俩好
其实图片中所放的Jython并不是Ricequant正在使用的技术,我们用了其他方法打通了Python和Java更快更自然的结合,但是由于这项技术非常前沿,我们需要观察一段时间才会可能在以后披露。
我们的核心交易系统建立在Java的技术之上,而Java本身十分适合云计算和交易系统的融合,国外也有大量的交易系统是构建在Java和JVM技术之上,关于Java的语言本身的优势不需要在这片文章中赘述了,应该很多人都已经非常了解这一门语言了,我们更多想提到的是为什么Java适合去构建一个大型交易系统:
利用JVM技术做JIT(Just-In-Time Compilation)加速,大部分时候当策略运行起来以后,我们将会在实时运行中支持7*24小时,经过短暂的warmup之后,OMS(Order Management System)和Algorithmic Engine将会非常快,接近于C的最快速度。而Ricequant团队以前做低延迟系统的经验也在我们的所有云端系统中做好了JVM Tuning。 交易系统最担心的是出错 – 比如交易时间的Core Dump,因此所有的落单必须要做持久化存储,如果应用的是C/C++技术,需要面对的是如果做异步存储那么一旦遇到core dump就会遇到损失数据。结果被迫需要做同步存储落单来为Core Dump妥协。但是JVM可以保证你的在做异步存储的时候存储线程依然可以在主线程出错以后保证数据的完整性存储,从而造成延迟降低比较起同步存储。 Java相对来说开发成本更低。
Ricequant在云端从一开始构建了SOA结构,提供了各项交易中的微型服务,其思想来源于Java著名架构师Martin Fowler的文章:http://martinfowler.com/articles/microservices.html
” />
就像乐高积木一样,我们把所需的股票基础信息、市场数据、财务数据、落单、投资组合仓位和风险计算都构架成一个个单独服务,每一个模块单独提供自己的服务出来,在将来我们也很乐意开放这些服务可以让大家编写自己的程序亦或是让机构对接我们的云端服务。
除了我们提供的Java建设的微型服务,我们也利用了Java和JVM其他的令人惊叹的技术进行基础建设以提供极致的金融服务,比如使用HDFS以及我们设计的缓存和时间序列文件结构来组建高频时间序列数据库,此项技术在国内远远领先,可以支持极速查询高频数据和支持海量用户访问。您将会在我们近期上线的分钟历史数据回测中体验到“真正的高频数据”回测体验。
大数据的世界是以Java和JVM技术来构建的,RIcequant的数据存储和读取也已基本上转移到了HDFS上面,将来的大数据分析会启用Spark。而我们的Ricequant底层微型服务是用Java构建的,几乎是无缝和大数据技术栈对接了起来。
后来我们为何又加入了对Python语言的支持呢? 量化交易、分析很多时候更贴近于数据科学家在做的事,对数据进行挖掘、整理思路和规律,就像是一句流行的话来定义数据科学家: “Data Science = statistics who uses python and lives in San Francisco” Python在数据分析中有着自己强大的科学计算技术栈,也包装了很多“远古”时期的Fortran和C的数学计算库:
另外一点是Java暂时缺乏交互式开发的环境,好消息是REPL即将会在JDK9中加入,即JShell。
量化/算法交易、计量金融本质上都是在从玩一些数据开始的,进行数据洗刷(很幸福的是Ricequant帮您处理了绝大部分的这部分工作)、数据整合,数据挖掘亦或是从统计学的观点来计算直到发现一些规律来产生交易的点子,或者是发现了新的论文的点子(恭喜你,博士论文有了!毕业在望。)
那么从这种需求来看,大部分的使用者希望可以使用的是一个保持着和数据源可以不停快速“对话”拿取数据,编写简短代码来处理和计算数据,然后发送给一个高效的服务器计算源去做计算接着能快速把结果返回给你,然后接着改进自己的公式或者参数等等。
这就是大家对交互式编程环境的需求,Python为此诞生了IPython Notebook,也是我们云端策略研究平台的所需要支持的。强大的IPython Notebook也是造成数据分析流行的一个关键因素。
最终我们也打通了Python和Java的完美结合,使用了我们的核心Java交易系统来做回测:其意义在于大部分的回测都是以循环方式进行的,并不是矢量化计算,因此如果使用python的pandas并没有任何优势相反会在每一个循环都比Java慢很多,每个循环慢上几个微妙就会造成最后的回测使用上百万个数据点的时候慢上很多倍,这是无法解决的问题。
而我们充分利用了Python的科学计算的便利以及Java在交易系统上的稳健和高效,以下也是我们现在的技术栈:
在最外部我们使用了Docker技术来保证所有用户都有自己独立、安全、稳定的容器来运行自己的策略和研究,最上层我们提供了简单、强大的Python和Java SDK来帮助大家更快地实现策略和研究想法,底层依靠Java来构建稳定的数据和逻辑服务。
Python SDK已经全面正式开放,Ricequant也会一直使用最前沿的先进技术来一路帮助您实现量化交易策略和研究。