要想成为一名优秀的 Quant 需要什么样的编程水平?

论坛 期权论坛 期权     
Zhang Tongyu   2018-9-22 11:43   153285   8
本人美本,金融数学,之前正式系统学习的编程课就是一门c++,写过最复杂的一个程序也就是一个类似于下棋的一个小游戏(一点都不好玩,真的。。。。。。。),
class, iostream,pass by referrence到是都用到了。。

现在在一个quant trading team 做实习。。。每天也就是用vba帮人家处理下数据。。。实习中发现大部分的trader都是计算机科班出身,他们虽然口头上说,不需要什么太高深的编程水平。但我觉得他们编程水平还是比我强太多。因此我想问问知乎上的各位那些有工作经验的大牛们,你们觉得什么的计算机水平才够用?
分享到 :
0 人收藏

8 个回复

倒序浏览
2#
董可人  4级常客 | 2018-9-22 11:44:00 发帖IP地址来自
首先恭喜你猜对了,他们骗你的。

想在交易行业中做一个优秀的Quant,编程水平可能会在两个方面制约你的发展。至少,在我这个计算机科班出身的人看来,这是非常明显的问题。你知道,每当我看到新来的编程小白Quant,
一定要很真诚地告诉他,只有找到那个命中注定的编程师傅,才能成为一名真正的Quant。

好了,故事开场前,最后说明一点。以下仅针对交易行业。卖方的衍生品定价和风控等我不熟悉,不发表意见。

~~~~~~~~~~~~~~

一,性能不足

交易这一行是真真正正的大数据行业。一个交易所一天产生的数据轻松上几十GB无压力。如果你做跨交易所的交易,这个数字还要翻几番。想想在这样的情况下,一个月的数据量有多大,一年呢?这么大的数据量,如果你的编程功底不扎实,跑一次回测可能就要几个小时甚至几天,就算你有再好的想法,这么慢的反馈也足够把你的灵感扼杀在摇篮里了。

这还不是最糟的。更坏的可能是,你写出来的程序根本无法处理这么大的数据量,要么内存不够用,要么计算时间太长以至于根本无法操作。
必须说,这种情况,后果很严重。

举一个例子。有一次我有一个同事用Python写了一个分析程序,有一个bug产生严重的内存泄漏,导致回测的时候才跑几天的数据,程序就崩溃了。更糟的是算法写的比较复杂,他根本无从下手查出问题所在。问题交给我以后,我只做了一点很简单的改动,对每天的处理开一个单独的进程处理,结束的时候关闭进程就会释放所有内存,问题就解决了。很多时候这种问题对编程高手来说只是小事一桩,但对编程经验不足的人来说却是天大的难题。

另外,现在的确在不断涌现出新的大数据技术,让人们可以更方便快捷的做处理。但是那些还远未到能直接运用到交易数据分析上的程度。非常大的可能是,你需要去理解这些技术的工作原理,然后对你手里的交易数据做适当的转换,才能利用这些技术来分析数据。而这些都是和编程水平直接挂钩的。

二,信息受限

做Quant最重要的能力是发现数据中的规律。但如果你只能拿到二手数据,很多原始信息都被过滤掉了,而你连那些信息长什么样子都没见过,又怎么能去分析其中的规律呢?

这绝不是危言耸听,还是看实例。高频交易最好的数据是直接从交易所收下来的最原始的数据,这个数据包含所有订单操作(增,删,改,成交)的记录,是研究市场微结构的最佳选择。而这种数据的格式往往是特殊的二进制编码,而且要进行特定的重构,才能还原出交易的过程(增删改都是动作,需要作用在对应的数据结构上),没办法直接用数学软件做分析。

有一次,我的一个纯金融背景的Quant同事想要分析一些这样的数据,但他处理不了那种原始格式(Matlab显然是干不了这种事的),只好找我帮他。但我当时自己手里还有无数的任务在处理,没有太多时间,只能做最简单的处理,最后只把成交记录提取出来写成容易识别的格式给他。这样他拿到的数据里那些增删改的记录全都被过滤掉了,那他显然不可能去做任何关于这些记录的分析。
没错,对于一个Quant来说,当他受制于人的那一刻,就已经注定了是一场悲剧。

同样的事情,如果是我自己会怎么做呢?内嵌Java虚拟机进Mathematica或者R,底层解码用Scala,直接在程序内转成容易处理的数据结构,Mathematica/R建模,作图,方案确定以后直接把Scala程序传到云服务器上跑回测。整个流程可以一气呵成,不需要麻烦任何人,更重要的是,我手里的信息是完全的,所以可以分析任何我感兴趣的数据。

事实上,很多时候,秘密就隐藏在这些最原始的数据里。

~~~~~~~~~~~~~~

上面说了这么多,是不是意味着必须像计算机系同学一样,从头苦学所有计算机专业课呢?

当然不是。计算机专业的很多技能,像是操作系统,网络通信,编译器,多线程之类,都跟Quant的工作没什么关系,如果你对那些不熟悉,不用怕。

但是基本的数据结构和算法,是应该扎实掌握的。你应该知道数组,链表,哈希表这些数据结构的原理和区别,能够自己实现一些基本的搜索,排序算法,这会帮助你能正确的估算程序运行时间和需要的内存等资源,出现性能瓶颈的时候也可以自己分析。

对一些进程间通信的方式,比如文件,socket,或者共享内存,应该有基本的理解,这会让你能够组合不同的工具(比如Excel和C++)来实现复杂的功能,很多时候这些小组合会让你事半功倍。

有的同学希望推荐一些这方面的入门书籍,我思来想去,还是决定推荐这本经典的《Introduction to Algorithms》和《Computer Systems - A Programmer’s Perspective》。我承认这两本大部头看起来有一些难度,但是,
请大家努力学(hui)习(dao)。即使你只是简单的通读一遍,相信也会受益匪浅。

对编程语言也要多了解一些,特别是如果你没听说过函数式语言(Functional programming),最好去学一下。这对Quant工作是有极大帮助的。

问题中提到的那几样C++功能,class/iostream/reference都是最基本的概念,只掌握这些是远远不够的。不过我也不建议一开始就拿C++试刀,就算是计算机科班出身,也没几个人能真正精通C++,做Quant又何必和自己过不去呢?去学一下Python或者Scala吧,这些比C++友好的多。对于Quant来说,他们才是传说中你等的那个人。

~~~~~~~~~~~~~~

最后说说那些trader为什么会说不需要太高深的编程水平。很简单,公司招人是需要你产出的,招你进来的时候编程水平是什么样他们心里有数,自然不会要求你做力所不及的事情。如果你满足于一直给别人打下手,只去做别人安排好的工作,出了问题找IT部门(如果有的话)解决,那保持现状也是可以的。
只是这样显然很难成为一名优秀的Quant。

走上Quant这条路,要有不断学习新技能的觉悟。像我们这些计算机出身的人,也要去补之前没学过的数学和金融。大家的背景不同,起点优势不同,但是努力的方向是一致的。

只有打通任督二脉的那一天,你才会成为真正的英雄。
到那时,你才不会再被代码困扰,只因为你心中已然无码。


若上天再给你一次机会面对那个意中人,
请记得告诉她:

只是因为在人群中多看了你一眼
再也没能忘掉你容颜


祝你幸福。

(全剧终)

~~~~~~~~~~~~~~

注:
有人问到我提到的分析软件组合。Mathematica, R, Java/Scala这三者可以任两者组合互通,我有时甚至三者连起来用。参考资料请看:
J/Link User Guide
rJava - Low-level R to Java interface
Rengine
这当然不是唯一的技术栈。此间精髓仅在于灵活运用计算机知识进行组合搭配,打造最适合自己需要的终极大杀器。
3#
木十一  2级吧友 | 2018-9-22 11:44:03 发帖IP地址来自
真的没那么难,别被他们吓着了。这个领域,既不需要UI控制,也不需要并行计算等高大上,只需要统计分析,实现算法,不算极度难。关键是勤奋和灵感。
手机打字,简单说说必备的吧,我是土鳖出身,只捡实用的说。
1. 数据库和SQL必须精通,这是筛选数据和统计分析的基础。交易数据非常大,请谨慎使用。
2. excel,请别笑话,多维展现数据,进行图形化数据分析,给你灵感,可以帮助你建立策略。
3. Python,进行策略回测。必须是python,市场变化这么快,c和c++开发效率太低,根本来不及建模。
以上三步反复进行,直至最优策略。大部分通过不了,小部分通过了也会失败,有时还没实施2次呢就失效了。所以你需要非常勤奋。
高大上的东西可以逐步补充。
市场凶残,请一定纯熟使用上述工具,日日更新策略,否则会被市场玩死。
4#
匿名用户   | 2018-9-22 11:44:04 发帖IP地址来自
提示: 作者被禁止或删除 内容自动屏蔽
5#
欧三文  3级会员 | 2018-9-22 11:44:05 发帖IP地址来自

说说外汇trade的经验,以下说的都是这个,有些偏题。

提供借鉴而已。


俺也算是外汇玩家,毕竟活下来了。

但是距离我理想的trader,还有差距。外汇交易,跟quant有所不同,但是共通点更多。


鄙人代码经验极其丰富,但窃以为码农到trader,实在只是极少数成功者。

也许因为几乎所有的宽客都来自这个行业,使你误以为只有码农才能当好quant。


编程其实只是其次,最难做到的是对交易本身,对操作者自身,以及相关而来的概率的含义,有深刻透彻,近乎完全正确的理解。不正确不完整不通透不要紧,但是你必须知道自己米有完全弄懂,这时候理论绝对不要用于实践,直觉都比理论可靠。重要的不是不懂,而是绝对不要对于不完全懂的事务,下达任何结论。尤其是金融理论和概率高手,最容易犯“刚愎”错误。

然后就是纪律,严格的执行纪律,才能保证你成为survivor。你不是赌徒,牢牢的记住和执行这一点并不容易。有人认为纪律应该在第一条。但我认为,如果在对市场对人性的理解上无法进步,你永远无法成为一个伟大的trader。

6#
行玄  3级会员 | 2018-9-22 11:44:06 发帖IP地址来自
有两拨人,一波从金融工程出发的,一波从计算机出发的,路数不一样,金融工程出发的人更注重策略的开发回测,调试最优化什么的留给第二波的吧。
7#
小沈  2级吧友 | 2018-9-22 11:44:07 发帖IP地址来自

想在华尔街 当量化交易员 出国读研 选什么专业合适 多谢回复

8#
C Tang  4级常客 | 2018-9-22 11:44:08 发帖IP地址来自
个人觉得最重要的是策略的测试与优化,这个不限于编程语言,可以是C/C++/Java,或者任何一个,比如有的用weka,有的用R等外部的工具,用java和C++调用都行。关键是策略的本身,当策略经过测试之后,成熟了,要上线了,可以根据交易系统的特点选用技术,比如链接CTP用C++较好,也可用java,不过这步我觉得最简单了。策略的产生、测试、优化是最负责的,也是最有难度的。
9#
yobyin  4级常客 | 2018-9-22 11:44:10 发帖IP地址来自
我是从计算机学习
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP