2010年5月26日 星期三

交易程式之老幹發新枝 by Walk Forward


程式交易小學堂─期貨投機事業的王道
如果不是已經正在使用程式交易的人可能就不要浪費時間閱讀這篇文章了。

之前與網友1127在MSN上討論了一些交易上的想法,及今天看到天相在Plurk嗆聲暫停期貨的交易,讓我想分享一下這個我自己實作的經驗,或許沒有什麼學理可言,反正我一直是從實戰中且暫且走,也從交流中這邊學一點,那邊偷一些的。

參加過寶來舉辦的一個講座,有藍色投機客主講的一部分內容「Walk Forward Analysis」,您可以先參考一下那是什麼東西。

我實際投入資金做當沖交易到今天差不多半年了,使用的是自己設計交易程式DT_01(記錄在此),在其他地方,我都戲稱它是"合成獸",因為這個交易策略其實拼湊而來的。你可以在這個交易記錄上看到我用兩個Tag去記錄,分別是 DT_01 與 DT_01.x 原因就是我把這個交易策略一拆為多個交易程式,雖然策略核心是一樣或說是差異極小的,但畢竟會造成每天的下單口數不一致,忽大忽小的,這就像是把多個交易策略去形成投資組合的方式,老套了。

今天我沒有要講 DT_01 的設計核心或是概念(東抄西拼的有什麼好講...),我要講的是我如何拆 DT_01 成為 DT_01.1 、 DT_01.2 ....的 DT_01.x。


從「Walk Forward Analysis」中可以看到他是先設定過去一段日期區間做測試樣本,取出最佳化的參數群之後,看看隨後一段日子的時間是否表現OK?以檢驗這個可能要上線的候選交易程式是否有 Curve Fitting 的風險?我則是從這個概念想到了把一個程式拆成數個的想法。


我先把要用來作為測試的歷史數據區間切成數等份,比如有18個月的歷史數據,而打算要把程式拆成4個,我就保留原本已經在使用的 DT_01 不動。另外的3個,則是取用這18個月的歷史數據切成3段也就是各6個月,以這各6個月的歷史數據拿 DT_01 去做參數最佳化,因為測試用的數據不同,通常這樣得到的最佳參數就會有3組不一樣,除非你本來的程式是沒有參數,或是原選用參數所致的表現實在是美麗到不行,要不然,不同的歷史數據理論上會有不同的走勢,所以不同的參數可以得到最佳表現算是可以想像得到的。

接著把用了3組各6個月的數據去最佳化出來的參數當做3個新的程式,與原本選用參數的程式合起來就有4個了,就這樣以同樣的策略核心去得到不同參數的數個程式以組成一個投資組合。

這不是把一整串的歷史資料都拿來跑最佳化,然後選前幾名的參數來做成投資組合。我的想法是這就像是新的程式各自 Match 不同的走勢,因為用來測試的歷史數據來自各不同的區段,冀望未來行情發生的時候,這些不同參數的新程式有各自表現較佳的一段,而不是為了『照顧過去歷史的全部,而犧牲未來的可能性』。

我不知道這樣做到底是我在幻想還是瞎扯,但是我做了,也正在 Run。

對了,這樣新生出來的程式再把全部的歷史資料拿回來套會發現各自的績效表現都比那個舊的差,這是正常的,也是應該的。

熱門文章