最佳化是程式交易最好的朋友,也可能是最大的敵人
作者:
量化Cash 時間:
2019-04-30 16:43:48
最佳化可以幫助我們尋找歷史行情中表現最好的參數或邏輯,並用這些參數跟邏輯進行驗證與交易,然而最佳化過頭會導致策略很難適應未知的行情走勢進而造成虧損。既然最佳化是程式交易最好的朋友,那麼我們更應該要好好的來認識他。一、策略最佳化:最佳化常見的方式有兩種:參數最佳化邏輯最佳化參數最佳化顧名思義就是透過MultiCharts找到過去某段時間表現最好的參數,例如均線的周期、或是開盤後的某段時間等等。↑用MultiCharts做參數最佳化
傳統的邏輯最佳化作法就是透過觀察行情的走勢,當我們發現某些現象出現時進場有利可圖,或是觀察到於某些情形出場可能可以使風險報酬比更高,然後透過撰寫策略的方式進行回測驗證想法是否正確,若不正確就進行策略修改,換句話說,傳統的策略開發其實就是在進行邏輯最佳化。
後來有人發現,傳統的開發方式效率太低,為何我們不直接運用程式幫助我們開發策略呢?於是就有人發明了策略產生器,而課程中示範的CFPO即為策略產生器的一種。透過CFPO的架構我們可以使用MC生產出過去表現不錯的邏輯組合,然而CFPO使用的模組的前提是使用邏輯合理的模組,而不是任何的模組都拿來使用(如CCI(c,20)>RSI(C,20)或是(High-Low)>Time/100就是不合理的模組)。二、最佳化驗證:不論是哪種最佳化方式,我們都應該要透過一些方式去檢驗交易策略是否有最佳化區間表現很好,但是在沒有使用最佳化的區間卻表現不如預期的現象,而這樣的現象我們稱之為過度最佳化(Overfitting)。驗證策略是否過度最佳化有兩種常見的方式:1. 樣本內樣本外(Insample - OutSample, 簡稱ISOS)2. 三分資料法ISOS的做法是將歷史資料切成兩段,一段區間為樣本內,其他資料為樣本外。樣本內的資料通常會包含多頭、空頭、盤整三種行情,這樣才能讓我們的策略找到在這三種行情中都能維持一定風報比的參數或模組;樣本外的資料則用來驗證這些參數/模組是否依然能維持一定的水準,而通常樣本外的風報比不會比樣本內來的好。↑應該要包含多頭(藍圈)、空頭(白圈)、盤整(黃圈)的樣本內資料
三分資料法的原理為ISOS的延伸,三分資料法會將歷史資料切成三分,樣本內、樣本外、以及驗證集(Validation Dataset)。樣本內外定義同ISOS,唯一的差別在於三分資料法會挑選樣本外與樣本內績效差異最小的參數作為上線參數;驗證集的功能是保留距今至少一年的資料不做開發,不做開發的意思是,從一開始的看盤→最佳化→挑選參數/模組都完全不參考這段資料,保留這段資料的目的有二:1. 將這隻策略當作是一年前開發完畢,近一年的績效可當作上線績效。2. 由於開發過程完全沒有碰到近一年的資料,因此近一年的績效參考價值高,因此相當適合當作策略管理的依據。ISOS與三分資料法各有其優缺點,ISOS的優點在於可以針對近期行情去修正策略,而三分資料法必須要至少保留近一年的資料,因此三分資料法比較做不到;三分資料法的優點則是有近一年的績效可當作權重調整的依據,ISOS則無。若策略是採用策略產生器的開發方式較建議用三分資料法的驗證方式,因為邏輯最佳化的策略比較不容易適應未知的行情走勢,所以還是會建議保留近一年的績效做為權重調整的依據。三、結語:最佳化是程式交易十分強大的武器,這樣的武器若沒有正確的使用會使自己面臨到十分大的風險。雖然我們介紹了一些驗證策略是否過度最佳化的方式可以降低這些風險,但是實際上幾乎沒有任何方式可以避免策略失效,我們能夠避免的只有降低策略失效所造成的傷害,並且東山再起的能力,也因此我們需要策略管理、資金管理、以及開發策略的能力。未來若有機會我們也將介紹一些策略管理、資金管理的方法,至於對於覺得策略開發十分困難的同學可以嘗試用CFPO的方式找到較容易獲利的粗胚,這樣就能減少策略開發的時間囉!