第三章 使用遺傳程式規劃產生技術交易法則
3.2 技術交易法則的樹狀結構
樹狀結構的細部構造是影響遺傳程式規劃能否正確運作的兩大關鍵因素之一,如 同2.2節所討論的,靠著遺傳程式規劃獨特的樹狀結構可以大大地拓展解的搜尋空間,
在必須滿足封閉性(closure)的條件下[13],規劃者必須適當地安排終端節點和函數節點 的組合才能得到一棵有意義的樹,在本問題中一棵樹就是代表一個技術交易法則,隨 之在樹林中,給予指引演化方向的適存度函數,如此遺傳程式規劃就可以自動求解。
樹狀結構的組成元素散佈在終端節點集合以及函數節點集合當中,終端節點集合 的元素都是具有問題特性的變數或使用者定義的常數,這些運算元用作函數節點集合 元素的輸入,因此可視為遺傳程式規劃中的主要輸入元素,因此如何挑選足以代表目 標問題獨特性的變數以及符合問題尺度的常數是非常重要的,例如在尋找交易法則的 問題中就可以引入開盤價、收盤價以及成交量;函數節點集合的元素則直接影響遺傳 程式規劃後所得到結果的好壞,挑選關鍵性的函數和運算子不僅可以拓展搜尋空間,
更可以幫助我們瞭解問題的特性,例如在尋找交易規則的問題引入技術分析指標,反 之若引進太多非必要函數反而讓整個搜尋解的過程猶如大海撈針,相當沒有效率,例 如引入過多技術分析指標,此點通常可藉由經驗累積來避免。
本研究中以樹狀結構來代表一個交易策略,透過終端和函數節點集合元素的交互 配合讓遺傳程式規劃得以運作,茲將本研究使用的終端和函數節點集合敘述如下:
終端節點集合
• 日數常數:隨機在5~250間,以5為間隔取樣,也就是說5、85和195都有可 能被挑中。
• 隨機常數:隨機在0~2取樣,以小數點兩位為原則,例如0.97、1.68。
• 布林常數:「True」和「Fals」。
• 收盤價變數:「Pric」。
函數節點集合
• 算數運算:「ADD」、「Abst」、「Mult」和「Over」。
• 實 數 函 數 : 「 Norm 」 、 「 Max 」 、 「 Min 」 、 「 Lag 」 、 「 Avg 」 、
「ROC」和「RSI」。
• 邏輯運算:「AND」、「OR」和「NOT」。
• 比較運算:「More」和「Less」。
• 條件運算:「B_if」、「R_if」。
在終端節點集合中,日數常數用作實數函數中除了「Norm」以外的引數,代表引 入函數所需計算的日數,由於考慮到實務上技術指標類的函數經常被引用的日數,所 以訂定250為其合理上限;隨機常數是算數運算以及「Norm」會使用的運算元,由於 參考經過調整後本研究的資料範圍,所以將隨機常數範圍訂為0~2;布林常數是邏輯 運算以及條件運算中都有可能出現的運算元,「True」和「Fals」被取樣的機會各半;
收盤價變數為本研究中唯一引入代表問題特性的變數,由於原始收盤價並不符合本研 究所能接受資料的尺度,因此把當日收盤價除以前30日收盤價的移動平均值後得到的 資料就是「Pric」,當選用的日數越多,「Pric」曲線會和原始收盤價曲線差異越大,
其散佈在1以外的範圍也越大。
函數節點集合的元素依其特性不同可能需要一至三個引數或敘述,這些敘述可以 是 算 數 運 算 或 邏 輯 運 算 的 子 樹 。 算 數 運 算 的 「 ADD 」 、 「 Abst 」 、 「 Mult 」 和
「Over」依次代表加法、減法、乘法和除法運算,通常以隨機常數或輸出為實數的子 樹為其運算元。當加法、減法、乘法和除法運算的結果超出0~2的範圍時就回傳0或 2,唯獨在除法運算中當除數為0就回傳被除數,也就是把除數當作1;實數函數中的
「 Norm」 會 回 傳 以 隨 機 常 數 或 輸 出 為 實 數 的 子 樹 為 其 運 算 元 的 兩 數 的 絕 對值 ,
「Max」、「Min」、「Lag」、「Avg」、「ROC」和「RSI」以日數常數為引數,搭 配收盤價輸入,就可以依次得到數日中收盤價的最大值、數日中收盤價的最小值、數 日前的收盤價、數日如式(3-5)定義的移動平均、數日如式(3-8)定義的動量變化率指標 以及數日如式(3-14)定義的相對強弱指數,另外為了統一尺度,在「ROC」的計算中會 把(3-7)計算出的值會再加上1,在「RSI」的計算中會把式(3-13)用以改變尺度的100換 成2;邏輯運算中的「AND」、「OR」需要兩個運算元,其運算元可以是以布林值為
29
輸出的邏輯運算、比較運算、條件運算、或布林常數,「NOT」只需要一個運算元,
其運算元可以是任何以布林值為輸出的子樹或是布林常數;比較運算需要兩個運算 元,其運算元可以是任何以實數值為輸出的子樹或是隨機常數,特別的是比較運算的 輸出是布林常數,因此常用作實數值與布林值溝通的橋樑;條件運算需要三個運算 元,其運算元組成較具彈性:「B_if」以布林值為輸出,其三個運算元必須是以布林值 為輸出的子樹或是布林常數,當上層敘述為真,「B_if」會回傳中層敘述所計算出的布 林值,否則回傳下層敘述所計算出的布林值;「R_if」的運作原理和「B_if」極為相 似,差別在於中層和下層的敘述為回傳實數值的子樹或隨機常數,當上層敘述為真,
「R_if」會回傳中層敘述所計算出的實數值,否則回傳下層敘述所計算出的實數值。
顯然地,如果不加以限制,終端和函數節點集合的元素在交錯搭配下必定會違反 遺傳程式規劃中必須滿足封閉性的假設,也就是說邏輯運算的運算元不可以是回傳實 數值的算數運算,算數運算的運算元也不可以是布林常數,因此為了避免生成一個不 合邏輯也沒有意義的樹,規劃者就必須多費心思巧妙地安排終端和函數節點集合元素 的組合方式。因為樹的輸出為布林值,因此大致上可以觀察出算數運算和實數函數處 於樹狀架構的較低層級,邏輯運算和條件運算中的「B_if」位於樹狀架構的較高層級,
甚至位於根節點,比較運算和條件運算中的「R_if」則居中協調。
根據上述定義的終端和函數節點集合的元素就可以表示出實務上廣為使用的技術 交易法則,舉例來說,當黃金交叉發生時,會有一個關鍵子樹表示移動平均價小於當 日收盤價,如圖3.5(a);或是需搭配當日收盤價創60日新高才能做出判斷,如圖3.5(b):
Less---Avg---200days
|
| ----Pric
-AND---Less---Avg---200days
| |
| |
| ----Pric
|
---More---Pric
|
|
----Max---60days (a) (b)
Less---Avg---200days
|
| ----Pric
-AND---Less---Avg---200days
| |
| |
| ----Pric
|
---More---Pric
|
|
----Max---60days (a) (b)
圖 3.5 技術指標型交易策略
更複雜的情況如圖3.6所示,搭配條件運算後使得技術交易策略更為縝密:
-NOT---B_if---Less---0.79
| |
| |
| ----Mult---0.88
| |
| |
| ---Min---10days
|
----Less---Lag---80days
| |
| |
| ----0.79
|
----Less---0.88
|
| ----1.6