- Python量化交易
- 张杨飞
- 1344字
- 2020-08-27 20:54:58
第2章 Python量化编程基础
本章首先介绍了Python语言作为量化交易入门语言的理由,然后讲解了Python的基础概念,介绍常用的数据分析库NumPy与Pandas,以及机器学习库scikit-learn,最后讲解绘图库Matplotlib的基本用法。
纯粹从计算机性能和速度出发,C++语言无疑是量化交易的最佳选择,它是最接近计算机底层的语言。C++语言通过对CPU多核多线程的优化,合理分配内存及显卡计算等,可充分“榨干”硬件的每一份性能,在微秒必争的高频交易世界去追求更低的延时。在高频交易领域,只有更快的速度才能抢到价格更低的单子,交易成本就会低于对手。所以只要交易数量足够大,积少成多,其赢利是“恐怖”的。
为了保证交易系统的高效性和稳健性,公司会习惯让IT团队自主开发或者购买C++搭建的底层通用平台开发程序,对内部组件进行封装,对外提供行情和交易API接口,可以让其他编程语言,如Python、C#和R等语言接入来开发策略。
但从新手入门量化交易的角度来看,Python语言则打败强大的C++语言,成为新手最受欢迎的语言,原因有以下几点。
(1)在高频交易领域,必须靠速度来赚钱。但是对于中低频的交易,速度就显得不那么重要了,一定程度的网络延时或者交易系统延时还是能接受的,赢利重心转向交易策略。所以C++语言的特性在中低频交易中并不能凸显出来。
(2)在研发交易策略上,C++语言不是一个很好的选择。作为静态语言,什么都要自己定义,这会浪费大量的精力。打个比方,拿到一份股票数据,不管是分析历史价格趋势还是波动性,第一件事就是通过画图来直观感受。Python语言有非常强大的数据分析库,不到十行代码就能够轻松搞定。若用C++语言的话,肯定会花大量的时间在编译、调试、再编译上。当最后把图画出来,发现已经码完上百行代码了。所以用C++语言去研发策略的话,大部分的精力容易先浪费在“造轮子”上,之后才会考虑策略本身的问题。人的精力和天赋是有限的,很难同时兼顾数学建模和底层代码调试这种差距巨大的工作。而Python语言则提供很多造好的“轮子”,例如,科学计算库NumPy与Pandas、数据绘图库Matplotlib、技术指标计算库TA-Lib等。这些“轮子”是用强大的C++语言编写并且封装好的,在需要的时候直接调用就可以了。Python胶水语言的特性可以让研究员放心地把精力放在数学建模上。
(3)C++操作的烦琐也间接反映其学习曲线过于陡峭,对于量化交易新手而言非常不友好。与之相反,Python因为其语法非常像英语,学习的边际成本会大幅度降低。Python容易到连小学生都可以学,例如为了响应2017年国务院发布《新一代人工智能发展规划》,山东省最新出版的小学信息技术六年级教材加入了Python语言的学习内容。
综上所述,Python倚着其易学性、强大的数据分析库,以及可扩展性成为新手入门量化交易的首选语言。
2.1 Python运行环境搭建
因大多数初学者是Windows用户,所以本次Python运行环境的搭建是基于Windows的,并且在以后讲述的章节中用到vn.py 1.9.0版本,Python的安装版本为Python 2.7(用户亦可直接安装vn.py 1.9.2 LTS版本,二者相差不大)。
2.1.1 安装Anaconda2-5.0.0(32位)
Anaconda是一个基于Python的环境管理工具,其中包含了Conda,Python,NumPy,Scipy,Jupyter Notebook在内的超过180个科学库及其依赖项。
Conda是包及其依赖项和环境的管理工具,适用于Python,R,Ruby,Lua,Scala,Java,JavaScript,C/C++和Fortran语言。Conda可以用于快速安装、运行和升级包及其依赖项,在计算机中便捷地创建、保存、加载和切换环境。因为Conda同样是一个环境管理器,仅需要几条命令,就可以创建一个完全独立的环境来运行不同的Python版本,同时支持在常规的环境中使用常用的Python版本。
由于兼容vn.py的需要(详见第3章),要求安装特定版本,即Anaconda2 5.0.0-Windows-x86,如图2-1所示。
图2-1 Anaconda安装界面
这里要说明一下,Anaconda2 5.2.0对应的是vn.py 1.9.0,也是本书所使用的版本。若使用vn.py 1.8.1或者以前的版本,则需安装Anaconda2-4.0.0,另外在2019年推出vn.py 2.0版本后,将会兼容Anaconda3 64位的版本。
安装完成后要进入Anaconda Prompt,在Prompt上可以使用conda或者pip命令来安装对应的Python依赖库,如图2-2所示。
图2-2 Anaconda Prompt界面
2.1.2 设置Anancoda环境
安装nb_conda用于Jupyter Notebook自动关联nb_conda的环境,如图2-3所示。
图2-3 安装nb_conda
conda install nb_conda
在终端中使用:
conda create -n env_name package_names
在上面的命令中,env_name是所创建环境的名称,package_names是用户要安装在环境中的包名称。
当同时使用Python 2.x和Python 3.x中的代码时这很有用。创建具有特定Python版本的环境,例如,创建环境名称为py2,并安装Python2,在终端中输入:
conda create -n py2 python=2
创建环境名称为py3,并安装最新版本的Python3,在终端中输入:
conda create -n py3 python=3
由于用户做的项目不同,有时候会用到Python2,有时候会用到Python3。所以可以在自己的计算机上创建了这两个环境,并分别取名:py2,py3。这样用户可以根据不同的项目轻松使用不同版本的Python。
最后,如果用户要安装特定版本(例如Python 3.6),输入下面命令,如图2-4所示。
图2-4 创建Python环境命令
conda create -n py3.6 python=3.6
2.1.3 创建共享环境
共享环境的作用在于能够让其他用户在安装的创作者代码中使用所有包,并确保这些包的版本正确。比如,A开发了一个药店数据分析系统,提交给项目部署系统的B来部署,但是B并不知道A当时开发时使用的是Python哪个版本,以及使用了哪些包和包的版本。为解决这个问题,A可以在当前的环境终端中使用:
conda env export > environment.yaml
将A当前的环境保存为yaml文件(包括Python版本和所有包的名称),让B及其他人更轻松地安装A的代码的所有依赖项,如图2-5所示。
图2-5 创建共享环境
2.1.4 列出共享环境
如图2-6所示,输入下面命令可以列出共享环境:
图2-6 列出共享环境
conda env list
2.1.5 安装Jupyter Notebook
Jupyter Notebook是基于网页的用于交互计算的应用程序,它可以在网页页面中直接编写和运行代码,代码的运行结果也会直接在代码块下显示。在编程过程中如果需要编写说明文档,可在同一个页面中以Markdown的格式编写。安装Jupyter Notebook的命令:
conda install jupyter notebook
安装完后,在Anaconda Prompt中输入命令“jupyter notebook”,按Enter键便以网页的形式打开。单击“new”选项就会显示创建出来的Python环境,如图2-7所示。
图2-7 Jupyter Notebook界面上的Python环境
图2-7所示的Python[conda root]和Python[default]指的是Anaconda默认环境,即Python2。
在图2-7右上角“new”选项单击“Python[conda env:py3]”进入新的页面,可输入第一行Python代码“Hello world”,单击图2-8所示方框的运行按钮或用快捷键“Ctrl+Enter”即可执行代码。
图2-8 运行按钮
安装好Python后就可以开始正式学习了。为了更好掌握Python语言的基本用法,这里将Python语言分成4部分逐一讲解,分别是数据、函数、条件判断和循环。