首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

玩转python量化1:python入门

题记

这个教程是一个量化的基础教程,在这个教程中,我将从最简单的python开始,一直到搭建一个可用于实战的量化系统。

所以这将是一个持续更新的栏目,宗旨就是为那些对量化有兴趣的人入个门。

本系列的侧重点是金融知识和交易策略的涉及,淡化编程,若有想深入编程技术细节的同学,请自行阅读相关书籍,在文章的末尾有编程技术书籍推荐。所以这里会淡化或一笔带过所涉及的编程细节。

对技术基础没有要求,但对编程环境有要求:请使用liunx或mac os系统,不要使用window系统。

1.python编程环境1.1 Anaconda

若想减少python2与3版本差异带来的麻烦,建议使用Anaconda的python集成环境,该环境包含了市面上流行的python库,如NumPy、Pandas、Scipy、Matplotlib、IPython等。

同时,Anaconda可以同时管理python2和python3,具体配置方法请自行百度。

1.2 IPython

IPython是一个优秀的python交互对话环境,性能远优于Python Shell,Anaconda中自动默认安装了IPython.

在终端命令窗口,启动ipython的方法:

XavierXia-Mac:~ xavierxia$ ipython

Python 2.7.13 Anaconda, Inc. (default, Sep 21 2017, 17:38:20)

Type “copyright”, “credits” or “license” for more information

In [1]:

1.3 Spyder

Spyder是Python的一个集成开发环境IDE,具备代码编辑、代码除错等功能,还可以查看和修改对象值、文件管理等功能。

它也整合了一些经典的函数库,如NumPy、Scipy和Matplotlib库等。

2.python编程基础

python编程基础这一块,我推荐廖雪峰的python教程(https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000),把这个看完就算入门了。

有几个编程要点值得记住:

用#作为单行注释,‘’‘作为多行注释

python里面所有的类型均为对象,包括数值、字符串、容器等类型

在编写python脚本文件,需要加在第一行:# -*- coding:UTF-8 -*-,其表示编码格式为UIF-8,这样有中文字符就不会报错了

2.1 python中的几个常用数据类型

1.列表(List)

列表是一种具备容器功能的类型,如L = [1,2,3],能存储任何类型的数据,里面的元素是可变动的。

2.元组(Tuple)

元组和列表是一样的,如M = (‘M’,2,[1,2,3]),不同之处在于其一旦创建,就无法被修改。

3.字典(dict)

字典是一种“映射”的数据结构,如D = {‘A’:30,’B’:50}。

4.集合(Set)

集合中没有重复的元素,如S = {‘A’,’B’,’C’},同时其元素没有顺序关系。

2.2 python中的模块和包

1.模块(Module)

模块是一种以.py为后缀的文件,在.py文件中定义了一些常量和函数。

若我们有一个priceA.py的文件,那就表明我们已经创建一个priceA.py模块。

如何导入模块,有以下方法:

通过import导入整个模块,如import priceA 或 import priceA as 自定义名称

仅导入模块内的特定函数,如 from priceA import ClosePrice

2.包

包由模块文件构成,将众多具有相关联功能的模块文件组合形成包。一个包文件一般由_init_.py和其他.py文件构成。

_init_.py是包的标志性文件。

如:有一个stock文件夹(包),导入stock包里面的priceA模块,即import stock.priceA

2.3 python中序列类型数据操作

1.list

2.range

range对象属于可迭代对象,可以作为list()和tuple()函数的传入参数。

3.字符串

4.dict(字典)

5.set(集合)

集合类型有set和frozenset两种,set类型对象是可变的,可以增减其中的元素。frozenset类型对象则是不可变的。

2.常用第三方库2.1 Numpy的优点

Numpy库被整合出来的作用在于弥补了python中array的不足。

因为python中直接存储data的数组array对象只能存在一维结构,无法支持多维结构,同时也没有相关数组运算函数,如向量、矩阵运算等。

Numpy的核心功能是高维数组。

需要注意的要点:

1、通过索引值来提取数组中的元素或者对数组进行切片,提取的新数组与原来数组共享数据内存空间;如a1 = np.linspace(1,26,6,dtype=int),a2=a1[0:3:1],a3=a1[2:-1],就有a1、a2、a3共享同一个内存空间。

2、使用整型数组作为索引提取出来的数组与原数组不共享内存数据空间;如a1[[0,1,4]],a3=a1[[0,3,2]]。

2.2 Pandas的优点

Pandas是建立在Numpy之上,其最大特点至于提供灵活直观的数据结构来处理关联数据和有标签的数据。其被广泛运用于金融、统计以及社会科学领域的数据处理。

Pandas提供了两大数据结构:一维结构的Series类型数据、二维结构的DataFrame数据。

需要注意的要点:

1、Series对象本质上是一个NumPy数组,每个Series对象实际上都由两个数组组成,具有index和values两大属性。如S2=pd.Series([1,3,5,7,9],index=[‘a’,’b’,’c’,’d’,’e’])。

2、Series支持标签切片和位置切片,两者有一点不同在于 标签切片同时包括起始和结束标签位置,而位置切片只包括起始位置,但不包括结束位置,如S2[0:4]和S2[‘a’:’d’]是相同的。

3、时间序列分析在金融数据分析中用的很多,时间序列(time series)类型也是一种Series类型,只是它的index属性值为时间戳(Timestamp对象)。

4、DataFrame是一个表格型的数据结构,每一列代表一个变量,而每一行则是一条记录。也可以说它是共享同一个index的Series的集合。

5、DataFrame中,1标签索引与切片:可以通过行和列的标签名来提取相应的数据,主要是运用df.loc[row_indexer,column_indexer];2位置索引与切片:通过位置提取特定的数据,是用df.iloc[row_indexer,column_indexer]。

3.总结

在这里,我推荐以下书籍:

《Python数据分析基础教程:NumPy学习指南》

《利用Python进行数据分析》

这两本书都是我基本全部看完了的,风格不同,第二本是Pandas源代码作者亲自出的书,讲的全面,同时结合金融数据这一块给出了很多处理实例,而第一本把numpy库的使用细节都讲到位了。

对于结果的可视化,我觉得在调试系统时会临时使用Matplotlib,在系统成型应该都会切换成类似于Highchats的js框架,所以我建议,Matplotlib我们只需了解即可,应该把更优的展示放在web上。

再次注明一下:本节内容,请通过自行阅读相关书籍加以理解。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180210G0SEPK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券