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。
對了,這樣新生出來的程式再把全部的歷史資料拿回來套會發現各自的績效表現都比那個舊的差,這是正常的,也是應該的。
熱門文章
-
在 MultiCharts 或是 TradeStation 中都有 Set開頭的一些指令可以運用,比如 停損─SetStopLoss、停利─SetProfitTarget,這些都是所謂的 ThisBar 模式運作的特殊指令,它們讓你在條件成立的當根K棒就可以做出對應動作,而不是一...
-
在 MultiCharts 裡,本來我以為 EntryPrice(0) 就代表了最後一個進場的成本價,經過測試後,確定了 EntryPrice( 0 ) 不是最後一次進場價,而是最後進場方向的第一筆價格(可查閱"程式交易語法大全 page 255")。什麼意思...
-
去年開發「 把策略訊號轉換成選擇權去執行 」的時候,一直有個實務上的困擾:標的物價格。 我要把訊號轉成選擇權的時候,事前不能精準的知道要交易哪一個履約價、Put 或 Call,需要在訊號或市況變化的當下才決定交易標的。但在 MultiCharts 的運作架構上,需要開啟欲取...
-
殷鑑不遠。這是 2019/07/03 的台指期貨,在大約 10來秒的時間之中,台指閃崩了近 500點,並且快速回復。這樣類似的事件,在台指不是空前,也不會絕後,即使台灣期貨交易所有所謂的動態穩定機制在運作,這一天,據我所聽聞到也有不少友人在這很短的時間內... 中槍了。這裡,我們...