2014年5月19日 星期一

用蒙地卡羅模擬法做系統最佳化

蒙地卡羅模擬法是一種很好用的方法,特別適用於一些不確定結果的情況,應用亂數的模擬取得一些可能的結果。然後你再跟據這些結果做出一個累計次數分佈表,你就可以得到在多少信心水準之上,你會可能會得到什麼結果,基本觀念我想大家都懂,問題是如何把蒙地卡羅模擬法應用在交易上呢?

一般常看到的用法就是把蒙地卡羅模擬法運用在MaxDD的估計上面,把交易結果打散用亂數重組,用以估計未來可能發生的MaxDD,但是基本上我覺得這樣做沒有任何的意義,因為這樣的統計結果不會對你的系統有任何的幫助,相反的它會強迫你不斷的做最佳化,因為越好的結果跑出的來統計越好,最後又掉入Over Fitting的陷阱中,因為最後的交易結果往往和統計的結果有很大的差異。所以我個人非常反對把蒙地卡羅模擬法運用在MaxDD的估計上面,那是把好的工具用在錯誤的地方的最佳例子。

相反的我把蒙地卡羅模擬法用在系統的開發與最佳化上面,一般開發系統往往免不了的一個步驟就是最佳化,但是最佳化沒做好就變成Over fitting,結果聖杯拿到市場交易變剩杯,我想這是許多人都有共同的經驗,不要懷疑我也有相同的經驗,而且我交的學費也不會比別人少,但是要判斷有沒有Over fitting非常的困難,於是又有什麼參數孤島的理論,搞了一堆理論,但是問題仍然沒解決。所以我提出我自已的解決辨法。

我寫了兩支亂數的程式,其中一支程式是用亂數的方法選擇市場,也就是我用程式產生一個Random Portfolio,而且這個Random Portfolio是每次回測的時候,它都會重新組合一個新的Random Portfolio,也就是每次回測的Portfolio的內容是不相同的。透過這樣的方式,我可以很放心的去比較不同參數或方法的好壞,也可以檢視我的 Money Managerment與我的Risk Managerment是否有發揮它應該發揮的效用。
下面的結果是我用Random Portfolio搭配我的系統產生10次回測的結果,你可以看結果的分佈知道你的Robustness(系統穩建度)如何,你可以看到回測的結果分佈的情況非常的穩定。當然你也可做100次以上的回測,然後再把回測的結果做成分佈表。
RandomPortfolio.png
第二支程式則是Random Entry 隨機進場法,透過這支程式我可以檢視我的Portfolio Managerment是否有優勢存在。也可以檢視不同的參數所產生的結果的分佈情況,做為參數選擇的依據。下面是我用Random Entry搭配我的Portfolio Managerment,做10次回測產生的結果,可以看到每次的結果都是正數,這可以證明我的Portfolio Managerment存在一個正數的期望值。
RandomEntry.png

雖然用蒙地卡羅模擬法做系統最佳化有許多的好處,不過同時它增加系統開發的難度,可想而知,許多的系統經不起這樣的方法催殘,你很快就會看到系統的真面目,另外一個是倍數增加的測試量,假設你每個參數要做10次的回測,那麼你在做參數最佳化的時候,需要多跑10倍的回測量,等於你回測的時間也多了 10倍。不過和它的好處比起來,它的缺點其實不算什麼。

沒有留言:

張貼留言