今篇【真‧搵Alpha策略系列4】,我想講下行內一個簡單而常用的做法去測試兩個常見回測問題:
一個策略是否適用於某個交易市場
如何降低交易策略overfitting的機會
先用恒指期貨的日線圖作例子:

上述恒指期貨數據由2000年到2024年6月10日,用了ratio adjustment方法得出 (如果你用differencing方法也可以)。憑經驗會知,相比其他國家的指數期貨,例如美國三大美期,恆指期貨明顯地是遜色一籌,24年半的時間上升幅度極為有限,從大約1萬水平升至只有約1萬8水平,升幅只有約80%水平,對比同期間的S&P500期貨,升幅高達3.6倍。
咁如果我用一個簡單的均線Trend Following策略在這個市場上,表現會如何? 我們可以簡單做一個測試。
假設恆指期貨的基於 Closing Price 建立的5天平均線如大於50天平均線(不用crossover),我們就決定做多; 相反如5天平均線低於50天平均線(同樣不用crossover),我們就做空。我好久已經問自己,其實結果得出來是賺還是蝕,也只是一組交易參數的結果而已,並不代表可以全面反映這個策略類型是否可用,也不知道會否overfit。那到底可以如何做得更加全面去減低overfitting的機會?
簡單,我們用一幅圖就可得知。
以上圖片是對比了上述交易策略的在樣本內及樣本外的Sharpe Ratio,每一個點其實就是一個parameter combination產生出來的Sharpe Ratio結果。
(如果比較新手的朋友,可以看看以下定義:
1. Best Fit Line,即圖中的紅色斜線,其實就是linear regression中得出的regression line。Beta及Intercept則是Line的斜率及它的Y-intercept。
2.Sharpe (夏普率) 指將策略的平均回報除以回報標準差,這可以讓我們大概得知風險調節後的回報水平。Sharpe越高越好,代表用相對少的風險賺得更多平均回報)
3.樣本內意思就是預先把整段回測的數據斬開,預先做測試的一部份。例如我有24年的數據,可能我會把頭12年作樣本內數據去訓練系統,用之後12年數據作為樣本外數據作測試,這令我們可以更好地偵測overfitting的機會,因為在樣本內訓練完系統後可以將它應用到之前沒有被測試過的交易時段作評估,如果樣本外表現太差,overfitting機會就更高。
)

一般行內認為一個交易策略要簡單地考證其可靠性,會從上圖睇以下幾個重點:
看Best Fit Line 斜度:
Best Fit Line 是否由左至右向上升,以上圖所示。簡單來說就是希望看到樣本內的Sharpe 與樣本外測試的Sharpe有正向關係,有助說明這個策略用參數優化是有正面作用的。但要留意的一個重點是,上述的參數優化範圍是由2到30,如果調大一點去 2到100,那Best Fit Line 可能就不會左下至右上去了,什至Slope變負,說明參數優化時調大參數值不能有助提升這個策略更有效地應用到這個市場上。所以如何選取適當的優化範圍是非常重要。如下圖,優化範圍由50至200便令Slope變負了。
看Intercept正負:
Best Fit Line 是第一關,第二關是 Intercept。Intercept是正即樣本內 Sharpe是0的情況下(假設Slope也是正的話),樣本外的Sharpe都可以是正數。所以,如果Intercept是正,加上Slope越正,當然是最好結果。
看Sharpe的dispersion:
Sharpe的分佈越分散,在我經驗來說是有危也有機。如果可以推論出一個General Rule 去解釋比較好的Sharpe (即使離Average比較遠) 是因為什麼而出現,這直接就是一個市場優勢。否則的話低dispersion比高dispersion好。如下圖所示,樣本外的 dispersion 只有0.12 而樣本內是 0.21,即這個參數範圍的Sharpe波動性在未來似乎更為可靠。
看Sharpe的實際數值:
最後而最重要的,就是Sharpe的實值。上圖的樣本內外Sharpe範圍沒有一個過1,而且當對比樣本內Sharpe與樣本外Sharpe永遠都有一個打折的情況(負Intercept)。
從以上可見,上述的普通均線Trend Following策略以我經驗若應用到恆指期貨市場,將來表現將會預期地差。雖然Slope為正及Dispersion樣本外比內更低,但最重要的Sharpe實際數值偏低及Intercept也非正數。
有興趣做得更仔細的朋友,可考慮以下數個改善位:
視乎策略性質及需要,考慮回測時加進交易成本 (手續費﹑滑價﹑點差﹑Toxic 流動性等)
做回測及參數優化前,預先剔除一些參考性低的參數組合 (例如交易數量過低或過高的組合,又或日內交易如選2及3MA,那就需要自動交易系統輔助,如果不能做autotrade也可以剔走2-3MA組合。)
樣本內外的樣本全面性。例如若樣本內市況是一直向上升,那麼不能改變的是某些參數組合在樣本內會大賺錢但一到樣本外就會蝕錢,因為樣本外好可能會有跌市情況而之前樣本內未遇過。所以,更好的做法是將樣本內外的數據都包括不同升跌市市況,好讓Sharpe參數組合也能更恰如其分地在樣本內外反映出來。
SY
2024-06-15 14:38:59 +0000 UTCEMPatreon
2024-06-14 05:21:24 +0000 UTCSY
2024-06-11 14:08:47 +0000 UTC