書名: Python量化交易作者名: 張楊飛本章字數: 2772字更新時間: 2019-09-23 11:07:13
2.2 數據
數據分為字符串、數字、容器、布爾值和空值5種類型。在代碼里,數據是用變量存放的,而數據又有5種類型,所以在給變量取名時,建議用“變量名稱+數據類型”的形式,而且要記住數字不能放在變量名稱的開頭,Python是區分大小寫的。
2.2.1 字符串
字符串(String)是由數字、字母、下畫線組成的一串字符,用單引號(')或者雙引號(")括起來。字符串是不可改變類型的。
需要注意的是,Python 2默認的編碼格式是ASCII格式,只有在文件開頭加入“# encoding: UTF-8”,修改編碼格式才能正確地打印漢字,否則在讀取中文時會報錯。而Python 3源碼文件默認使用UTF-8編碼,所以可以正常解析中文。
# 合約類型常量 PRODUCT_EQUITY=u'股票' PRODUCT_FUTURES=u'期貨' PRODUCT_OPTION=u'期權' PRODUCT_INDEX=u'指數' PRODUCT_COMBINATION=u'組合' PRODUCT_FOREX=u'外匯' PRODUCT_UNKNOWN=u'未知' PRODUCT_SPOT=u'現貨'
Python支持使用反斜杠(\)轉義特殊字符,如表2-1所示。
表2-1 轉義特殊字符

在實際操作中,例如導入Excel表時,Excel表里的數據其實是字符串(String),必須轉換成數字數據類型才能進行下一步的數據分析。
2.2.2 數字
數字(Number)數據類型用于存儲數值。指定一個值時,Number對象就會被創建。數字數據類型一旦改變就會被分配一個新的對象。
數字數據類型分為兩種。
1.整數(int)
在32位系統上,整數的位數為32位,取值范圍為-231~231-1,即-2147483648~2147483647。在64位系統上,整數的位數為64位,取值范圍為-263~263-1,即-9223372036854775808~9223372036854775807。
2.浮點數(float)
浮點數用來處理實數,即帶有小數的數字。類似于C語言中的double類型,占8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
#數據類型 EMPTY_INT=0 #浮點型 EMPTY_FLOAT=0.0 #整數型 #交易所推送過來的TICK行情K線數據中,高開低收為浮點型,成交量為整數型 open=EMPTY_FLOAT #開盤價 high=EMPTY_FLOAT #最高價 low=EMPTY_FLOAT #最低價 close=EMPTY_FLOAT #收盤價 volume=EMPTY_INT # 成交量 openInterest=EMPTY_INT # 持倉量
2.2.3 容器
容器把不同的數據類型放在一起方便使用,根據用途不同可分為4種,分別是列表、元組、集合和字典。
1.列表
列表(List)可以完成大多數集合類的數據結構所實現的工作。列表中元素的類型可以不同,支持數字、字符串甚至可以包含列表(所謂嵌套)。列表是寫在方括號“[ ]”之間、用逗號分隔開的元素列表。和字符串一樣,列表同樣可以被索引和截取,列表被截取后返回一個包含所需元素的新列表。
# 參數列表,保存了參數的名稱 paramList=['name', 'className', 'author', 'vtSymbol'] # 變量列表,保存了變量的名稱 varList=['inited', 'trading', 'pos'] # 同步列表,保存了需要保存到數據庫的變量名稱 syncList=['pos']
列表的基本操作包括查詢列表長度,增加、刪除和修改元素,以及進行正序和倒序查詢等。舉例說明如下。
(1)定義5個元素的列表。
foodList=['腸粉’ , '糯米雞' , ‘馬蹄糕’,’雙皮奶‘,'鵪鶉蛋燒賣'] 正序 0 1 2 3 4 倒序 -5 -4 -3 -2 -1
(2)通過正序和倒序來查詢列表元素。
foodList=['腸粉’ , '糯米雞' , ‘馬蹄糕’,’雙皮奶‘,'鵪鶉蛋燒賣'] foodList[4] #查詢第5個元素 >> '鵪鶉蛋燒賣' foodList[-1] #查詢倒數第1個元素 >> '鵪鶉蛋燒賣'
(3)查詢列表長度,增加、刪除和修改元素。
# 1.查詢列表長度 Len=len(foodList) Len >> 5 # 2.列表操作:增加元素 foodList.append('艇仔粥') foodList >> ['腸粉', '糯米雞', '馬蹄糕', '雙皮奶', '鵪鶉蛋燒賣', '艇仔粥'] # 3.列表操作:刪除元素 del foodList[2] #刪除第3個元素 foodList >> ['腸粉', '糯米雞', '雙皮奶', '鵪鶉蛋燒賣', '艇仔粥'] # 4.列表操作:修改元素 foodList[0]='豆漿' #修改第1個元素為’豆漿’ foodList >> ['豆漿', '糯米雞', '雙皮奶', '鵪鶉蛋燒賣', '艇仔粥']
(4)切片訪問,分別訪問前3個元素和后3個元素。
# 1.訪問前3個元素 foodList[0:3] >> ['豆漿', '糯米雞', '雙皮奶'] # 2.簡化版訪問前3個元素 foodList[:3] >> ['豆漿', '糯米雞', '雙皮奶'] # 3.訪問后3個元素 foodList[-3:] >> ['雙皮奶', '鵪鶉蛋燒賣', '艇仔粥']
2.元組
元組(Tuple)是一系列不可變的Python對象。元組是一種序列,就像列表一樣。元組和列表之間的主要區別是元組不能像列表那樣改變元素的值,可以簡單地理解為“只讀列表”。需要注意的是,元組使用小括號“( )”,而列表使用方括號“[ ]”,對比如下:
# a.列表 foodList=['腸粉’ , '糯米雞' , ‘馬蹄糕’,’雙皮奶‘,'鵪鶉蛋燒賣'] # b.元組 foodTup=('腸粉’ , '糯米雞' , ‘馬蹄糕’,’雙皮奶‘,'鵪鶉蛋燒賣')
3.集合
集合是一個無序不重復元素的序列。之前說的列表可以包括重復的元素,而集合是沒有重復元素的容器,用花括號“{ }”來表示集合,其操作如下:
#定義集合,交易所 ExchangeSets={'中金所','上期所','鄭商所','大商所','上交所','深交所'} print (ExchangeSets) >> {'上期所', '深交所', '鄭商所', '上交所', '中金所', '大商所'}
集合的基本功能是進行成員關系的測試,以及刪除重復元素,可以使用大括號“{ }”或者set()函數來創建,注意:定義一個空集合必須用set(),而不是“{ }”,因為“{ }”是用來創建一個空字典的。集合的基本操作舉例說明如下。
# 1.定義一個空的集合 BitcoinExchangeSets=set() # 2.使用update來增加一個元素 BitcoinExchangeSets.update (['OKCOIN比特幣交易所','火幣比特幣交易所','LBANK比特幣交 易所']) print (BitcoinExchangeSets) >> {'OKCOIN比特幣交易所', 'LBANK比特幣交易所', '火幣比特幣交易所'} # 3.使用discard來刪除一個元素 BitcoinExchangeSets.discard('OKCOIN比特幣交易所') print (BitcoinExchangeSets) >> {'LBANK比特幣交易所', '火幣比特幣交易所'} # 4.使用in查詢關鍵字 txBool='火幣比特幣交易所' in BitcoinExchangeSets print (txBool) >> True # 5修改集合內的元素 #第一步,刪除 BitcoinExchangeSets.discard('火幣比特幣交易所') #第二步,增加 BitcoinExchangeSets.update(['OKEX比特幣交易所']) print (BitcoinExchangeSets) >> {'LBANK比特幣交易所', 'OKEX比特幣交易所'}
4.字典
字典是另一種可變容器模型,可存儲任意類型的對象。字典的每個鍵值對“key=>value”用冒號“:”分隔,每個對之間用逗號“,”分隔,整個字典包括在花括號“{ }”中,格式為d={key1 : value1, key2 : value2 }。鍵必須是唯一的,且是不可變的,但值則不必唯一,可取任何數據類型,如字符串、數字或元組。字典的基本操作舉例說明如下。
(1)創建新的字典。
# 創建新的字典 ExchangeDict={'中金所':'CFFEX', '上期所':'SHFE', '鄭商所':'CZCE', '大商所':'DCE', '國際能源交易中心':'INE'}
(2)增加、刪除、查詢和修改元素。
# 1. 增加元素 ExchangeDict['上金所']=['SGE'] ExchangeDict >> {'上期所': 'SHFE', '上金所': ['SGE'], '中金所': 'CFFEX', '國際能源交易中心': 'INE', '大商所': 'DCE', '鄭商所': 'CZCE'} # 2. 刪除元素 del ExchangeDict['上金所'] ExchangeDict >> {'上期所': 'SHFE', '中金所': 'CFFEX', '國際能源交易中心': 'INE', '大商所': 'DCE', '鄭商所': 'CZCE'} # 3. 查詢元素,根據交易所名稱查詢交易所代碼 ExchangeDict['中金所'] >> 'CFFEX' # 4.修改元素 print ('修改前,上期所代碼:',ExchangeDict['上期所']) ExchangeDict['上期所']=['SQS'] print ('修改后,上期所代碼:', ExchangeDict['上期所']) >> 修改前,上期所代碼:SHFE 修改后,上期所代碼:['SQS']
2.2.4 布爾值
在Python中布爾值(Bool)通過常量“True”和“False”來表示。比較運算符如“<”“ >”“==”等返回的類型就是布爾類型;布爾類型通常在if和while語句中應用。應該注意的是,布爾是int的子類(繼承int),故判斷如True==1 False==0時,其返回結果是True。
布爾值的應用舉例說明如下。導入金融庫TA-Lib的簡單均線函數SMA,定義新的函數sma,若array=True,則輸出一系列均線,反之,若array=False,則輸出最新的一條均線數據。
import talib def sma(self, n, array=False): """簡單均線""" result=talib.SMA(self.close, n) if array=True: return result return result[-1]
一般情況下,“if array:”已經是默認“if array=True:”,所以函數可以進一步簡化,如下:
def sma(self, n, array=False): """簡單均線""" result=talib.SMA(self.close, n) if array: return result return result[-1]
2.2.5 空值
空值(None)是Python語言里一個特殊的值,表示的是一個空對象,但不能將其理解為0,因為0是有意義的。None既可以被賦值給任何變量,也可以將任何變量賦值給None。所以None常用于初始化。
self.datetime=None # python的datetime時間對象
- DBA攻堅指南:左手Oracle,右手MySQL
- Xcode 7 Essentials(Second Edition)
- Oracle數據庫從入門到運維實戰
- Spring+Spring MVC+MyBatis整合開發實戰
- 利用Python進行數據分析(原書第3版)
- jQuery Mobile移動應用開發實戰(第3版)
- Oracle GoldenGate 12c Implementer's Guide
- Mastering AWS Security
- Android Studio Cookbook
- 深入淺出Python數據分析
- H5+移動營銷設計寶典
- Mastering OpenStack
- 實驗編程:PsychoPy從入門到精通
- 軟件開發中的決策:權衡與取舍
- Azure for Architects