2016年7月30日 星期六

投資組合回測:相同參數在多商品的最佳化

我忘記了過去在哪個論壇(很有可能是 Kway),有人曾經問過如何在投資組合的回測中,做多商品都使用同參數的最佳化?有點饒舌,是嗎?容我先解釋一下這是怎樣的狀況。

因為越來越多人強調、認同,訊號應該要對不同的商品具有穿透性,以同一個訊號(參數一致)套用到多商品去看看是否其他商品(尤其是同類型)也能獲利,用來檢測這個訊號本身的穩健性的良莠如何?而在檢測訊號對參數選擇的依賴程度時,我們也會透過最佳化報表來看看是否有參數績效高原的現象存在?於是... 我們就很直覺的這麼做,讓多個商品直接執行同一個訊號,掛在同一個策略中。它會是這樣的:

這樣的設定方式,因為只有一個訊號,我們就可以直接對這個訊號做參數最佳化來取得最佳化報表,觀察參數績效高原的現象是否存在,用以強化訊號的信心。But!這樣做對嗎?想一下,這樣的設定方式的確是一個訊號、相同參數去套用所有列表的商品,但是這些商品的契約規格一樣嗎?執行時的交易成本會一樣嗎?以本文的範例來看,台指期、電子期、金融期在丟單時,光是買外盤、賣內盤的價值差異就明顯存在了。這還只是在國內的商品,當你要進入國外期貨的時候,各種商品交易成本的估算差異只會更大。明顯擬真度不夠的回測設定,產生出來的回測報表,你會不會擔心?

不同的商品,我們得按契約規格的不同做分組,這樣才能得到比較擬真的交易成本涵蓋估算。那麼... 設定就會是這樣的,不同的 Strategy 設定不同的交易成本(下圖左側、個別的交易成本自己搞定)。然後我們在這樣的設定上做最佳化、觀察最佳化報表。



按下最佳化按鈕後(上圖右側),恐怖的事情就出現了... 有做過投資組合最佳化經驗的朋友,相信看到這個模擬次數,應該就手軟了吧 XD

我們光是自己腦補一下最佳化過程,就能知道這個模擬次數很多是不必要的重複再重複。何況,我要測試的只是同一個參數在不同商品的狀況,計算這麼多次,是怕地球溫度上升太慢嗎?

以這個例子來說,當我用 5MA 的時候,這三個商品都用 5MA,參數設為 10 就全部都用 10MA,我根本就沒有要知道 TXF1 用 5MA、FXF1 用 7MA、EXF1 用 13MA 的回測是怎樣的啊!
input: length(10);


if C>Average(C,length) then    buy next bar market;
if C<Average(C,length) then    sellshort next bar market;


這時候,GV 函數可以來幫我們的忙了。
我們把要測試的訊號多複製一份,並且修改一下(下圖右側),並且搭配好 PortfolioBacktester 的設定(相同交易成本設定的商品放在同一個 Strategy)如圖:


接著,我們執行最佳化,你就會看到模擬次數非常大幅度的下降了,而且這才會是我們想看的東西啊!不同商品都使用同一個參數的最佳化報表。


最後,看一下這張圖裡的上下對照,我相信你一定可以理解為什麼要做這樣的訊號改造與設定了。是的,這麼做就是用 訊號 TEST_01 的參數去決定 TEST_02 的參數(以變數形式)。