[140417] 統計學上的 Curvefitting

Curvefitting,對於做程式交易的人來說應該很耳熟,我們都盡可能希望在研發策略時避免 Curvefitting,因大多數人都同意 Curvefitting 只是對歷史資料進行 buy low sell high 的配對,基本上是為歷史資料 tailor made 的衣服,但將這套衫放進身形變化不斷的市場,卻很大機會不再合身了,回測出來的優良 equity curve 變成心痛惡絕的負斜率。


以上都是大家對 Curvefitting 的基本認識,不過擁有 Curvefitting 的策略都有一個相近似的特徵……就是策略在回測期間產生過少的交易量,今天我會以統計學來解釋什麼是 Curvefitting。如果你追求 equity curve 平滑,但新策略的交易量也越來越少,基本上你的策略已很可能掉進 Curvefitting 的陷阱。


Population 及 Sample:


要理解統計學上的 Curvefitting,我們先要理解什麼是 Population 及 Sample,假設你的策略由股市建立一路交易到股市滅亡,所產生的交易量就稱為 Population,但根本沒可能有人做到,長生不老嗎?而 Sample 是我們由 Population 中在某段時期抽出來的交易量,我們可不斷抽出交易量來組成很多個 Sample,所以 Population 是由不同的 Sample 組成,而統計學就讓我們知道如何由不同的 Sample,甚至是一個 Sample 倒推出 Population。


如何由不同的 Samples 倒推 Population 的 Expected Value 


只要每個 sample 之間所產生的結果 (Mean) 的差異越少,我們就可倒推 Population 的 mean 也應該和各 Sample 的 mean 相近。那如何計算各 mean 之間的差異?答案是 Standard Error,亦即是各 Sample Mean 之間的 Standard Deviation(SD),亦形成了一個新的分佈 (鐘形曲線),及產生出一個新的 Mean (Mean of Sample means)。只要 mean 與 mean 之間的 SD(Standard Error) 越少,那麼 mean 的分佈 (鐘形曲線) 就越集中,我們所得出的 Mean of Sample means 就越接近真正 Population mean(Expected Value),亦即是 Mean of Sample means=Population mean。


假設真正的 Population mean (average profit per trade)=100,我們抽出 5 個 Samples,每個 Sample 中都有 10 單交易,我們就可計出各 sample 的 mean,再將各個 sample 的 mean 計出平均數,就得出 Mean of Sample means,亦可計出各 sample mean 間的 SD (Standard Error),下圖示範應該會較清楚:




Mean of Sample means=100.3﹐Standard Error=1.87,其實已很接近真正 Population mean (100),而 Standard Error=1.87 其實是個給 Mean of Sample means 一個變動範圍,意思是 Mean of Sample means 並不是常數,它是會變動的,100.3 加減一個 Standard Error(1.87),意思是這個 Mean of Sample means 有 68% 機會在 98.43 至 102.17 內變動。


如何由一個 Sample 倒推 Population 的 Standard Error?


不過問題是,我們不太可能擁有所有數據,故策略由回測所產生的交易量亦不齊全,我們其實只是身處於 Population 中一個 Sample 的時期,所以我們即使擁有由股市建立到現在的歷史資料,我們都只是在一個 Sample 中。那我們如何由一個 Sample 倒推 Population? 答案仍是 Standard Error,不過我們不是再計算各 sample mean 之間的 SD 了,而是由一個 Sample 中各交易間的 SD 計算出來,公式就是 Standard Error=SD/n^(0.5),各 Sample 中的 Standard Error 如下:



以 Sample 2 PnL 為例,Standard Error=1.99,和 Sample 間的 Standard Error(1.87) 很接近,所以粗略假設下,在一個 sample 中,我們亦可大概得知 Sample 間的 Standard Error,Sample 間的 Standard Error 越少代表你的策略在不同的 Sample 中所得到的 Expected Value 的變化也越少,亦即越接近真正的 Population Expected Value。


Curvefitting 和 Standard Error 的關係 


說了一大堆統計學,悶死了吧,我想應該還有很多人不明白吧,看多幾次應該會更理解,這些在中學或大學的基本統計學課程中一早已學,但不知有多少人真的理解。…………. 一個策略真正的 SD 又豈會只得 6.29(Sample 2 PnL 的 SD)? 很多時真的 SD 比 mean 還大,故 Standard Error 也很大,即是說你策略的表現在加減一個 Standard Error 下就會給出很大的變化範圍,亦即很難會接近 Population Expected Value。


不過這些和 Curvefitting 有什麼關係?再看一次 Sample 中 Standard Error 的公式: SD/n^(0.5)


想你策略的 Expected Value 接近 Population Expected Value 嗎?那你必須想法令 SD/n^(0.5) 變小,其中一個方法就是增加交易量 (n),那麼 Standard Error 就會變小,亦即代表你的策略在某段回測時期的表現亦較有可信性,長遠的表現應該可達至 Population 的表現。但如果交易量 (n) 過少,你回測表現即使很好 (高 profit、高 PF、低 MDD),但 Standard Error 因交易量少而變得大,即代表你的策略根本沒可信性,長遠必定偏離 Population Expected Value,亦代表你的策略隱含著 Curvefitting 的特性。所以人們說你測試的時期、數據、交易產品越多越好是正確的,因可在這些時期及數據中產生足夠多的交易量來評估策略。


留倉還是日內交易? 


那麼做留倉的策略用十多年的日數據夠嗎?有很多人在日數據上尋找好的留倉策略,以為十多年的數據足夠了吧!他們的策略在十多年間產生數百單至千多單交易,有些可能得百多單交易,看似很多,但其實遠遠不夠,相比同一時段內的日內交易,一天只要有一單交易,十多年的回測就可擁有數千單交易,Standard Error 絕對比你們留倉策略的來得小,可信性亦大於留倉策略,這是為什麼我做日內交易而不做留倉的原因,有很多人問我為何不做留倉策略,我答: 「我將每天的一分鐘圖看成一年的日線圖,一天對於我來說是等於一年了,如果我的策略可行,那何我要等待整整一年來看成果?」


當然,交易量亦不可過多,手續費及滑價會因過度交易而摧毁你的策略,所以要注意每單交易的平均 profit 能否遠大於交易費及滑價。


希望我這篇文章可給你們多認識 Curvefitting,不要盲目追求超順滑的 equity curve、高 profit、高 PF 及低 MDD,這些一維指標並沒考慮交易量,你建立出來的所謂聖盃其實並沒太多可信性。



Yuen Cheng


統計學上的Curvefitting

Comments