美文网首页从零入门量化交易系列程序员区块链学习
搞金融的同学三小时快速入门python【从零入门量化交易系列】

搞金融的同学三小时快速入门python【从零入门量化交易系列】

作者: 西瓜量化 | 来源:发表于2018-04-24 08:51 被阅读378次

    【本文比较长,有4000多字和大量配图,并且需要实际操作,建议在电脑端打开】

    前面,我们讲了为什么要做量化交易,什么是量化交易,以及量化交易的解决方案。作为一个屌丝,这里我们选择开源(Bu Yao QIan)的解决方案:VN.PY来开始我们的量化交易旅程。然而要想使用VN.PY你得懂一点Python,不用太多,一点就好。

    在之前和很多搞金融的同学交流的时候,很多人都是因为觉得要花上几个月学编程,所以打消了对量化的兴趣。

    其实是姿势不对,我们不是必须把编程学的很溜才能搞量化,我们只要“会一点点”就可以了,这才是快速入门量化的正确方法。

    所以,今天给大家带来一个3小时快速入门Python的教程

    在这里声明,这篇文章目的是为了让没有编程经验的同学,能够快速入门,所以内容是最小知识集(真的不用懂太多)。按照本文边看边做,3个小时内肯定能够学会Python的基础编程。

    有Coding基础的同学,本文可以略过。请出门右转到京东购买《Python金融大数据分析》,学习进阶内容。

    一、Python是什么?

    Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合网页编程的JavaScript语言等等,Python就是其中一种。

    Python的优势,一是容易上手,二是完成同一个工作,编写的代码量小。比如,完成同一个任务,C语言要写1000行代码,Java只需要写100行,而Python可能只要20行

    废话不多说,我们进入学习环节。

    二、Python和Anaconda的安装和使用


    要学习Python,你得先安装Python和对应的编辑器。这里有人已经帮我们做好了打包的软件,anaconda。只要装上这个,Python和对应的编辑器就都有了,还附带了很多进行科学计算的package,可谓是金融分析利器。

    如果从国外官网下载会比较慢,这里推荐到清华镜像地址下载,你可以百度“anaconda 清华镜像”找到下载地址,或者在公众号后台回复“清华镜像”获得下载地址。

    这里以Windows为例。为了便于后面安装VN.PY,我们下载4.0的32位版本,如下图:

    安装完毕后,点击开始菜单在Anaconda里面找到,Jupyter NoteBook,点击打开后就能开始Python编程了。

    我们可以进入桌面文件夹,建立自己的第一个Notebook文件,这样比较好找一点。

    建立NoteBook后,就能看到我们的编程界面了:

    到这里我们的工具就准备好了。

    三、编程语言要学习的内容

    一种编程语言的学习,入门的基本包括几个方面:

    1、基本的类型,拿汽车来打比方,你可以理解为构成汽车的各个部件

    2、各种容器,可以理解为能装很多东西的部件,就像汽车的后备箱

    3、控制逻辑,可以理解为汽车的方向盘,用来控制程序的运行

    4、函数,可以理解为把一连串经常要用的指令进行组合,这样我们不需要每次都重新写,只需要调用一个函数就可以了。

    5、面向对象,可以理解为函数已经满足不了需求,通过对象可以把更多东西组合在一起,方便我们调用和他人理解。

    四、Python的基本类型

    Python的基本类型其实不多,也就是整数(int)、浮点数(float)、布尔值(bool)、字符串(str)这几种。Python是一种强类型语言,所以我们要注意对象的类型,可以使用type()函数来显示对象的类型。使用Jupyter NoteBook进行编程,显示如下:

     基本类型是我们在Python中用来表述数据最小的颗粒度.

    五、Python的容器


    容器是用来记录数据的,Python中的常用容器有列表、集合、元组、字典。

    1.列表

    列表(list)是一种有序的容器,可以对元素进行增、删、改操作,例如:

    2.集合

    集合(set)是一种无序的而且元素不重复的容器。对上面的列表用set()做一个转化,会发现,之前重复的Lily没有了。

    3.元组

    元组(tuple)和list非常类似,但是tuple一旦初始化就不能修改。因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。

    4.字典

    字典(dict)在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

    大家可能对这些容器没有什么概念,但当你要存一个股票的N天收盘价时,你就会用到列表;当你要存股票名字和代码的对应关系的时候,你就会用到字典。容器就是我们用来装金融数据的篮子。

    六、Python的控制逻辑


    Python是通过缩进排版来组织代码逻辑的,通过Tab键或者空格代表缩进。

    有相同所及的代码属于同一代码块,如果使用if、while、for、def或者class等关键字开始的代码行,要以冒号结束,并且其后所有代码缩进相同的量,直到这个代码片段结束。

    1.条件判断

    计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。

    比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:如果if判断是true ,则执行if下缩进的语句;如果if判断是False,就不执行if的内容,而去else下缩进的语句;此外可以用elif来加入多类别判断:


    2.与、或、非

    在Python中 逻辑运算符与、或、非是用and、or和not来代表的,这一点比较接近英文

    3.for循环

    Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。for循环是我们编程常用的控制形式,他的流程如下图:

    代码实例:

    4.while循环

    While循环是很重要的特别是很多回测框架,底层一定是有一个while循环来不断拿数据,然后送到回测代码中进行回测。

    while循环是当条件为真时,就不断执行,直到条件为假为止,中间可以用 continue,break 来跳过循环,continue 用于跳过该次循环,break 则是用于退出循环;

    5.列表推导式

    在我们看别人的量化代码时,有时候作者为了一些难以名状的目的,会使用列表推导式来写代码,把几行代码集合成一行,这会让很多新手摸不着头脑。在这里给大家举例讲解:

    看到这样的代码,大家不要慌,认证的看几遍,一般都能看懂的。就是把循环、判断和赋值写在了一行里面。

    七、函数

    函数是我们为了避免编写重复代码,而采用的一种把某个代码片段复用的方式。

    1 内置函数

    Python为我们提供了很多的内置函数,比较常用的是求数组中的最大、最小值:

    2 自定义函数

    对于系统中没有提供的功能,我们自己自定义函数来实现:

    3 lambda函数

    针对一些比较简单的函数,没必要完整定义一个函数,这个时候我们可以用Lambda匿名函数直接定义,更加简洁:

    八、面相对象

    面向对象编程(Object Orient Programming,OOP),是把某些特征抽象出来,形成一个类。每个类一般包含的是:属性和操作属性的方法(或者叫函数)。thoPython中的类定义方式与其他语言差别不大,最大的特点是每个类方法的第一个参数都是以self开始,后面是其他参数。

    Python中并没有访问控制,没有类似Java,C++中private\public的关键字来表明方法的类别,而是通过特定的属性和方法命名规则来达到这个效果。protect、private系统保留定义的规则如下:

    1.任何以单下划线开头的名字都代表protect,比如self._5minBar、self._marketPoint;

    2.任何以双下划线开头的名字都代表private,比如self.__init

    3.任何以双下划线开头和结尾的名字,都代表系统保留,比如:__len__();

    1.类的封装

    在编程中,我们希望能够更好的描述一个事物,而“类”就是这个解决方案,我们把一个事物的一些特征和行为都封装在这个类里面,这样我们在要使用的时候,就只需要新建一个类的对象,而不用再把所有的代码都重写一遍。

    2.静态方法、类方法

    静态方法的使用场景:我们在编程中,会碰到有一些需要用到与类有关系的功能,但并不需要创建一个实例来参与时,就可以用到静态方法。静态方法用@staticmethod来进行标识,并且可以没有任何参数。

    类方法的使用场景:有时候我们会不新建一个实例来参与,有时候我们也会在实例中调用,可以用类方法。类方法用@classmethod来进行标识,第一个参数需要是表示自身类的cls参数。

    3.继承和多态

    封装、继承和多态是面对象编程的三大特点。

    怎么理解封装、继承和多态呢?

    1)以买房为例,开发商们把各种配置、面积等特征浓缩成一个叫做“三室两厅”的通用类。这个过程就叫封装

    2)某个开发商在“三室两厅”的基础上,增加了“南北通透”这个特征,产生了“南北通透三室两厅”这个类。这个过程就叫继承

    3)当我们定义了多种“三室两厅”的子类,比如“临江大户型三室两厅”,“地铁上盖实用三室两厅”。当我们要做一个“看电视”的方法时,我们在“三室两厅”这个基础类别中定义好,然后在各种子类中进行实现。

    多态在这个时候就会体现出它的好处,当我们确认它是“三室两厅”类型,我们不用管它具体哪一种“三室两厅”,我们都可以通过“看电视”这个方法来进行调用。而系统会识别这个房子具体是哪种“三室两厅”,然后调用自类中实现的方法。这就是多态的好处,调用放只管调用,不用管细节

    九、如何进行简单的程序调试

    写完一段代码后,我们都需要对代码进行检查和调试,而调试的方法,最简单的分为两种,print和打断点。

    1.print

    当我们希望对某段代码进行检查时,我们可以把中间关键变量的值用print方法打印出来,比如说,在作CTA交易时我们会把交易的时间、头寸规模、标的都打印出来,进行检查。上面,在类的方法中,加入print语句,就是最简单的调试方法。

    2.打断点

    当我们碰到一些比较复杂的问题时,调试会非常棘手,用print已经很难完成,这个时候就需要用刀IDE的断点调试功能。让程序以单步的方式运行,检查可能存在问题的变量是否是正常数值,从而发现问题。目前对断点调试支持最好的室pycharm这个IDE。

    1)我们需要在想检查的地方打上断点,然后点击Debug按钮

    2)程序运行到我们打断点的地方会停住

    3)我们可以查看在这个状态下各个变量的值是否正确

    你能看到这里,说明是真的希望成为一名宽客。而且相信你对Python已经有了一定的认识。如果是没有经验的同学,一定要对照文章的代码,自己敲一遍,也花不了几十分钟,但这能让你能更有底气的说:“我会Python”(你已经有了一百行的代码量^_^)。本文就到这里,下篇开始正式进入量化交易系统部分,敬请期待。

    相关阅读

    克服贪婪和恐惧的方式:量化交易

    第二篇-什么是量化交易系统,目前有哪些解决方案?

    相关文章

      网友评论

      • 8443123f60e4:面相对象中第二行中‘thoPython中的类’应该是‘Python中的类’
      • 8443123f60e4:Python的控制逻辑中的while循环中代码错误:
        i=1
        while i<10:
        print(i)
        i+=1
        if i%2==0:
        continue
        输出为1-9.
        改为:
        i=1
        while i<10:
        i+=1
        if i%2==0:
        continue
        print(i)
        输出为:3 5 7 9
        8443123f60e4:汗,代码排版真无语
      • 暴走的狐狸:挺好的。我正在研究金融方面的AI,至少Python入门了
      • suting1996:请问下,有编程基础没有经融基础怎么入门???
        西瓜量化:@suting1996 后面会有更新,看完9篇,然后自己动手做一遍,基本就入门了。
      • 尹志林:好无聊
        西瓜量化::smile:要兼顾没有编程经验的

      本文标题:搞金融的同学三小时快速入门python【从零入门量化交易系列】

      本文链接:https://www.haomeiwen.com/subject/yuerkftx.html