Multicharts提供兩種最佳化方式:「暴力法」及「基因演算法」,另可選擇要不要採用「移動窗格」回測,先簡單解釋一下專有名詞:
名詞解釋
暴力法(Exhaustive):又稱為窮舉法,依序將所有可能的組合代入找尋最佳解。這個方式的好處是所有組合都會被計算並找出絕對最佳解,缺點是,一旦參數較多,需要回測的組合數(次數)也會攀升,這個時候最佳化就要變成是考驗你電腦等級跟耐性的工作。不過大多時候我們的策略參數都是暴力演算法可以應付的,另外如果策略參數太多或是回測得太細,恐怕落入最佳化陷阱,因此本文最佳化操作教學以「暴力法」為主。
基因演算法(Genetic Algorithms):不像暴力演算是每一組參數組合都不放過,基因演算法只尋近似最佳解,這使得基因演算法最佳化費時較少,足以分析上百個參數的策略。基因演算法模擬生物物競天擇演化方式,這可真的是要有數學底子才能知其所以然的,有興趣的讀者可以先參看這篇MultiCharts官方介紹。後面有機會再闢篇幅深入介紹。
移動窗格(Walk Forward):移動窗格的設計原意是要防止過度最佳化,作法簡單講就是將分割資料數列成多個區段,每個區段再分隔為樣本內(IS, in-sample) 和樣本外(OOS, out-of-sample)二個部分,用樣本內的得到的最佳參數,再去跑樣本外資料的績效。使用移動窗格跑最佳化,最終每個資料區段都會有一組最佳參數。一樣,移動窗格分析容我們後續章節再聊。
參數最佳化操作流程(暴力法)
在操作最佳化前,一樣要先確認訊號的屬性設定,交易成本是否正確設定,並開細部回測(1分鐘即可)。請參看交易成本設定、設定細部回測。
以下我們以一個簡單的長短均線交叉策略為例來示範最佳化操作流程。此均線策略總共有2個參數(Inputs),短均線(len1)及長均線(len2),依以下流程所示操作參數最佳化:
如上圖參數len1分別設定5、10、1,意思就是該參數從5開始到10結束,每次遞增1,因此最佳化會回測5、6、7、8、9、10共六個,依此類推參數len2回測20~40,共21個,而所謂的暴力法就是把這兩組參數所有可能的排列組合一一回測績效,聰明的你可以算出總共有6*21=126種排列組合(券商版MultiCharts有10000個的上限),最佳化結果回呈現在「最佳化報告」裏,如下圖:
以上面這個例子來講,總共會有126筆各參數組合的績效,預設是以淨獲利做排序,可以自行設定,對於有興趣的參數組合,可以滑鼠雙擊直接把該參數套到圖表上。另外也提供最佳化3D圖表(如下),3D圖表其實是把最佳化報告視覺化,簡單來講看兩個重點:1.概略看出參數組合與績效變化的關係,例如我們這個均線策略,可以看得出來基本參數值越大績效越好,試著解讀這層關係的背後原因,對我們之後調整策略會有幫助;2.看參數績效的分佈狀況,例如所謂的「參數孤島」從3D圖上就很容以可以掌握到。
參數最佳化應注意事項
以上就是MultiCharts參數最佳化的基本操作簡介。如我們一開頭講的,參數最佳化是一個很大的題目,比如回測的資料長度要多少?如何檢測最佳化結果的可信度?又比如如何避免最佳化陷阱等等議題,我們後面會另闢章節再深入介紹。這邊先說明參數最佳化幾項最應注意的問題:
1.既然名為”最佳化”就已經告訴我們,挑出來的是過去績效”最好的”,因此你就要接受或者說是建設心理:未來實際上線績效一定會打折扣。低估的MDD最後就會影響到你的資金管理以及執行下單時的心理狀態。
2.參數區間測的越細或是測太多組參數,越容易陷入最佳化陷阱,然後實際上線後的績效打折的更嚴重。
3.好的最佳化參數應該是,該參數的臨近數值也可以得到相近的績效,例如均線策略跑出最佳參數為(10,26),則(10,27)、(9,26)、(10,25)、(11,24)….等鄰近的參數組合也應該得到相去不遠的績效,因此在最佳化3D圖表上就會呈現出一片”高原”的分佈,相反的,最佳參數的臨近參數值卻得到落差很大的績效,在3D圖表上就呈現出一座”孤島”的分佈圖。
4.一般來講,以停損停利點數跑最佳化往往會得到較好的回測績效,但Curve fitting的機率也升高,實單績效落差就更大,因為最佳化跑出來的停利或停損金額,往往只是刻意躲掉一兩次不利的大跳空,本身並沒有太大意義。因此如果要針對停損停利點數來最佳化,應謹慎為之。
結論與心得
參數最佳化本身其實就是一個工具而已,建立正確觀念,適度使用為上策,不宜過度沉迷,交易策略要能獲利,主要還是取決於策略邏輯本身,好的交易邏輯,不需要太多最佳化,甚至不需要太多參數,反之,壞的策略如果最佳化做過頭了,反而美化了險惡真相。
歡迎加入LINE@
(點擊上方圖示)