- 商品期貨量化交易實戰(zhàn):以Python為工具
- 胡凱博等編著
- 1603字
- 2022-04-29 16:52:04
2.7 Python中的條件語句和循環(huán)語句
編程與生活息息相關(guān),如紅燈停、綠燈行就是條件語句。條件語句和循環(huán)語句在量化交易中很常用,如圖2.1所示。策略是否可以根據(jù)行情實時變化發(fā)現(xiàn)潛在的交易機會,取決于它在循環(huán)語句中重復(fù)的判斷交易信號是否成立。之所以會自動下單交易,是因為它可以根據(jù)條件語句執(zhí)行下單動作。

圖2.1 條件語句和循環(huán)語句
2.7.1 條件語句
計算機在執(zhí)行代碼時,會按照從上到下的順序逐行執(zhí)行。但很多時候按順序執(zhí)行代碼有很大的局限性。假如有一個策略邏輯是只有在均線金叉時才能買入,這時就需要用到if條件語句了。if條件語句的邏輯示意圖如圖2.2所示。

圖2.2 if條件語句的邏輯示意圖
if條件語句屬于選擇結(jié)構(gòu),它就像一個開關(guān),首先對條件進(jìn)行判斷,然后根據(jù)判斷結(jié)果執(zhí)行不同的代碼。這個條件可以是單一的值,也可以是由運算符組成的表達(dá)式,只要這個條件能得到一個值,if條件語句都能判斷它是否成立。如果條件成立,則會執(zhí)行if語句中的代碼塊,否則會跳過if語句。示例代碼如下:

輸出結(jié)果如下:

在通常情況下,if語句和else語句可以組合成if...else條件語句。如果條件成立,那么執(zhí)行if語句中的代碼塊,跳過else語句中的代碼塊;如果條件不成立,那么跳過if語句中的代碼塊,執(zhí)行else語句中的代碼塊。if…else條件語句的邏輯示意圖如圖2.3所示。

圖2.3 if…else條件語句的邏輯示意圖
示例代碼如下:


輸出結(jié)果如下:

還有一種if…elif…else形式的條件語句,這種條件語句會依次判斷表達(dá)式的值,如果某個表達(dá)式的值為真,則執(zhí)行對應(yīng)的代碼塊;如果所有的表達(dá)式均為假,則執(zhí)行else語句中的代碼塊。if…elif…else條件語句的邏輯示意圖如圖2.4所示。

圖2.4 if…elif…else條件語句的邏輯示意圖
示例代碼如下:

輸出結(jié)果如下:

條件語句可以嵌套使用。在嵌套條件語句中,可以將if...elif...else條件語句嵌套在另一個if...elif...else條件語句中。示例代碼如下:


輸出結(jié)果如下:

在上述代碼中,首先定義了一個字典變量,然后使用if語句判斷字典變量中age元素的值,由于字典變量中age元素的值是18,因此if語句和elif語句中的代碼塊都不會被執(zhí)行,轉(zhuǎn)而執(zhí)行else語句中的代碼塊。
2.7.2 循環(huán)語句
循環(huán)是讓計算機重復(fù)做某件事情。Python提供了兩種循環(huán)語句,分別是for循環(huán)語句和while循環(huán)語句。for循環(huán)語句通常用于表示有限次數(shù)的循環(huán)。while循環(huán)語句通常用于表示不定次數(shù)的循環(huán),在某些條件觸發(fā)后退出循環(huán)。循環(huán)語句的邏輯示意圖如圖2.5所示。

圖2.5 循環(huán)語句的邏輯示意圖
for通常用于遍歷數(shù)量有限的數(shù)據(jù)(如字符串、列表、字典等)或處理有限的任務(wù)。例如,使用for循環(huán)語句將一個字符串中的所有字符逐個打印出來,示例代碼如下:

輸出結(jié)果如下:

如果數(shù)據(jù)是無限的,或者需要處理無限重復(fù)的任務(wù),則可以使用while循環(huán)語句。while循環(huán)語句在每次開始循環(huán)前,都會先判斷條件語句是否為真,如果條件語句為真,那么執(zhí)行循環(huán)體內(nèi)的代碼塊。示例代碼如下:

輸出結(jié)果如下:

在上述代碼中,首先定義了一個變量a并將其賦值為0,然后使用while循環(huán)語句,其條件是a>100,也就是說,如果a>100,就重復(fù)執(zhí)行循環(huán)體內(nèi)的代碼塊,每一次循環(huán)都將a的值加1,直到a=100,循環(huán)結(jié)束。
2.7.3 break語句
break語句是循環(huán)語句的搭檔,當(dāng)循環(huán)語句中出現(xiàn)break語句時,循環(huán)會立刻終止。如果是雙層循環(huán)語句,那么break語句只會終止當(dāng)前循環(huán)。示例代碼如下:

輸出結(jié)果如下:

在上述代碼中,使用了兩個for循環(huán)語句,分別用于遍歷列表變量arr1和arr2,在遍歷列表變量arr2時遇到了break語句,就跳出了當(dāng)前的for循環(huán),所以列表變量arr2中的第2~4個元素("b"、"c"和"d")都不會被打印出來,但是列表變量arr1中的元素都被打印了出來,說明break語句只是跳出了循環(huán)for j in arr2。
2.7.4 continue語句
continue語句與break語句類似,和break語句不同的是,continue語句不是終止整個循環(huán),而是跳過本次循環(huán),并且強制執(zhí)行下一次循環(huán)。示例代碼如下:

輸出結(jié)果如下:

在上面的輸出結(jié)果中,字符串"c"沒有被打印出來。因為在循環(huán)體內(nèi)使用if語句判斷i=="c"時執(zhí)行了continue語句,所以跳過了當(dāng)前循環(huán),并未執(zhí)行后面的Log(i)代碼,直接執(zhí)行了下一次循環(huán)。continue語句和break語句類似,只能作用于當(dāng)前循環(huán),不影響外層循環(huán)(如果有的話)。
- 孫子兵法與貨幣戰(zhàn)爭:外匯期貨股票經(jīng)典戰(zhàn)例
- 未來全球金融治理
- 私募股權(quán)基金:理論與實務(wù)
- 超額收益融合戰(zhàn)法
- 跟銀行螺絲釘玩定投:定投十年財務(wù)自由+指數(shù)基金投資指南
- 從華爾街看懂世界金融300年
- 網(wǎng)絡(luò)虛擬貨幣研究(國家社科基金后期資助項目)
- 投資哲學(xué)
- 險資運用新時代:國際模式與中國實踐
- 金融客戶經(jīng)理管理實務(wù)
- 看懂經(jīng)濟數(shù)據(jù),學(xué)會投資理財
- 超腦行為金融學(xué)
- 富爸爸窮爸爸(20周年修訂版)
- 信用資本:開啟未來金融的密碼
- 創(chuàng)業(yè)加速:股權(quán)融資行動指南