当前位置: 首页 > 科技观察

Python期货量化交易常用的数据类型有哪些?

时间:2023-03-11 22:51:45 科技观察

1 常用内置常量Python解释器在启动时会创建三个常量:None、True和False。None表示“无”,True表示“真”,False表示“假”。None是NoneType类型的唯一值,表示没有值或者为空值,比如当函数没有返回值时,默认返回None值。因为Python用“yes”和“nothing”来表示“true”和“false”,“yes”为true,“nothing”为false,所以None、0、空字符串、空列表、空字典都是false、True对于非“空”数据。True和False是bool类型的值。True和False除了代表true和false之外,还有自己的值。True的值为1,False的值为0,可以用数值计算。比如5+True的结果是6,3*False的结果是0,1==True的结果是True,1是True的结果是False。上面的例子说明True的值是1,但是True在内存中的地址和整数1的地址是不一样的。None、True和False这三个常量常用于量化策略中。还有一个Ellipsis常量,字面意思与省略号相同,常用于注释中。2 整数类型计算交易手数时需要整数类型,如1,2,3,4,Python可以直接使用整数进行计算。当在Python代码中输入整数值时,Python会自动将输入值创建为整数。当然,你也可以使用整数类型int()创建一个整数,将一个数值参数传递给整数类型int(),int()会将数值参数转换为整数。比如int(5.89)的结果是5,转换时只保留整数部分;int('123')的结果是123,字符串类型转换为整数类型。我们可能需要从本地文件中读取数据,比如存储在本地的交易数据。读取的数据通常是字符串类型,必须将字符串类型转化为整数才能参与相关计算。整数可以是正数或负数,例如3和-3。量化策略中可以定义净持仓pos=3,即净多仓3手;pos=-3的定义表示净空仓3手。3 浮点价格、保证金等都是浮点值,浮点值是带小数点的小数。与整数类似,Python可以直接用浮点值进行计算,也可以使用浮点类float()来创建浮点值。比如float(5)的结果是5.0,转换整数时要加小数位;float('5.999')的结果是5.999,将字符串转换为浮点值。整数与浮点数的加减运算,结果会转为浮点数。如果想在计算中保留两位小数,可以使用round()函数,例如a=5.946326598,round(a,2)的结果为5.95,四舍五入后保留两位小数。4 字符串类型字符串是由一对英文单引号、一对英文双引号、一对英文三重单引号或一对英文三重双引号包围的字符。字符串类型。比如'account',"123456",'''password''',"""jkl"""都是合法的字符串。字符串是序列类型的数据。字符串的字符有位置(索引)属性,字符的位置编号从左到右依次为0、1、2、3、4、5、6……从右到左的位置编号为-1,?2,?3,?4,?5,?6...通常,一个字符串用一对英文单引号或一对英文双引号定义,英文三重单引号或三重双引号引号用于多行注释。如果字符串中需要英文单引号,则使用英文双引号;如果字符串中需要英文双引号,则使用英文单引号。此时英文单引号和双引号是字符,不是字符串的标识符,比如"ad'cd",'ef"gh',英文双引号或单引号成对成为一个字符串的标识符string,characters字符串中的引号作为字符来区别于字符串标识,不会有“意思”冲突,字符串中可以有空格,因为空格也是字符,Python用的是“是”而“no”代表“true”和“false”,没有任何字符的字符串为false,有字符的字符串为true。代码中对字符串进行处理,把字符字符串创建到内存中,保存为字符串类型,也可以使用字符串类str()创建字符串,例如str(123)的结果为'123',它将值123转换为字符串'123'。如果要包括控制字符或字符字符串中有特殊含义,需要使用转义字符,常用的转义字符如表2-1所示。表2-1例如print("abc\"de")输出abc"de,中间的英文双引号被\转义为字符,不再与第一个英文双引号组成字符串标识符。当在字符串前加上r或R时,该字符串为原字符串,字符串中的“\”不再是转义字符,而是“\”本身。但是字符串的最后一个字符不能是“\”,原始字符串主要用在文件路径中。代码如下:>>>print(r'C:\new\T0002\export\MA.csv')C:\new\T0002\export\MA.csv>>>print(r'C:\new\T0002\export\')File"",line1print(r'C:\new\T0002\export\')^SyntaxError:EOLwhilescanningstringliteral5 结构化数据类型Python语言有很多结构化数据类型,最常用的是列表、元组和字典。列表和元组是序列类型,其元素具有位置(索引)属性,而字典是集合类型,其元素没有位置属性。5.1 列表列表是用方括号“[]”括起来的数据集,不同的元素之间用逗号“,”隔开。列表的元素可以是任何数据类型或列表,例如[1],[1,],[1,2,'a',[1,3],'bcd']都是合法的列表.列表的元素具有position属性,元素的位置编号从左到右依次为0、1、2、3、4、5、6……从右到左的位置编号为-1、-2,?3,?4,?5,?6...Python可以直接在代码中处理列表,Python会自动创建列表,也可以使用列表类list()创建列表。例如a=list()创建一个空列表,传递给list()的参数必须是可迭代的,list()会根据参数的元素创建一个列表。例如,list('adffgghjj')结果为['a','d','f','f','g','g','h','j','j'],string的每个字符都被创建为列表的一个元素。列表是可变数据类型。修改列表中的元素时,会直接修改原列表,不会生成新的列表。5.2 元组元组可以看作是一个特殊的列表。元组是用括号“()”括起来的数据集合。不同的元素之间用英文逗号“,”隔开。元组的元素可以是任何数据类型也可以是元组,例如(1,),(1,2,'a',(1,3),'bcd')都是合法的元组。当元组只有一个元素时,英文逗号不能省略,否则括号不是元组的标识,而是语句操作,例如(1,)是元组,(1)是元组值1。和列表一样,元组的元素也有位置属性,元素的位置编号从左到右依次为0、1、2、3、4、5、6……从右到左的位置编号分别是-1,?2,?3,?4,?5,?6...Python可以直接处理代码中的元组,Python也会将英文逗号分隔的对象创建为元组,代码如下:>>>1,2,3,4,5(1,2,3,4,5)Python也可以使用元组类tuple()创建一个元组,例如a=tuple()创建一个空元组,传递给tuple()的参数必须是可迭代的。tuple()将根据参数的元素创建元组。例如,tuple(['a','d','f','f','g'])的结果是('a','d','f','f','g'),将列表转换为元组。元组是不可变的数据类型,修改元组中的元素会创建一个新的元组,而不是直接修改原始元组。如果需要创建一组不可变数据对象,可以使用元组来创建它们。元组主要用在变量定义中,代码如下:>>>a,b,c=1,2,3>>>a;b;c123上面代码中,“1,2,3”对等号右边是一个元组,Python会自动按照位置顺序将1赋给a,2赋给b,3赋给c。5.3 字典字典是用大括号“{}”括起来的数据集合。数据以“键:值”对的形式存在。“值”可以是任何类型的数据,但“键”必须是不可变数据。不可变数据也称为可散列数据。Hashable数据是唯一的,可以产生唯一的映射关系。因此,字典中元素的“键”是不同的,可以访问字典中的“键”。元素。例如,{'a':1,'b':2,3:'c'}和{'a':1,'b':2,c:[1,2]}都是有效的字典。Python在代码中可以直接处理字典,也可以使用字典类dict()来创建字典,因为字典的元素是以“键:值”对的形式存在的,所以传递给dict()应该是关键字的形式,代码如下:>>>dict(h=1,i=2,j=3,k=4){'h':1,'i':2,'j':3,'k':4}dictionary是集合类型,所以dictionary中的元素没有position属性,元素是无序的,可以通过元素的key访问元素,但是不能由位置访问。字典是可变数据类型,修改元素的值或增减元素都会直接改变原有的字典。本文节选自《Python期货量化交易》