Quant应该学习哪些 Python 知识?

想在市场上赚钱,必须同时具备研究和交易两样能力。

Quant应该学习哪些 Python 知识?

答主更多应该算一个trader而不是quant(虽然对quant的一些知识也略懂),下面的答案可能更多是从一个交易员的角度来回答

想在市场上赚钱,必须同时具备两样能力:

研究:做出正确的能够获利的决策,也就是寻找Alpha的能力

交易:基于研究的结果和交易信号,执行相应的下单风控等操作,也就是将Alpha落实到你账户盈利上的能力

研究方面

龙哥的答案已经覆盖了常用的库,这里就从研究的整体方向上来介绍下:

获取数据:可以选择使用TuShare、通联、万得等数据工具下载数据,并将原始的数据格式转化为你自己想用的数据格式(可以用Python脚本实现),以保存到数据库中

存储数据:几乎绝大部分常用的数据库都提供了Python接口,SQLSQL/HDF5等等多种,最常用的应该是MySql和MongoDB,有兴趣学Q的也可以直接去用KDB+,数据库具体会应用的方向包括保存数据、读取数据、数据补全机制、数据变频(TICK变K线等)

数据回测:将数据读取到内存中后(以numpy数组或者pandas序列的形式),进行策略的回测,并对回测结果进行研究(matplotlib绘图),或者对参数进行优化(scipy等)

建模相关:对数据进行一些统计学检验(statsmodel)以及机器学习建模(scikit-learn)

集成开发环境:在有针对性的IDE中实现以上步骤会更加简便快捷(ipython/spyder)

交易方面

这部分是答主的主场了,主要分为两块:

1. 执行交易:对于绝大部分量化策略,都在一定程度上需要自动/半自动的下单功能。

CTA策略突破入场(秒级延时)

期权做市实时挂撤单(毫秒级延时)

股指期货高频(微秒级延时)

分级基金套利(批量自动下单,延时没有以上几种重要)

Alpha套利(篮子交易,一般要使用vwap等算法)

2. 策略风控:同样一般需要自动或者半自动的风控功能.

期权组合的希腊值风险实时监控对冲

分级基金套利的beta净敞口、行业暴露等实时监控对冲

Alpha套利策略的因子监控

具体需要掌握的知识:

1. 模拟实盘交易的策略回测:将策略重新编写为可以基于数据回放(逐TICK/逐K线)的模式进行回测的程序,模拟实际交易情况,杜绝未来函数的可能性,实盘交易中使用完全相同的程序进行交易,保证实盘和回测的一致性。这块通常需要专门的框架或者程序,比如通联的优矿、掘金、vn.py框架中的vn.strategy等。

2. 实盘交易接口:将想要下的单子通过交易接口发送到经纪商柜台,目前可以实盘直接使用的应该包括掘金(期货)、vn.py中的vn.lts(证券、期权)和vn.ctp(期货)。如果要使用其他的柜台需要自己封装,如恒生、金证等。

3. 其他语言拓展:作为最有名的胶水语言之一,Python的拓展功能不用绝对是浪费。针对计算瓶颈可以使用cython拓展,针对API可以用boost.python和swig进行封装,调用matlab直接运行其中提供的特定算法,使用COM接口调用Excel自动生成每日交易记录和报表……

4. GUI程序的开发:相当数量的量化交易依旧需要交易员进行实时监控,除了在cmd中不断print一些数据外,更合理的方案是开发自己需要的GUI界面,重点推荐PyQt,比在C++中用Qt开发要来的快捷很多,底层运行的也是C++的代码,速度完全不用担心。一些有特别需求的人也可以考虑开发在浏览器中显示的界面,比如经常想用手机远程监控。

个人的Python知识体系:

研究方面

1. 期权目前国内的历史数据较少,所以整体上用万得的API就足以满足需求,做CTA策略研究会从MC导出csv格式的数据再读取到Python中,目前在研究通联的接口,原因无他:方便和性价比。

2. 数据储存主要用MongoDB,主要原因同样是方便,既可以用来存历史的行情数据(Tick,K线),也可以存交易系统的日志,甚至用来保存交易系统参数设置等等,存取数据如同使用Python字典一样方便(MySql试过用不惯)。

3. 数据回测,比较粗的回测一般就直接在Spyder里随手写测试脚本:读取原始数据,用矩阵的形式计算一些变量(技术指标、希腊值),然后用循环逐行跑回测,结果出来后用matplotlib绘图很方便。比较精细的回测会基于vn.py中模拟实盘交易的回测框架,在速度上会慢些,但是可以基本杜绝未来函数。

4. 建模相关:这块不是本人的主攻领域,偶尔有需求拿SciPy边看文档边写。

5. 集成开发环境:交互式开发写策略回测一般用Spyder,开发大型程序的时候用WingIDE(朋友友情支持的正版,不得不说非常给力),智能提示、自动完成可以大幅提高开发效率。

6. 交易接口:就是答主自己开发的vn.py框架了,期货方面是CTP接口,股票和期权方面是华宝的LTS接口,熟知大部分底层开发细节(为了封装接口,没办法)。然后针对不同的交易类型、交易策略,针对性的开发一些Python函数和算法,在其中实现特殊的简化下单功能(这些上层功能没放到框架中)。

7. Python语言拓展:必须掌握的是cython,提升python计算性能的神器;另外为了封装API用的boost.python,和swig比起来的主要好处是封装完全使用C++语言,同时答主也没有在java/perl中调用封装模块的需求。

8. GUI开发:PyQt,功能强大,文档也比较全;高性能的实时绘图:pyqtgraph,一些风控分析的图表可以用matplotlib(嵌入到PyQt中),生成的图表质量更高。

最后关于Python在量化交易领域的地位:

答主认为就像Javascript现在在web领域的地位一样,Python现在可以几乎覆盖整个量化交易业务链:从研究到写交易程序,一气呵成(可以叫做全栈Quant?)。其他的语言总会有这样那样的短板:

C++/C#/Java:适合写交易程序,不适合用来做策略开发

Matlab/R:适合做策略开发,但是在交易执行方面存在不少问题:速度、不稳定等等

Python:速度不如C++,策略开发不如Matlab,但其作为胶水语言,使用这样那样的小技巧后,在两个方面都能满足需求

最后也是很多人喜欢问的:Python确实不适合开发超高频/超低延时(追求的性能提升在微秒级)的交易策略,不过:

1. 在当前时间点,这个需求已经不那么迫切了;

2. 很多资金容量大能赚大钱(不一定是超高的回报率)的策略对延时的要求并没有那么高

so it’s all up to you

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2019年5月2日 下午9:19
下一篇 2019年5月2日 下午10:28

相关推荐

Quant应该学习哪些 Python 知识?

星期四 2019-05-02 22:18:41

Quant应该学习哪些 Python 知识?

答主更多应该算一个trader而不是quant(虽然对quant的一些知识也略懂),下面的答案可能更多是从一个交易员的角度来回答

想在市场上赚钱,必须同时具备两样能力:

研究:做出正确的能够获利的决策,也就是寻找Alpha的能力

交易:基于研究的结果和交易信号,执行相应的下单风控等操作,也就是将Alpha落实到你账户盈利上的能力

研究方面

龙哥的答案已经覆盖了常用的库,这里就从研究的整体方向上来介绍下:

获取数据:可以选择使用TuShare、通联、万得等数据工具下载数据,并将原始的数据格式转化为你自己想用的数据格式(可以用Python脚本实现),以保存到数据库中

存储数据:几乎绝大部分常用的数据库都提供了Python接口,SQLSQL/HDF5等等多种,最常用的应该是MySql和MongoDB,有兴趣学Q的也可以直接去用KDB+,数据库具体会应用的方向包括保存数据、读取数据、数据补全机制、数据变频(TICK变K线等)

数据回测:将数据读取到内存中后(以numpy数组或者pandas序列的形式),进行策略的回测,并对回测结果进行研究(matplotlib绘图),或者对参数进行优化(scipy等)

建模相关:对数据进行一些统计学检验(statsmodel)以及机器学习建模(scikit-learn)

集成开发环境:在有针对性的IDE中实现以上步骤会更加简便快捷(ipython/spyder)

交易方面

这部分是答主的主场了,主要分为两块:

1. 执行交易:对于绝大部分量化策略,都在一定程度上需要自动/半自动的下单功能。

CTA策略突破入场(秒级延时)

期权做市实时挂撤单(毫秒级延时)

股指期货高频(微秒级延时)

分级基金套利(批量自动下单,延时没有以上几种重要)

Alpha套利(篮子交易,一般要使用vwap等算法)

2. 策略风控:同样一般需要自动或者半自动的风控功能.

期权组合的希腊值风险实时监控对冲

分级基金套利的beta净敞口、行业暴露等实时监控对冲

Alpha套利策略的因子监控

具体需要掌握的知识:

1. 模拟实盘交易的策略回测:将策略重新编写为可以基于数据回放(逐TICK/逐K线)的模式进行回测的程序,模拟实际交易情况,杜绝未来函数的可能性,实盘交易中使用完全相同的程序进行交易,保证实盘和回测的一致性。这块通常需要专门的框架或者程序,比如通联的优矿、掘金、vn.py框架中的vn.strategy等。

2. 实盘交易接口:将想要下的单子通过交易接口发送到经纪商柜台,目前可以实盘直接使用的应该包括掘金(期货)、vn.py中的vn.lts(证券、期权)和vn.ctp(期货)。如果要使用其他的柜台需要自己封装,如恒生、金证等。

3. 其他语言拓展:作为最有名的胶水语言之一,Python的拓展功能不用绝对是浪费。针对计算瓶颈可以使用cython拓展,针对API可以用boost.python和swig进行封装,调用matlab直接运行其中提供的特定算法,使用COM接口调用Excel自动生成每日交易记录和报表……

4. GUI程序的开发:相当数量的量化交易依旧需要交易员进行实时监控,除了在cmd中不断print一些数据外,更合理的方案是开发自己需要的GUI界面,重点推荐PyQt,比在C++中用Qt开发要来的快捷很多,底层运行的也是C++的代码,速度完全不用担心。一些有特别需求的人也可以考虑开发在浏览器中显示的界面,比如经常想用手机远程监控。

个人的Python知识体系:

研究方面

1. 期权目前国内的历史数据较少,所以整体上用万得的API就足以满足需求,做CTA策略研究会从MC导出csv格式的数据再读取到Python中,目前在研究通联的接口,原因无他:方便和性价比。

2. 数据储存主要用MongoDB,主要原因同样是方便,既可以用来存历史的行情数据(Tick,K线),也可以存交易系统的日志,甚至用来保存交易系统参数设置等等,存取数据如同使用Python字典一样方便(MySql试过用不惯)。

3. 数据回测,比较粗的回测一般就直接在Spyder里随手写测试脚本:读取原始数据,用矩阵的形式计算一些变量(技术指标、希腊值),然后用循环逐行跑回测,结果出来后用matplotlib绘图很方便。比较精细的回测会基于vn.py中模拟实盘交易的回测框架,在速度上会慢些,但是可以基本杜绝未来函数。

4. 建模相关:这块不是本人的主攻领域,偶尔有需求拿SciPy边看文档边写。

5. 集成开发环境:交互式开发写策略回测一般用Spyder,开发大型程序的时候用WingIDE(朋友友情支持的正版,不得不说非常给力),智能提示、自动完成可以大幅提高开发效率。

6. 交易接口:就是答主自己开发的vn.py框架了,期货方面是CTP接口,股票和期权方面是华宝的LTS接口,熟知大部分底层开发细节(为了封装接口,没办法)。然后针对不同的交易类型、交易策略,针对性的开发一些Python函数和算法,在其中实现特殊的简化下单功能(这些上层功能没放到框架中)。

7. Python语言拓展:必须掌握的是cython,提升python计算性能的神器;另外为了封装API用的boost.python,和swig比起来的主要好处是封装完全使用C++语言,同时答主也没有在java/perl中调用封装模块的需求。

8. GUI开发:PyQt,功能强大,文档也比较全;高性能的实时绘图:pyqtgraph,一些风控分析的图表可以用matplotlib(嵌入到PyQt中),生成的图表质量更高。

最后关于Python在量化交易领域的地位:

答主认为就像Javascript现在在web领域的地位一样,Python现在可以几乎覆盖整个量化交易业务链:从研究到写交易程序,一气呵成(可以叫做全栈Quant?)。其他的语言总会有这样那样的短板:

C++/C#/Java:适合写交易程序,不适合用来做策略开发

Matlab/R:适合做策略开发,但是在交易执行方面存在不少问题:速度、不稳定等等

Python:速度不如C++,策略开发不如Matlab,但其作为胶水语言,使用这样那样的小技巧后,在两个方面都能满足需求

最后也是很多人喜欢问的:Python确实不适合开发超高频/超低延时(追求的性能提升在微秒级)的交易策略,不过:

1. 在当前时间点,这个需求已经不那么迫切了;

2. 很多资金容量大能赚大钱(不一定是超高的回报率)的策略对延时的要求并没有那么高

so it’s all up to you