遺傳算法開發 - 基於買賣的染色體結構
為日內交易(例如期貨 ES、NQ)創建 GA 算法比用於 GA 函式最小化/最大化的教科書範例更困難。最初,我假設買入和賣出的參數可以放在每個染色體中,但現在我認為每個染色體只能代表買入或賣出,其中單個買入/賣出參數(基因) $ x $ 如果在染色體上會導致購買 $ x>0.5 $ 並出售,如果 $ x \leq 0.5 $ 給定參數範圍
$$ 0,1 $$. 我面臨的另一個挑戰是我的許多規則是離散的(真/假),而不是連續縮放的指標水平,例如 RSI 水平、ADX 水平等。例如,我有幾十個二進制(0-no,1 -是的)交叉和交叉類型規則是真/假。對於這些規則(基因),我假設布爾邏輯如 buy=true if $ x>0.5 $ .
最後一個挑戰是,對於許多交叉和交叉低於規則,它們中的大多數對於給定柱線正確的機率是不可能的,因此問題變成了找到規則的最佳組合之一,例如最大化 Sharpe(Sortino ) 比率。鑑於上述情況,是否有必要初始化每個染色體,以便僅將一個基因設置為 $ x=0.75 $ 和所有其他規則設置為 $ x=0.25 $ ,所以如果一個規則為真,那麼最初的適應值(夏普)將基於買入/賣出?
當然,在使用 GA 時必須有一個“技巧”,因為每個染色體都考慮了很多規則,並且例如 10 條規則為真的機會很少,因為每 10,000 條條中只有幾條條將有 10 條規則為真.
對於任何 GA,有一點是確定的:染色體上每個基因的價值都必須反映在適應度中,換句話說,你不能擁有觸發不影響適應度的動作的基因。因此,如果健身就像一個人的身高(目標函式),那麼您就不能擁有編碼眼睛或頭髮顏色的基因,因為它們無助於最小化/最大化身高。
是否有任何經典論文(章節)描述了許多二進制(是/否)交易規則的染色體設置?
根據您的術語,聽起來您正在使用 GEP(基因表達程式),這是 GA 的一個子類型。有什麼理由不為此使用純 GA?我在 GEP 方面沒有大量經驗,但在這種情況下,如果沒有添加更多內容,它通常看起來更複雜。
否則,最後一個問題首先:
最後一個挑戰是,對於許多交叉和交叉低於規則,它們中的大多數對於給定柱線正確的機率是不可能的,因此問題變成了找到規則的最佳組合之一,例如最大化 Sharpe(Sortino ) 比率。鑑於上述情況,是否有必要初始化每個染色體,使得只有一個基因設置為 x=0.75,所有其他規則設置為 x=0.25,以便最初的適應值(夏普)將基於購買/sell 如果一條規則為真?
這是一個策略問題,而不是 GA 問題。為簡化起見,假設您正在考慮 10 個標準;最初,您決定僅在滿足所有 10 個標準時才進行交易。根據資產、交易規則和時間段,您的最終人口可能會非常少。這可能是您可以調整的東西,以獲得合理的測試人口(即,設置
r
=滿足的標準數等於n
您的人口> 100等)。您也可以潛在地讓您的 GA 為您做出決定(即,有理由認為 GA 將“選擇”具有最高夏普且沒有額外限制的策略)。對於任何 GA,有一點是確定的:染色體上每個基因的價值都必須反映在適應度中,換句話說,你不能擁有觸發不影響適應度的動作的基因。因此,如果健身就像一個人的身高(目標函式),那麼您就不能擁有編碼眼睛或頭髮顏色的基因,因為它們無助於最小化/最大化身高。
是的,但是您如何先驗地知道哪些基因會影響健康?例如,鑑於您引用的信號,您如何知道 RSI 是否會或多或少地影響投資組合夏普 ADX?這也是 GA 的重點……讓算法告訴你哪些有影響。
不過,一般來說,沒有“技巧”。以您所引用的方式使用 GA 的一部分只是簡單地以適合 GA 的方式設置您的策略。除此之外,以 GA 可以使用的方式組織您的輸入和輸出,並且您可以理解它們。
此外,一個人的觀點(儘管作為我碩士論文的一部分將 GA 應用於外匯市場的技術交易的人),使用 GA 來選擇一組規則來進行交易實際上只是複雜的數據探勘/過度擬合。您的適合度標準反映了在歷史時期內對相關資產表現最佳的一組規則。你不知道這意味著什麼,也不知道它是否應該或將適用於未來。如果您將此作為學習練習,請務必這樣做;如果您希望提取真相並賺錢,我可能會謹慎行事。
使用 GA 來確定交易規則的指標信號的最佳組合時所需的方法是在指標的布爾結果(真、假)之間散佈隨機放置的 AND 或 OR 邏輯語句,這些指標使案例如隨機初始化
$ \text{if } (x>0.5) \rightarrow \text{ AND} $
$ \text{if } (x \leq 0.5) \rightarrow \text{ OR} $
基因的範圍在哪裡 $ x $ 是
$$ 0,1 $$. 以這種方式,在訓練期間,AND 和 OR 的組合可以變得更好。通過對具有範圍的基因使用相同的標準$$ 0,1 $$對於染色體的所有邏輯 AND 或 OR 部分,GA 將修改任何染色體的實際值 $ x $ 並優先獎勵使適應度最大化的(AND,OR)的最佳選擇。完成後,您將了解到,例如,交易進入(見下文)只需要 5 個指標中的 2 個,而交易退出需要 3 個。 但首先,有一點術語。每條染色體被稱為“策略”,由兩段基因組成,一個貿易進入段(多個基因)和一個貿易退出段(多個基因)。因此,一條染色體可以代表做長和退出長,或做空並退出做空。無論哪種方式,單個染色體上的基因都編碼如何進入和退出市場,而整個染色體代表著其退出的多頭或空頭交易。
用於交易進入(退出)的指標組合的優化是通過在指標布爾結果(真、假)之間使用隨機放置的 AND 和 OR 邏輯語句來完成的。例如,如果用於多頭入場的指標是 SMACrossAbove、RSI、LinRegSlope,則染色體左側將是(隨機放置 AND 和 OR):
SMACross以上 | 和 | 相對強弱指數<30 | 或 | LinRegSlope>0.1
右邊可能是
SMACcrossBelow | 或 | 相對強弱指數>70 | 和 | LinRegSlope<-0.2
所以當完成整個染色體是
SMACross以上 | 和 | 相對強弱指數<30 | 或 | LinRegSlope>0.1 | SMACcrossBelow | 或 | 相對強弱指數>70 | 和 | LinRegSlope<0.2
有一件事是肯定的,如果長輸入邏輯為真,你必須做多,如果退出邏輯為真,你必須做多。您不能將 enter long 與 .eg exit short (cover) 混合使用,或者將 enter long 與 enter short 混合使用。
用於縮短的整個染色體設置可能完全相反,例如
SMACcrossBelow | 和 | 相對強弱指數>70 | 或 | LinRegSlope<-0.02 | SMACross以上 | 或 | 相對強弱指數<30 | 和 | LinRegSlope>0.1
您還可以在染色體上添加(添加)基因,這些基因編碼指標值,例如 SMA 交叉的短週期和長周期長度、RSI 水平和 LinReg 斜率值。(這裡的目的是像通常通過歷史窮舉搜尋、粒子群優化、神經網路等一樣優化指標參數。)
有論文建議對長入口染色體和短入口染色體分別進行交叉和突變,但我認為沒有必要。
對於給定的柱,一旦您確定指標信號是真還是假,如果您為入場段生成邏輯字元串並為退出段生成字元串,您可以通過以下方式快速測試 (C#) 例如入場字元串是否為真使用 DataTable(),如:
string mylogic = "true and false or true or false and true and true"; System.Data.DataTable table = new System.Data.DataTable(); bool result = (bool)table.Compute(mylogic, "");
其中可以使用“not”和括號。
對於適應度,除了夏普或索蒂諾比率之外,還可以使用英鎊比率的平方。獲勝交易百分比也可用於適應度,定義為適應度 = #winning_trades / #trades。雖然,有時我確實喜歡使用平均利潤,即 sum(return-per-trade)/#trades。