網格搜索是最常見的傳統的參數優化方法
當參數數量少時,這個方法還算可行,但一旦參數超過三個,需要測試的組合數量就會急遽增加,耗費大量的計算時間。遺傳演算法提供了一種更高效的替代方案。本文想談談遺傳演算法,以及其應用。
遺傳演算法的直覺
遺傳演算法的核心概念其實很直觀,你不需要預先知道哪組參數是最好的,你只需要讓程式自動嘗試、比較、改進,反覆疊代,讓好的參數組合逐步浮現。它的運作方式,可以想像成在參數空間中同時探索多個方向,保留表現好的,淘汰表現差的,並在好的區域附近進一步搜索。這個過程不需要人工干預,也不需要對參數空間有任何先驗假設,只需要一個明確的績效評分標準。
相較於網格搜索,遺傳演算法聰明多了,它會把力氣砸在最有希望的那幾塊區域上,效率自然拉開。至於隨機搜索,就是盲測;遺傳演算法不一樣,它每一輪的嘗試都會記下來,拿來指引下一步該往哪走,越走越靠近真正好的那幾組設定。
遺傳規劃與遺傳演算法的關鍵區別
遺傳規劃和遺傳演算法都是演化計算的分支,但兩者處理的問題本質完全不同。
- 遺傳演算法是參數優化,框架已經有了,找最好的參數填進去。遺傳演算法的個體長相是一組固定長度的參數向量,像 `[20, 5, 70]` 這樣。遺傳演算法的搜索範圍只在連續或離散的參數空間裡轉。最後輸出的東西是最佳參數。
- 遺傳規劃是結構發現,找出規則或因子長什麼樣。遺傳規劃的個體是一棵可長可短的樹或程式,像 `(RSI - MA)/Vol` 這種。遺傳規劃的搜索範圍跑的是表達式空間,理論上可以生成無限多種結構。最後輸出的東西是一個全新的因子或規則。
遺傳演算法的核心流程
遺傳演算法的運作可以分為五個步驟。
- 第一步:初始化。隨機生成一群個體,每個個體就是一組完整的策略參數。例如,一組可能是均線週期等於20、停損等於5%、RSI門檻等於70,另一組可能是均線週期等於50、停損等於3%、RSI門檻等於80。族群大小通常設定在50到200之間。
- 第二步:評估。對每個個體執行回測,計算它的績效指標,如夏普比率。
- 第三步:篩選。根據績效指標,選出表現較好的個體作為母體。常見的篩選方式包括只選前20%的個體、用績效加權隨機抽樣,或直接保留表現最好的幾個個體。
- 第四步:重組與微調。將選出的母體兩兩配對,互相交換部分參數,產生新的組合。例如,個體A(均線=20,停損=5%)和個體B(均線=50,停損=10%),重組後,可能產生子代(均線=20,停損=10%)。同時,以一定的機率對部分參數進行隨機微調,例如將均線週期從20改成21,引入新的多樣性。
- 第五步:迭代。用新產生的個體替換掉表現較差的舊個體,形成新的群體,然後回到第二步,重複這個過程,直到達到設定的疊代次數或績效不再明顯提升。
在量化交易中的實戰應用
策略參數優化
策略參數優化是遺傳演算法最直接的應用。任何有參數的策略都可以用它來優化。當策略有五個以上參數時,網格搜索的計算量會指數級增長,而遺傳演算法可以在幾百次疊代內找到接近最優的組合。
因子權重優化
在多因子模型中,每個因子該給多少權重?遺傳演算法可以同時優化數十個因子的權重分配。
投資組合優化
在給定資產池中,如何分配資金比例?傳統的均值-變異數優化對輸入參數極為敏感,而遺傳演算法不依賴梯度信息,能處理非凸、多峰的目標函數,更適合處理真實的金融優化問題。
注意事項
當然,遺傳演算法也不是沒風險。
- 過度擬合是最大的風險。對策包括嚴格分割訓練集、驗證集和測試集,使用滾動視窗驗證,限制疊代次數,以及監控族群中最佳績效與平均績效的差距。如果差距過大,表示族群正在過度擬合。
- 遺傳演算法不是聖盃,它無法保證找到一組能穩定賺錢的策略參數,也無法憑空創造Alpha。它只是一個工具,幫你在已經定義好的參數空間中,用比網格搜索和隨機搜索更快的速度,找到一組表現較好的參數。如果策略本身沒有正期望值,遺傳演算法再怎麼優化也無法讓它變成賺錢的策略。
原文出處:voltima_quant (@voltima_quant) 於 Threads · 查看原文

