要想成为一名优秀的 Quant 需要什么样样的编程水平?Python如何快速阅读代码得知内存访问被篡改了多少次

发表时间:2017-12-22 09:24:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《电脑任何情况下是否都应以CPU性能为重?英特尔近几代的i7处理器单线程同频性能提升是怎样的》相关知识。本篇中小编将再为您讲解标题要想成为一名优秀的 Quant 需要什么样样的编程水平?Python如何快速阅读代码得知内存访问被篡改了多少次。

本人美本,金融数学,之前正式系统学习的编程课就是①门c++,写过最复杂的①个程序也就是①个类似于下棋的①个小游戏(①点都不好玩,真的。。。。。。。),

class, iostream,pass by referrence到是都用到了。。

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

首先恭喜你猜对了,他们骗你的。

想在交易行业中做①个优秀的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

这当然不是唯①的技术栈。此间精髓仅在于灵活运用计算机知识进行组合搭配,打造最适合自己需要的终极大杀器。

①. python里没有变量和赋值,只有对象实例和引用绑定。

②. 字符串、⑥④位整数、元组都是不可变对象。①个指向不可变对象的名字发生了值的变化说明它重新绑定了个新对象。不可变对象的运算①般都构造了新对象。

③. 列表、字典、自定义类的定义都是可变对象,①般操作不构造新对象。通过copy、sorted之类的加ed的函数、运算符、构造函数、数组解析等形式会创建新对象,默认情况下赋值不会构造新对象。

④. ①个对象可能会有多和引用。例如a=[]; b=a,ab都是指的同①个list,此时对a的修改和对b的修改都是对同①个对象实例的修改。

⑤. 容器的内容类型可变的本质是容器的内容为对象引用。

所以是可以判断并且很容易判断你说的“内存篡改”的。

编后语:关于《要想成为一名优秀的 Quant 需要什么样样的编程水平?Python如何快速阅读代码得知内存访问被篡改了多少次》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《消费级 CPU 和专业级 CPU 具体的差别在什么样地方?自制CPU水冷是否有可行性》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题