【獨家專欄】做錯其中一樣即策略失效! 挖數據、做回測你必須知道的潛在風險(錢琛)
續上文,繼續討論執行策略時的要點。即使策略在歷史數據中擁有極高回報穩定性,也不代表策略可以在未來擁有同等表現。假如策略在歷史中不斷獲利,但在真實執行時大不如前,就代表策略失效。其中一個策略失效的原因,是參數設定過程太複雜,提高了數據挖掘風險(data mining risk)。
數據挖掘本來是個「好東西」,意思是在數據中找尋規律,幫助進行決定或預測。在計量交易領域中,假如使用大數據構建策略訊號,數據挖掘的技巧就相當實用。常見例子是使用矩陣(matrix)的因子化技巧(factorisation),量化文本數據(textual data),幫助構建容易回測的訊號。
不過,如果對數據進行過度挖掘,就很可能會找出錯誤規律,帶出毫無用處的假insight。「過度」的意思,是挖掘方法過於複雜,或挖掘出來的參數(parameter)量佔本來有的樣本量(sample)極大比重。舉一個簡單例子即可:假設有10天的加密貨幣價格數據,你把所有數據用作構建模型,令模型參數多達5/6個,參數佔樣本量的比重高達60%。那個模型不會讓你一夜致富,只會令你在真實交易時虧損,因為模型只適合解釋起初的10個數據點,解釋不了未來數據。對數據進行過度挖掘的風險,就是數據挖掘風險。
放心,上次討論的策略的數據挖掘風險理論上應該不會很高。策略的唯一參數是計算總回報的日數,數值是14,是兩個星期的交易日數,比較隨便地被選擇出來,不會像3天總回報一樣敏感,也不會像30天總回報一樣延遲,相對合理。換句話說,選擇這個參數的過程並非很複雜,而且在整個選擇過程中,我們是在大約一年半的日數據中,選出僅僅一個參數,參數佔樣本量的比例極低。理論上,這個策略的數據挖掘風險不會很高。
理論歸理論,要實際驗證這個策略的數據挖掘風險會否很高,就要進行各類型的穩定性測試(robustness test),在其他渠道/以往課堂都有提過,這裏就不重複了。不過,執行這些測試時,使用Python等編程語言會較方便,因為測試的框架每次一樣,我們可以把框架寫成簡短程序,每次執行測試時,導入相關的策略回報即可。當然,除了穩定性測試外,也可以把回測框架寫成固定程序,接近完全地自動化整套回測流程,令回測由最快的幾十分鐘,變成幾秒鐘。策略不多也很難。
其他計量策略的執行重點,下回再續!
*文章獲 錢琛 授權獨家刊登。原標題為《受小型幣災啟發的幣市市場中性策略2》
免責聲明:本網刊載的所有投資意見,只可作參考用途。讀者在作出投資決定前理應審慎,並主動掌握市場最新狀況。若不幸招致任何損失,概與本網無關。而本集團旗下網站或社交平台的網誌內容及觀點,僅屬筆者個人意見,與本集團立場無關。本集團旗下網站對因上述人士張貼之資訊內容所帶來之損失或損害概不負責。