量化交易开发之基本语法(三)
前文讲解了量化交易中策略运行的基本框架以及实现方法,其中虽然给出一个简单策略的完整代码,但只是初步认识,想完全看懂并自己写需要掌握python这门编程语言。
一般常见的python教程都是针对程序员的,所以很多内容在做量化写策略时都往往用不到。而本教程则是以量化的情景从零讲解python编程,所以将更适合想学做量化策略的人。
本周主要讲解python的基本语法,如下图所示:
一、python是什么
python是与计算机交流的一种语言。
我们把想让计算机做的事情用python写出来,就如同前文那样的一行行代码,从而,计算机才能理解并去按我们的想法去做。
二、基础语法
基础语法:
- 大小写敏感
比较容易理解,就是字母的大写与小写是区分的,所以如果你把前文例子的代码中的若干个字母从小写变成大写,系统会报错。
- 要用英文符号
之前讲过,冒号、逗号、分号、括号、引号等各种符号必须用英文的,中文的会不识别而报错。
- 注释
(#)会把所在行的其后的所有内容设定为注释
# 这是一个注释
三个单引号(''')或三个双引号(""")会把之间的内容设定为注释
'''
这也是一个注释;
这也是一个注释;
'''
- 缩进
之前讲过,代码缩进的时候要对齐,缩进方法是四个空格或一个tab键(推荐用tab),不要混着用。
# initialize这条语句包含了其下的两条语句
def initialize(context):
# 这两条语句是要被其上的initialize包含的,要缩进
run_daily(period,time='every_bar')
g.security = '000001.XSHE'
- 一行写多条语句
一般习惯是一行只写一条语句,如果要一行写多条语句要用分号隔开。
def initialize(context):
run_daily(period,time='every_bar');g.security = '000001.XSHE'
- 一条语句写在多行
有时一条语句可能就会很长,为了便于阅读会用斜杠;
def initialize(context):
run_daily(period,\
time='every_bar')
g.security = '000001.XSHE'
三、变量与赋值
变量通俗的理解是,计算机中存放数据的有名字的盒子。另外变量名字是在赋值语句中定义的。
赋值,即赋予变量数据,写法是等号,含义是把等号右边的数据(或变量里的数据)放入左边的变量中去。
# 用法: 变量名 = 数据或变量
a=1
b='你好'
# 把a中的数据1赋值给了c
c=a
# 把b中的数据'你好'赋值给了a,此时a中的1被替换了
a=b
四、打印print
print是非常常用而重要的语句,它能把变量里的内容在日志中打印输出出来,通过它我们能了解程序运行的细节。
五、全局变量
你可能会发现初始化里的变量与周期循环里的变量是不通的,比如你运行如下的代码会报错:
def initialize(context):
run_daily(period,time='every_bar')
a=1
def period(context):
print(a)
报错信息如下,含义是a没有被定义:
NameError: global name 'a' is not defined
为了让变量能在全局被使用,需要在变量前加'g.',使之成为全局变量:
def initialize(context):
run_daily(period,time='every_bar')
g.a=1
def period(context):
print(g.a)
所以,把刚刚的代码中的a改为全局变量就能正确运行了。
六、数字与字符串
数字(number)
- 数字具体分为int(整数)、float(浮点数,即 包含小数位)、bool(布尔值,即True和False,True是1,False是0)等。
a = 3 # 整数
b = 3.1415 # 浮点数
c = True # 布尔值
字符串(String)
- Python 可使用引号( ' )、双引号( " )、三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须的相同类型的。
# 其中三引号可以由多行组成来编写多行文本
a = '九歌'
b = "袅袅兮秋风"
c ="""袅袅兮秋风,
洞庭波兮木叶下。
——屈原《九歌》"""
七、算术运算
- 数字变量之间是可以进行算术运算的。
a=3.0
b=2.0
# 为了查看结果我用了print打印
# 加
print("a+b=%s" % (a+b))
# 减
print("a-b=%s" % (a-b))
# 乘
print("a*b=%s" % (a*b))
# 除
print("a/b=%s" % (a/b))
# a除以b的商的整数部分
print("a//b=%s" % (a//b))
# a的b次幂,即指数运算
print("a**b=%s" % (a**b))
# a除以b的余数,即取余运算,为了打印“%”百分号要用两个百分号代表“%”百分号
print("a%%b=%s" % (a%b))
# 用之前的方法执行后结果如下,日期信息省去了
a+b=5.0
a-b=1.0
a*b=6.0
a/b=1.5
a//b=1.0
a**b=9.0
a%b=1.0
八、数据类型type
- type语句可以,告诉我们变量里存放的是什么类型的数据。
# 用法:type(变量名)
a=1
b='1'
# 为了看到结果需要用print把结果在日志中打印
print(type(a))
print(type(b))
九、列表与字典
列表(list):
列表数据类型能方便我们操作一组数据。比如一组股价、一组股票名等。
建立方法:
# 建立一个list: 变量名=[数据或变量名,数据或变量名,......]
a=[1,1,2,3,5,8,13,21]
b=['000001.XSHE','002043.XSHE','002582.XSHE','600000.XSHG']
c=[1,2,'good',[1,2,'luck'],a,b]
# 值得注意的是例子中的c,c是一个list,其中的包含了6个元素,其中有数字(1,2),有字符串('good'),以及三个list([1,2,'luck'],a,b)。
# 因此你应该知道,list中可混合的存放多种数据类型,list中放一个list也行。
选取list中的某个元素:
# 方法: list类型的变量[位置(或称下标或索引)]
# 索引从0开始
# 可以用负数代表倒数第几
c=[1,2,3,4]
# 为了看到结果我们用print打印
print(c[0])
print(c[1])
print(c[2])
print(c[-1])
# 用之前的方法执行后结果如下:(前面的日期以后就不写了)
1
2
3
4
字典(dictionary):
字典数据类型同样能方便我们操作一组数据,与list不同的是我们可以为这组数据自定义地建立索引。
建立方法如下:
# 建立方法: 变量名={索引名:数据,索引名:数据,....}
# dict中的索引也叫键(key),数据也叫值(value)
a={'平安银行':'000001.XSHE','浦发银行':'600000.XSHG'}
b={'开盘价':10.0,'收盘价':11.0,'涨跌幅':0.10}
选取dict中的某个key的值方法如下:
# 选取方法 dict类型的变量[key]
a={'平安银行':'000001.XSHE','浦发银行':'600000.XSHG'}
# 为了看到结果我们用print打印
print(a['平安银行'])
# 执行后结果如下:
000001.XSHE
十、未完待续
下章将继续介绍量化策略的python基本语法和变量。
欢迎关注知乎:北京不北
获得免费答疑,长期技术交流。