策略最佳化的程序進一步加強和自動化這個程序。 策略最佳化搜尋定義的條件下最合適的參數。 藉由測試一個區間的訊號參數,最佳化可以幫助使用者選取在特定歷史資料中達到最佳策略績效的參數。 最佳化幫助使用者更了解策略特性及設定新的進出場條件。
不同交易員使用不同條件去定義策略績效。有些交易員使用最高淨獲利,然而有些交易員使用最低損失。 MultiCharts讓交易員定義自己的條件。
如果使用者單純的依照特定時段的歷史資料找尋不同輸入的組合,並過度專注在可能不會再度出現的市場情況,最佳化可能會有致命性的影響。 這情形叫做過度最佳化或曲線擬合。實際交易的績效不會相同,因為歷史走勢不太可能完全相同。
最佳化方法
MultiCharts提供了兩種最佳化方式:暴力演算法(窮舉法)和基因演算法。
暴力演算法最佳化需要的時間和可能解的數量成正比。 這個方式的缺點是,除非使用較少的參數,否則找出最佳解所需的時間可能會是無法接受的漫長。 因此,暴力演算法最佳化可能只有在有限可能性的情況下才適合。
基因演算法模擬生物演化方式。基因演算法由隨機組合開始,選擇最有潛力的組合,進一步組合和變化直到最達到最佳的參數組合。 基因演算法快速的縮小可能勝出的解,搜尋並專注在最有利和穩定的區域,替代機械式的測試每個潛在的可能性。 因此,基因演算法避免了在低獲利可能性區域的多餘計算。 基因演算法在很多需要做最佳化領域中廣為人知和採用。
基因演算法的缺點是求出來的解會是近似最佳解,不見得會是最佳解。 然而,這項缺點,在大量參數組合狀況下所節省的計算時間相比,微不足道。
一般來說,基因演算法主要由兩個抽象概念運作:個體(基因組)和演算法(即基因演算法本身)。 每一個個體表示一個唯一的參數組合,而基因演算法本身定義演化如何發生。 基因演算法利用交易策略來決定"最適生存的基因組",例如在最佳化條件中選擇參數組合能產生多少淨獲利。
這裡有些基因演算法定義解說幫助了解這個過程:
適應性 - 個體的整體績效(例如淨獲利)。
基因組(個體)- 獨一無二的策略參數組合。
基因 - 策略的其中一個參數。
染色體 - 一組基因,通常和函數相關。
交配 - 由兩組基因組產生下一代的程序。交配牽涉多個基因組。
突變 - 基因改變取得新的值且該值不是由"母親"或"父親"取得的程序。變異一次只牽涉一個基因。
世代(族群) - 相近時間出生的一群個體(基因組)。
收斂 - 兩個連續世代的平均適應性增加;當進步的幅度降低,世代稱為收斂中。
簡單說,最佳化過程運作如下:
秘訣: | 過大的族群大小會造成計算時間增加,過小的族群大小會降低機算準確性。 |
注意: | MultiCharts的基因演算法支援人工去除族群。這指的是相同的個體不能出現在同一個族群,因此族群大小不能超過參數組合的總數。對每個世代來說族群大小為常數。 |
交配和突變
MultiCharts使用正規陣列交配。這種交配方式,每個子基因由父母體取得相同機率的基因。
在交配率欄位中,指定每個個體交配的機率;通常數值在0.95-0.99之間,預設值為0.95。
MultiCharts使用隨機翻動突變。這種突變方式,每個基因可以被任何可能的基因取代。
在突變率欄位中,指定每個個體突變的機率;通常數值在0.01-0.05之間,預設值為0.05。
秘訣: | 過大的突變率會導致整個搜尋變成原始隨機搜尋。 |
基因演算法次種類和替換方案
基因演算法次種類定義基因演算法創造新的個體和產生新世代取代舊個體的方式。
在基因演算法次種類下拉選單中可以設定基因演算法次種類。
有兩種基因演算法次種類可使用:基本和增量。
基本次種類為標準基因演算法,又稱為簡單基因演算法。 這個演算法使用不重疊的世代和菁英法(非必須)。 每個世代,演算法創造全新的個體族群(如果啟用使用菁英法,最適應的個體會移至下個世代)。
菁英法
菁英法只有在基本基因演算法次種類可使用,允許最適應的個體存活並產生下一代橫跨多個世代。
增量次種類不創立全新下一代的種群。僅在每次建立下一個世代時增加一個或兩個子代至族群。這一個或兩個子代替換前一個世代中一個或兩個個體。這些個體被子代取代的方式由使用的替換方案決定。
替換方案
替換方案只有增量次種類可以使用。替換方案定義了新的世代如何被整合進入族群。有三種方案可使用:最差、母代和隨機。
最差 - 最不適應的個體被取代
母代 - 父母個體被取代
隨機 - 個體隨機被取代
後代數目
後代數目是每次產生新的世代時要增加的子代數目。可以增加一個或兩個子代。
基因演算法收斂型態
基因演算法最佳化沒有隱含的最後解,因此可以永遠執行。所以,必須指定結束點,指示何時最佳化過程結束。
兩個基因演算法最佳化結束點條件可被選擇:世代數量和近端收斂。
選擇世代數量會在達到指定的最大代數時結束最佳化程序。
選擇近端收斂會在達到指定的收斂率,或指定的最大代數時結束最佳化程序。
基因演算法最佳化結束條件在收斂型態下拉選單中選取。欲使用的最大代數、最小代數、和收斂率可以在對應的文字欄中設定。
收斂率
世代的收斂率是兩個最新世代和現在世代及前N個世代的收斂值比。
基因演算法計算在達到 [x -N] / C [x] >= P 的條件時停止:
x - 現在世代的序數;
C [x] - 最接近兩個世代的收斂值;
N - 定義世代的最小值;
P - 收斂率;通常使用接近1的數值,預設值為0.99。
注意: | 小於設定的最小代數時,不會計算收斂率。 |
延伸閱讀
這只是基因演算法的簡短介紹。
可以在網路上深入了解基因演算法,如維基百科