【單元13】MultiCharts如何操作參數最佳化(Optimization)
在上一單元「快速看懂策略績效報告」中我們學會了檢視策略績效,大多數時候策略不會一寫出來便得到滿意或合格的績效,下一步就須進行策略的調整修正,主要有幾個方向:例如檢視策略本身邏輯(最重要)、增加濾網(濾掉失敗的訊號)、變更商品時間頻率(通常15分K會比5分K好,以此類推)以及參數最佳化。參數最佳化可以說是MultiCharts最迷人的一項功能,但寫在前面:需”小心服用”! 參數最佳化這件事本身就有許多不同的意見討論,甚至可以說是爭議,最佳化是一個很大的題目,可深可淺,由於本系列教學意在用較快且容易理解的方式教會大家上手開發MultiCharts策略,所以諸如「移動窗格」、「In Sample」、「Out of Sample」、「Curve fitting」等的議題,先暫不深入探討,之後我們會在精選專欄另闢章節討論。
>>讀完本文您可以學到什麼?
1. 學會操作MultiCharts參數最佳化功能
2. 參數最佳化”陷阱”與重要觀念
基本觀念與名詞解釋
所謂參數最佳化顧名思義就是透過電腦快速運算,找出績效最好的參數組合,例如一般常用的長短均線交叉策略參數可能習慣採5均跟20均,但會不會5對22或10對33績效更好,其實不用傷這個腦筋,透過MultiCharts參數最佳化功能,只要針對各參數指定區間,電腦會跑出一份最佳化報表,把所有配對結果陳列出來並排序,交易人再從中挑選理想的參數組合。這個過程就稱為參數最佳化。
Multicharts提供兩種最佳化方式:「暴力法」及「基因演算法」,另可選擇要不要採用「移動窗格」回測,先簡單解釋一下專有名詞:
暴力法(Exhaustive):又稱為窮舉法,依序將所有可能的組合代入找尋最佳解。這個方式的好處是所有組合都會被計算並找出絕對最佳解,缺點是,一旦參數較多,需要回測的組合數(次數)也會攀升,這個時候最佳化就要變成是考驗你電腦等級跟耐性的工作。不過大多時候我們的策略參數都是暴力演算法可以應付的,另外如果策略參數太多或是回測得太細,恐怕落入最佳化陷阱,因此本文最佳化操作教學以「暴力法」為主。
基因演算法(Genetic Algorithms):不像暴力演算是每一組參數組合都不放過,基因演算法只尋近似最佳解,這使得基因演算法最佳化費時較少,足以分析上百個參數的策略。基因演算法模擬生物物競天擇演化方式,這可真的是要有數學底子才能知其所以然的,有興趣的讀者可以先參看這篇MultiCharts官方介紹Understanding_Genetic_Algorithm_Optimization。後面有機會再闢篇幅深入介紹。
移動窗格(Walk Forward):移動窗格的設計原意是要防止過度最佳化,作法簡單講就是將分割資料數列成多個區段,每個區段再分隔為樣本內(IS, in-sample) 和樣本外(OOS, out-of-sample)二個部分,用樣本內的得到的最佳參數,再去跑樣本外資料的績效。使用移動窗格跑最佳化,最終每個資料區段都會有一組最佳參數。移動窗格其實很多技術細節,也偏學術運用,是否適用MultiCharts程式策略開發有待釐清,本文先不討論。
參數最佳化操作流程(暴力法)
在操作最佳化前,一樣要先確認訊號的屬性設定,交易成本是否正確設定,並開細部回測(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的機率也升高,實單績效落差就更大,因為最佳化跑出來的停利或停損金額,往往只是刻意躲掉一兩次不利的大跳空,本身並沒有太大意義。因此如果要針對停損停利點數來最佳化,應謹慎為之。
5.MultiCharts本身提供的移動窗格功能一般來說實務運用不多,但簡單採用「In Sample(樣本內測試)」與「Out of Sample(樣本外測試)」兩段區間資料來檢視最佳化是否過頭,不失為一個間單實用的方式,也就是用一段區間的歷史資料來做最佳化取得參數,然後再將這組最佳化參數策略套到另一段區間的歷史資料驗證績效一致性。
快速結論
本文示範MultiCharts參數最佳化如何操作以及注意事項,參數最佳化本身其實就是一個工具而已,建立正確觀念,適度使用為上策,不宜過度沉迷/執著求出漂亮數字,交易策略要能獲利,主要還是取決於策略邏輯本身,好的交易邏輯,不需要太多最佳化,甚至不需要太多參數,反之,壞的策略如果最佳化做過頭了,反而美化了險惡真相。
【警語】:
- 本文所舉之語法範例為教學之用,非提供交易策略,請讀者警慎運用。
- 自動交易如遇系統異常或斷線等問題,可能暴露更高的風險,交易人仍應檢查電腦系統或網路之狀態,特別要隨時注意部位變化,以降低相關風險。
點我,看更多程式交易教學→https://www.pfcf.com.tw/eventweb/multicharts/
/統一期貨相關連結/