金十交易学院

4.3 Python语言快速入门

不想错过精彩课程?一键“订阅”,轻松学习!




大家好,欢迎来到金十交易学院《智能量化交易》课程。


摘要:在量化交易策略开发中,如果只能选用一种编程语言的话,那么毫不犹豫,一定是选择Python,从数据获取到策略回测再到交易,Python已经覆盖了整个业务链。在金融量化投资领域占据了重要位置,本节课程我们将学习Python语言入门知识。



一、为什么要学习这么多编程语言


回顾之前的课程,一路走来,我们一共学习了:麦语言、可视化语言、JavaScript语言,包括本节要学习的Python语言。可能有小伙伴会有疑问,我是来学习量化交易的,为什么要学习这么多编程语言呢?


其实,每个编程语言都有自己的语言特性,这些语言也没有孰优孰劣之分,更多的是要看策略更适合哪一种编程语言,以及这个编程语言是否符合你自己。所以有句话讲,只有亲自试过才知道。这也就是我们铺开这么多的篇幅,讲编程语言的原因,工欲善其事,必先利其器。


同时我们也致力于为大家打开量化的大门,普及各种编程语言知识,量化并没有我们想象中的高深莫测和遥不可及,相信未来量化会普及并平民化。


二、量化交易为什么要选择Python


量化交易的流程无非是获取数据、分析计算数据、处理数据等,在数据分析方面,没有其他语言能像Python一样,既精于计算又保持性能。特别是在时间序列分析数据(K线就是时间序列数据)处理,Python有更加简单便捷的优势。另外,比起其他编程语言,Python更简洁易学,阅读好的Python程序感觉就像阅读英语。


三、选择Python的五大原因


1. 量化运用广泛:美国的Quantopian与国内的发明者量化都可以用Python语言。


2. 简单易学:Python的设计哲学是以用户为中心,属于方便调试的解释型语言。


3. 免费开源:无使用成本,开源代码共享,加强学习与使用效率。


4. 丰富的库:数据处理、数据运算、可视化、统计分析、技术分析、机器学习...


5. 应用接口:各大平台数据获取存储调用与实时行情链接下单的接口。


四、完整策略


为了帮助大家快速理解本节的重点知识,在学习JavaScript语言快速入门的知识之前,先对本节名词概念有个初步了解。我们就用最简单的双均线策略为例:


l 多头开仓:如果当前没有仓位,并且5周期均线大于20周期均线。


l 空头开仓:如果当前没有仓位,并且5周期均线小于20周期均线。


l 多头平仓:如果当前持有多单,并且5周期均线小于20周期均线。


l 空头平仓:如果当前持有空单,并且5周期均线大于20周期均线。


如果用Python语言代码编写出来,就是这样的:



上图中的代码就是用Python语言写的一个完整的量化交易策略。可以实盘运行,并且自动下单交易。从代码量上看,Python语言比JavaScript语言更多一些,那是因为我们并没有使用CTA交易框架。


但是整个策略的设计流程几乎是一样的:设置行情品种、获取K线数据、获取持仓信息、计算交易逻辑、下单买卖。也就是说,虽然编程语法是不一样的,但写出来的策略逻辑是一样的,那么接下来,让我们学习Python的基础语法吧!


版本选择


Python有两个版本,即:Python2和Python3,曾经有一个段子,说Python就像一个双管枪,但是每次只能用一个管发射子弹,但永远也不知道究竟哪个更准。所以如果你是Python新手,建议直接学习Python3,因为它是最新的,并且Python社区一直在维护。我们的课程也是用Python3讲解的。


标识符


标识符也就是变量的名字,如下图的test、Test、test10、_demo等。Python中的一切(变量、函数名和操作符)都区分大小写,也就是说变量名test和变量名Test是两个不同的变量。标识符(变量、函数、属性、函数参数的名字)的第一个字符必须是字母、下划线(_),后面的字符还可以是数字,如下图所示:



注释


注释就是对一行代码的翻译或者解释,其规则非常简单,注释包括单行注释和块级注释。单行注释以井号(#)开头,块注释以三个单引号(''')或以三个双引号(""")开头,以三个单引号(''')或以三个双引号(""")结尾,如下图所示:



行与缩进


Python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。 缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。如下图:在这个案例中,程序会报错。就算if条件是成立的,也不会输出“True”,因为Python在代码运行之前,会自动检测代码语法是否正确,如果代码格式错误,程序将不会运行。原因是第5行代码并没有统一代码的缩进格式。四个空格缩进是Python的固定格式,需要大家多熟悉。



变量


变量可以保存任何类型的数据,直接写变量的名字就是创建变量,但是当创建变量的时候需要同时设置变量的值,否则程序会报错。等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。如下图所示:name2就是变量名,“发明者量化”就是变量的值。如果不重新给name2设置新的值,那么name2的值始终是“发明者量化”。



数据


Python有六个数据类型,其中有3个不可变数据,和3个可变数据。顾名思义不可变数据一旦创建完毕,它的值是不能被改变的,在内存中的地址是唯一的;可变数据是内存中地址的引用,如果它的值改变,其内存地址不变。


l 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);


l 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。



数字


Python的数字类型支持 int(整型)、float(浮点型)、bool(布尔型)、complex(复数)。内置的 type() 函数可以用来查询变量所指的对象类型。如下图:



运算符


像大多数语言一样,Python的数学运算都是很直观的。无论是算术运算符、比较运算符还是逻辑运算符都与我们在学校里面的知识一样。其中算术运算符就是加减乘除的数学运算,比较运算符可以比较两个值是否小于或者大于,逻辑运算符主要有:逻辑与、逻辑或、逻辑非。比如我们在交易策略中,最常用到的字符串就是品种代码了,比如:“rb1910(螺纹钢1910)”、“MA1910”。



需要注意的是:“and”是逻辑与,代表“并且”的意思。“or”是逻辑或,代表“或者”的意思。“!”是逻辑非,代表“否”的意思:


l “and”是所有条件都为“true”的时候,最终条件才为“true”;


l “or”是所有条件中,只要有任何一个条件为“true”,最终条件就为“true”。


优先级


如果有一个100*(10-1)/(10+5)表达式,程序是先计算哪一步?中学数学告诉我们:①如果是同一级运算,一般按从左往右依次进行计算。②如果既有加减、又有乘除法,先算乘除法、再算加减。③如果有括号,先算括号里面的。④如果符合运算定律,可以利用运算定律进行简算。麦语言的优先级也是如此,如下图:



布尔值


布尔型代表真假,通常用在条件判断和循环语句中。Python 定义了两个常量“True”和“Flase”代表真假。 其实任何对象都可以转成布尔类型,也可以直接用于条件判断,如下图所示:



字符串


字符串就是文字,在设置品种代码的时候会经常用到字符串比如“if1905”。Python中的字符串用单引号 ' 或双引号 " 括起来。加号 + 是字符串的连接符。可以根据索引值获取字符串中的某个字符,如下图:



列表


列表是Python中使用最频繁的数据类型,你可以把列表想象成一个容器,只不过容器中的元素是从左往右有序排列的,第一位的元素是0,第二位的元素是1,以此类推。另外Python的列表可以存放任何数据类型,如下图所示:



函数


Python中的函数跟我们中学学的函数没有本质的区别,你可以理解为传进去什么,通过函数的计算,输出什么,如下图所示:



if语句


if语句经常出现在我们生活当中,比如:如果今天下雨,我就打伞。也就是只有当指定条件为True时,该语句才会执行代码。注意,注意代码的缩进格式,否则会生成Python错误!如下图所示:



if...else语句


if...else语句也是常用的语句,比如:如果今天下雨,我就打伞;否则,我就不打伞。else语句是if语句的延伸,也就是当指定条件为False时,else后面的语句才会执行代码。如下图所示:



elif语句


由于python并不支持switch语句,所以在多个条件判断时,Python只能用elif语句来实现。比如:如果是阳线,我就看多;否则如果是阴线,我就看空;否则我就观望。如下图所示:



for循环


有时候我们需要获取最近几天的K线数据,就需要从K线数组中,根据K线数据的位置依次获取,那么使用for循环是很方便的,如下图所示:



while循环


我们都知道行情是在不断变化的,如果你想获取最新的K线数组,就得不断的去一遍又一遍地运行相同的代码,那么使用while循环,只要指定条件为true,循环就可以一直获取最新的K线数组。



break语句和continue语句


循环是有前提条件的,只有这个前提条件为“true”的时候,循环才会开始重复的做某些事,直到这个前提条件为“false”的时候,循环才会结束。但是break语句可以在循环执行的过程中立刻跳出循环;continue语句可以中断某一次循环,然后继续下一次循环。如下图所示:



return语句


return语句会终止函数的执行并返回函数的值。return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!



策略架构


策略架构你可以理解为策略的固定格式,发明者量化工具采用轮询模式,以下是经典的商品期货策略架构。


其中第4行-第7行是整个程序的主入口函数,也就是说,计算机是从第4行开始执行代码的;紧接着直接执行第5行,就进入了无限循环;然后在无限循环里面一直执行策略逻辑函数(onTick)和休眠函数(Sleep);onTick函数也就是第1行的代码,你可以在第2行编写策略逻辑;我们知道,在循环中,程序的执行速度是非常快的,那么使用休眠函数(Sleep)可以让程序暂停一会,下面的代码Sleep(500)就是每循环一次,就休眠500毫秒。




下节预告:在技术分析领域的趋势类策略中,均线和通道突破无疑是两大门派。虽然目的都是为了抓住价格走势的趋势,但是这两类策略的交易哲学以及风险特征截然不同。学习了本节Python语言入门,下节我们将带大家手把手编写一个通道突破的量化交易策略。


课后习题:

1. 试着用发明者量化工具中的Python语言获取历史K线数据。

2. 试着写下本节开头的策略代码,并写上注释。


最后给大家一个温馨小提示:在课程和直播页面,点击“订阅”按钮,就可以及时接收提醒,不错过课程和直播的精彩内容!


金十交易学院,8点准时更新


0人喜欢
2019-03-25 08:00:00