来源:雪球App,作者: JoinQuant聚宽,(https://xueqiu.com/8287840120/110553586)
本文是《量化交易零基础入门教程》中的一篇,点击文末阅读原文可查看该系列详情。
摘要
python是什么
python的基础语法
变量与赋值
Python 保留字符
打印 print
全局变量
基本数据类型-数字与字符串
算术运算
查看数据类型 type
数据类型-列表与字典
前言
前文讲解了量化交易中策略运行的基本框架以及实现方法,其中虽然给出一个简单策略的完整代码,但只是初步认识,想完全看懂并自己写需要掌握python这门编程语言。
一般常见的python教程都是针对程序员的,所以很多内容在做量化写策略时都往往用不到。而本教程则是用量化的情景从零讲解python编程,所以会更适合想学做量化策略的朋友。
我们将用前文策略代码为例进行讲解,如下:
Python是什么?
python是与计算机交流的一种语言。我们把想让计算机做的事情用python写出来,就如同前文那样的一行行代码,从而,计算机才能理解并去按我们的想法去做。这是一种通俗易懂的理解,但已经足够了。想了解更多专业角度的介绍可以自行搜索了解哦。
Python2与Python3区别是什么?
Python语言本身也是如同自然语言般在不断变化的,升级到python3.0版本时出现了较大的变化,以至于python分为了python2与python3两个不互相兼容的版本。
由于世界上有很多流行功能函数库对python3的支持并非很好,而有些量化过程中策略或系统可能会用到,所以我们用python2来写策略,而且聚宽做策略回测代码也只支持python2。(聚宽投资研究功能中支持使用python3)
不过对写策略来说,python2与python3的区别并不明显。具体区别见python官方文档。
Python的基础语法
大小写敏感
比较容易理解,就是字母的大写与小写是区分的,所以如果你把前文例子的代码中的若干个字母从小写变成大写,系统会报错。
要用英文符号
之前讲过,冒号、逗号、分号、括号、引号等各种符号必须用英文的,中文的会不识别而报错。
注释
为了让代码的便于交流理解,通常都会在代码中写入注释用以说明代码,注释是给人看的,所以计算机会忽略(顺便提下,空行也会被忽略),用中文记录思路也没关系。强烈建议养成写注释的好习惯。注释的方法有以下两种;
(#)会把所在行的其后的所有内容设定为注释;
例子如下:
三个单引号(''')或三个双引号(""")会把之间的内容设定为注释,以单引号为例;
例子如下:
行与缩进
之前讲过,代码缩进的时候要对齐,缩进方法是四个空格或一个tab键(推荐用tab),不要混着用。比如例子中周期循环部分除第一句都是要缩进的;
缩进的含义是这样的,有些语句是要包含其他连续若干条语句才成立的,这些语句通过缩进表示这种被包含的关系;
例子如下:
一行写多条语句
一般习惯是一行只写一条语句,如果要一行写多条语句要用分号隔开,不常用但要认识,如下,我把例子中原本的第二行与第三行写在一行了(比较长排版可能会自动换行显示)。
例子如下:
一条语句写在多行
有时一条语句可能就会很长,为了便于阅读会用斜杠(不是除号,是从左上到右下的)分隔后写在多行。如下例子的第二行代码被斜杠分隔后写在两行。
例子如下:
量变与赋值
我们在之前的例子中见过这样一行语句:
当时没细讲,含义是把'000001.XSHE'这个字符串赋值给名为g.security的变量(security是英文证券的意思)。
变量通俗的理解是,计算机中存放数据的有名字的盒子;另外变量名字是在赋值语句中定义的。
赋值,即赋予变量数据,写法是等号,含义是把等号右边的数据(或变量里的数据)放入左边的变量中去。
用法如下:
Python保留字符
有些名字被系统所占用不能用作变量名,或任何其他标识符名称;
用法如下:
打印print
print是非常常用而重要的语句,它能把变量里的内容在日志中打印输出出来,通过它我们能了解程序运行的细节。
用法如下:
如下图,把代码放到周期循环里后,点编译运行执行代码,每个交易日都打印了a、b,因为运行了两个交易日,所以打印了2组a、b。注意,后面的例子都可以这个方法来执行。
print也可以直接打印数据,如下:
为了能在日志中看出打印内容的含义,可以采用如下方法,此方法经常用于记录策略的运行情况。
例子如下:
全局量变
你可能会发现初始化里的变量与周期循环里的变量是不通的;
比如你运行如下的代码会报错:
报错信息如下:(含义是a没有被定义)
为了让变量能在全局被使用,需要在变量前加'g.',使之成为全局变量。所以,把刚刚的代码中的a改为全局变量就能正确运行了。
例子如下:
基本数据类型-数字与字符串
对计算机来说,不同的数据往往需要不同的操作与存储要求,因此在赋值时python会自动为数据分类,从而对不同的数据采取不同的应对方法。比如,数字可以数学运算,但文本就不可以,字母可以转换大小写,数字不行。
数字(Number)
数字就是数字,可以做诸如加减乘除的计算操作,具体可分为多种类型,比如股价一般就是浮点数型。因为在赋值变量的时候,python会自动调整变量类型。所以需要关注数字类型的时候并不多。
数字具体分为int(整数)、float(浮点数,即 包含小数位)、bool(布尔值,即True和False,True是1,False是0)等。
例子如下:
字符串(String)
字符串可以理解为文本或文字,不能像数字进行数学运算,有其特别的操作,比如股票代码、股票名称一般都是字符串;
Python 可使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须的相同类型的。如下,不妨用刚讲的print打印下看看。
例子如下:
算术运算
数字变量之间是可以进行算术运算的;
用法如下:
注意如果两个整数类型进行计算,结果默认还是整数;
用法如下:
查看数据类型type
type语句可以,告诉我们变量里存放的是什么类型的数据。
用法如下:
数据类型-列表与字典
为了更方便的取用数据,在最基本的数据类型-数字与字符串基础上,还有其他的数据类型,他们往往具有更复杂的结构更便捷的功能。比如接下来要介绍的列表(List)、字典(Dictionary),不过这里的内容实在是繁多,此处只介绍最常用的内容,其他内容后续用到再讲。
列表(list)
列表数据类型能方便我们操作一组数据。比如一组股价、一组股票名等。
建立方法如下:
选取list中的某个元素的用法如下:
选取list中的一段的用法如下:
字典(dictionary)
字典数据类型同样能方便我们操作一组数据,与list不同的是我们可以为这组数据自定义地建立索引。
建立方法如下:
选取dict中的某个key的值方法如下:
选取dict中的所有key与所有value:
自测与自学
实践下本文中的各个例子;
了解下list与dict的更多用法。参考资料:列表、字典;
以下代码打印结果是?
以下代码的打印结果是?