admin 管理员组

文章数量: 887007

#inception# Follow Your Heart and Persue Your Dream

今天开始制定自己的编程学习计划,在信用卡办下来之前是学不了C++了,所以摸索ing...

【总结:
1、211出身,特别喜欢Quant这行,希望做一个实力派,之后可以找一个公司实习,跟个师傅
2、试着去读一下《Introduction to Algorithms》和《Computer Systems - A Programmer’s Perspective》
3、之后会系统学习C++,然后之前有一点matlab基础,下一步可以学一下Python,把matlab系统起来,有时间学一下Q
4、学python,先看head first python中文版,再用论坛的教程进行实战训练.php


综上所述,在信用卡申请下来之前,先学一下Python(4),闲来无事,再去读一下《Introduction to Algorithms》和《Computer Systems - A Programmer’s Perspective》】


挺经典的一句话:带了眼罩的赛马,眼中只能看到前方,所以只会发力向前,无视困难,直奔目标。


************************************************************************华丽丽的分割线*********************************************************************************************

From 知乎:

1、如果你是个初出茅庐的热血少年,对这一行有点兴趣,也愿意倾其功于一役,那请你颤抖吧,鸡东吧,怒吼吧。若你背景和经验都不错,我说的不错是至少国外重点大学本科以上或国内10大名校本科以上,请选择一个相对的高起点,去目前已略有名气的山寨,搬搬砖,打打下手,谦虚好学,跟个愿意教你的师傅,千万千万不要觉得自己牛逼。这一行,不图名气,默默赚钱的实力派到处都是。而假若你非上述此类,请你先没事自学点编程,高数和金融工程,少看点岛国片和跟朋友鬼扯,静下心安安静静为自己未来充电,不要妄自菲薄。这个行业,只相信绩效和实力,不关心你的出身。

2、做Quant最重要的能力是发现数据中的规律。但如果你只能拿到二手数据,很多原始信息都被过滤掉了,而你连那些信息长什么样子都没见过,又怎么能去分析其中的规律呢?
这绝不是危言耸听,还是看实例。高频交易最好的数据是直接从交易所收下来的最原始的数据,这个数据包含所有订单操作(增,删,改,成交)的记录,是研究市场微结构的最佳选择。而这种数据的格式往往是特殊的二进制编码,而且要进行特定的重构,才能还原出交易的过程(增删改都是动作,需要作用在对应的数据结构上),没办法直接用数学软件做分析。

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

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

基本的数据结构和算法,是应该扎实掌握的。你应该知道数组,链表,哈希表这些数据结构的原理和区别,能够自己实现一些基本的搜索,排序算法,这会帮助你能正确的估算程序运行时间和需要的内存等资源,出现性能瓶颈的时候也可以自己分析。
对一些进程间通信的方式,比如文件,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来说,他们才是传说中你等的那个人。

只有打通任督二脉的那一天,你才会成为真正的英雄。

3、两年前在Princeton,我和一位研究计算机语言的PhD两人吃饭聊天。他的主要研究方向就是新的计算机语言,及相关的逻辑学。大神如他一顿饭下来80%的时间处于放空状态,基本没在关注我,但我得到了我自以为深刻的理念:一种计算机语言是一种对应哲学的体现。
因此,在我看来,有五类语言构建了一个丰满的编程能力强的Quant的一切,它们分别是:效率类语言(C、C++、Java等)、胶水类语言(Python、Ruby等)、科学类语言(Matlab、R、S等)、Alpha演算类语言(Lisp、Clojure等)、查询类语言(SQL、Q等)。这是基于我理解浅薄的分类,完全与计算机科学的规范化分类(如面对对象语言、函数类语言)不相容。持不同意见者大可付之一笑。

      1效率类语言(C、C++、Java等):老派的Quant很多都是C++高手,特别是80年代涌入华尔街的那帮MIT的高能物理博士们。在那个年代,可以选择的语言不多。要么就Fortan,要么就C/C++了。所以在当时基本上这些语言同时充当着基础架构(infrastructure)和数值计算(比如Monte Carlo)的双重目的。但是现在各种胶水类语言、科学类语言多了起来,而且由于单机性能越发强悍,效率再也不是唯一的诉求了,因此目前C++、Java大量应用于金融系统级的开发,和对于效率要求极高的实时定价等领域。从一个Quant的角度来看,这类语言最大的特点是快,编程复杂度高,维护难,同时原生语言普遍不支持向量运算。

      2胶水类语言(Python、Ruby等):我必须承认,这些语言是新世代Quant的福音。在国内工作的时候我目睹并参与了一个将原有的C++框架全部用Python重写的项目,而现在JP Morgan这边利率类产品的定价软件也在从Java像Python转移。实现同样的代码,Python、Ruby的实现速度比效率类语言快很多,而且在机器速度越来越快的今天,差距已经不是不可接受。这些语言最大的特点是比较快,编程复杂度高,维护相对简单,同时大量的包(比如Numpy+Scipy)可以轻松实现向量运算。

      3科学类语言(Matlab、R、S等):一般而言,科学类语言最大的特点是支持向量运算,同时各种附加数学、统计包极其丰富,但运算速度无法与前两类相比。在一个具体的投资/交易策略、模型投入实际使用前,你需要快速的去实现(Implement)和验证(Back-testing)你的想法。这个时候,科学类语言就有绝对的优势。验证思路有效后,再用效率类语言或胶水类语言开发成系统级组件。你可以理解为科学类语言是用来造概念车的,而前两类语言是用来量产的。而在具体的职业角度,造概念车的这帮人一般是Pure Quant,而实现量产的很多是Quant Developer。当然也有两者合一的集大成者。

      4Alpha演算类语言(Lisp、Clojure等):我第一次对这类语言感兴趣,是12年冬天接触硅谷一家科技公司时(Prismatic,人工智能新闻App),发现他们在用Clojure,也极力向我推荐Clojure。Clojure是基于Java封装的语言,可以用Java虚拟机执行。但归根结底,Clojure是Lisp这类语言。之前我长期沉迷于过程编程与面对对象等概念之中,第一次接触Lisp很不习惯,但后面开始感叹于这类语言之美。我个人感觉目前Quant界用这种语言偏少,但是不排除以后流行的可能。

      5查询类语言(SQL、Q等):SQL就不必说了,金融公司很多时候都是使用Oracle等关系型数据库,SQL是基础。而我之前几次面试也遇到了SQL的问题。Q是Morgan Stanley为了应对金融中的海量数据而采用的一种非关系型查询语言,特点是极快,有SQL的基础可以很快掌握。

全面的说:如果你是做Pure Quant,整天与交易策略和模型睡觉,那么2、3是必须的;如果你是开发为主,或者是Quant Developer,那么1、2、5是必须的;如果你立志让编程不成为你做Quant的障碍,那么1-5全都是必须掌握或至少了解其思想的。

4、(插)一些我听说过或见到过在实盘跑的量化策略:
Kalman filters
Hidden markov models
Topological manifold learning
Non-linear kernel regression techniques
APT type factor models
Monte carlo options pricing techniques
Continuous time APT factor models with latent variables
Spectral techniques for doing bag of words extraction of factors from natural language corpus for generating forcings for stochastic partial differential models of asset dynamics
Pairs trading/mean regression statistical arbitrage strategies
Automatic graphical model construction (structural inference over dynamic Bayesian networks)
Reinforcement learning based pairs trading strategies
Information theory based investment strategies
J. L. Kelly, Jr., "A New Interpretation of Information Rate," Bell System Technical Journal, Vol. 35, July 1956, pp. 917-26
Sparse over complete basis function methods for feature extraction
Applications 'information geometry'; a field on the border between information theory, probability theory and differential geometry; still very new
Anything that can be used to model or extract features from a time series

5、实际上,一个经受过合格的科学训练的家伙,即便羽翼未丰,只要能虚心学习,认真负责地把前辈们交代的工作做好,日积月累,足以成长为值得信任的骨干。

6、说下自己预备的学习计划:
python基础编程,必须掌握,不仅仅是会语法,还有各种语言细节的坑(当然比C++少很多)。对于常年使用R MATLAB SAS的研究人员来讲,python有很多更偏向程序员的表达方式,需要转换下思维适应。
然后就是各种库
pandas:原AQR资本的员工写的一个库,专门用来处理panel data这种数据结构的,几乎是处理金融时间序列的标配了。
scipy, numpy:科学计算的库,类似于一个小型matlab或者octave
statsmodels : 看名字就知道,统计分析的包。
scikit-learn: 这个包是做python做机器学习的库,地位很高。
matplotlib : python的作图库。如果你喜欢R的ggplot, 现在也有python的版本,貌似还不成熟。

此外ipython的notebook是一个做研究的利器,类似于mathematica的notebook,可以记录自己trail and error的过程。

对于国内来讲,有两个项目比较火一个是获取金融数据的TuShare -财经数据接口包 还有一个就是开源交易平台vn.py ,作者就是 @陈大有。

此外还有若干使用python的量化平台可以尝试, 比如国内的优矿 - 通联量化实验室 (RiceQuant - Beta用的是java,感谢 @钱程 指正),国外的Quantopian和/

如果要做衍生品定价, 学学swig直接在python里调用quantlib, 目前有两个项目 enthought/pyql · GitHub 和 。

7、【自学编程的人缺少哪方面的技能】

我的计算机基础完全是大学时在计算机系学习打下的,应该算是一个纯粹的“科班生”。在我看来,计算机系科班有几大镇山法宝:数据结构,操作系统,编译原理,网络原理,计算机组成原理/体系结构。有没有学过这几门专业课程是判定程序员水平的一条明显的分水岭。

至于一些偏冷门的奇技淫巧,什么 Functional Programming (或者装X一点说 Category Theory),各种搜索排序算法,我觉得了解这些可以说明此人对编程是有真爱,但不了解并不能说明相反。确实是国内的教育相当落后,大学里可能干脆就没开过相关课程,是没办法的事。我三年前在国外面试国内的程序员,基本上听说过 Functional Programming 的都没有,更不要说掌握了,当时我的欧洲同事们对此还表示相当震惊。对此我只想说,既然生为 Hard 模式玩家,还是自己多努力吧。

8、其实python非常适合初学者入门,上手很容易。
我就是完全通过网上资源学了python的。
最大的是3点经验:
1.找一本浅显易懂,例程比较好的教程,从头到尾看下去。不要看很多本,专注于一本。把里面的例程都手打一遍,搞懂为什么。
2.去找一个实际项目练手。我当时是因为要做一个网站,不得已要学python。这种条件下的效果比你平时学一门新语言要好很多。所以最好是要有真实的项目做。可以找几个同学一起做个网站之类。
3.最好能找到一个已经会python的人。问他一点学习规划的建议,然后在遇到卡壳的地方找他指点。这样会事半功倍

推荐几个网上的资源:

简明Python教程
与孩子一起学编程
Head First Python 中文版
笨办法学Python
Dive.Into.Python中文版(附课程源码)
Python核心编程
深入理解Python
Python标准库
Python编程指南

django_book中文版

解压密码均为:

======================
在线教程:
简明Python教程:简明 Python 教程
(较新版):A Byte of Python

Dive into Python:Dive Into Python


现在有很多人都想学一点编程,但是直接看教程又有点太难下手。
之前有几个朋友都问我能不能指导他们一下入门学个语言,于是我就弄了个微信公众号“Crossin的编程教室”。每天讲一点点很简单的内容。如果有0基础想入门的新手,不如来跟着看看,欢迎加入我们共同学习的队伍。

本文标签: inception Follow Your Heart and Persue Your Dream