為什麼用歷史數據回測得出的結果很誇張,而實證檢驗時又不那麼理想?

比如量化交易系統,昨天隨便寫了一個極其簡單的系統,用2000年1月1日到2012年12月20日的數據測試就有87倍的收益。

但實際應用時感覺不可能有那麼容易的事兒。

為什麼歷史數據回測的偏差那麼大呢?


這個其實不是個技術問題,而是個哲學問題。

1、你的程序存在一個假設——歷史會在未來重複。這個假設實際上並不成立。如果歷史真的會在未來重複,那麼概率論就沒有意義了。如果未來不是歷史的簡單重複,那麼根據歷史數據寫出的模型必定對未來不適用。

還需要解釋一下歷史數據為什麼不能簡單的推測未來。無論你擁有多麼龐大的數據量,這個數據量都是有限的,根據這個數據總結出來的規律也是片面的。這種情況叫做「統計陷阱」。舉例來說:一個盒子里有1萬個白球和10個黑球,每次只能抓一個球。你抓了1000次都是白球,於是可以根據這個歷史數據判斷盒子裡面全都是白球。一旦你抓出了黑球(這是必然的),原來的判斷就崩潰了。而且在這個過程中,你的歷史數據越多,也就是你抓出的白球越多,盒子里白球的比例就越少,你抓到黑球的概率就越大。在這種模型中,你的數據量越大,你研究出來的規律就越容易崩潰。

2、人對歷史數據的分析本身存在偏差。當你對歷史數據進行分析的時候,分析結果會受到分析人本身知識結構、心理狀態的影響。所以你不可能做出完全客觀的分析。在金融市場中,分析人最容易犯錯的地方就是想辦法用數學公式去套歷史數據圖形,所以你能夠設計出複合你的數據段的最佳模型,但這個模型不適用於未來,也不適用於過去。你可以嘗試把你的模型用在1991-2000年的A股市場,馬上就會出現偏差。如果套用100多年的美國市場,肯定差異更大。

這兩個問題只是淺層次的。程序化交易系統還存在更深層次的問題。國內的交易系統似乎很少有人考慮,但國外的一些先進系統相對好一些。

先進的程序交易系統理論,並不是程序一運行人就不用管了,就自動化了。事實上人還是要管理的,要參與對更複雜的參數調整,以便模型能夠適應當前及未來一段時間的市場形態。也就是說,先進的程序化系統是開放的,要隨時調整的。

從理論上說,機器只能輔助人類做出決策,但不能代替人類做出決策。

以上是我的看法,歡迎探討。


可以從這三個角度考慮下。

一是需要檢查下系統是否出現不合理的地方。 比如代碼邏輯錯誤、未來函數、交易成本設置不當、過度擬合歷史數據等。

二是重點並不是「收益率」,而是「經過風險調整的收益率」。 比如年收益/最大回撤是多少,以日計算的夏普比率是多少。單純的收益率高並不是關注的重點,12年賺87倍只需一個月虧1倍就可以歸零。 只有經過風險調整,資金管理規則允許的收益率才是真實的收益率。

三是歷史測試時你站在一個很高的角度,縱覽該策略12年的交易數據,只關注總體,每日盈虧實際沒有被你看在眼裡,策略收益曲線在你心理上被平滑了無數倍。 但是你是實際交易時,是以日,乃是以分鐘來關注的你策略的交易狀況,自然感覺完全不同,每一個對於總體來說微不足道的盈利與虧損都會很大的干擾你的情緒、認知、判斷。


越簡單越有效,越簡單越接近事物的本質。

看了問題,第一反應就是實證檢驗時間太短。如果你在歷史中的驗證是嚴密的,不要輕易否定自己。


over fitting


你把回測結果報告貼上來


1.滑點;2.交易費用


這種情況,很可能對歷史樣本數據存在過擬合。


推薦閱讀:

平均值為什麼被叫做期望值?
智商和學習成績之間的關係,有沒有相關的數據模型?
為什麼有的孩子「一誇就落後,一批評就進步」?
包含兩個部分相減的目標函數有什麼好的方法讓其中一個部分優先得到優化?
怎樣判斷一個分布的正態性?

TAG:金融學 | 統計學 | 數據分析 |