18 12月 2008

回測數據(Backtesting)VS 最佳化(Optimal)

其實這問題已經存在很久了,不過由於自己太忙了也沒有去真實映證看看

很多人都說不要過度的最佳化,但是有參數就一定會伴隨一個問題
這個值是否適合?

因此很多人也喜歡最佳化,不可否認,最佳化的確很吸引人

這篇文章討論的觀點,建立在可以接受最佳化的程式上
在這裡探討三個觀點
  1. 回測完的資料是否為真實獲利?
    這是大家最常做的,利用回測完的資料來代表獲利數據,說幾年幾百萬
    ,但是是否真的資料就是如此呢?這個我們無從得知,但是因為後面的
    實驗,這個就拿來當對照組吧!

    概念圖如下,將歷史資料數據取出間隔的獲利來當基本對照組:


  2. 利用足夠長度的歷史資料跑最佳化
    這個觀念在於很多人會覺得,如果擁有足夠長的歷史資料,幾乎是可以
    當成一個完整的景氣循環的資料,那這樣子跑出來的結果可以涵蓋所有
    多頭空頭或盤整,這樣子的程式比較令人接受。

    概念圖如下,將累積的歷史資料取最佳值,來跑下一個時間區間:


  3. 利用區間歷史跑最佳化
    這觀念在於,認定市場在某段時間內都是有相同趨勢,例如多頭、空頭
    等,往前取一個區間來反應接下來的市場趨勢,隨著時間的前進,區間
    的資料也必須跟著時間軸做改變。

    概念圖如下,區間最佳化參數必須隨著時間變動跟著平移:

根據上面的想法,在這裡利用一個很簡單的交易策略來驗證上面的想法

歷史資料:1999/01/01 ~ 2008/09/30

交易策略:長短均線交叉、單口雙向、波段策略
     買進:交叉向上,且K線收上長均線
     賣出:交叉向下,且K線收破長均線

最佳化參數:短均線(2~40,以2增加)
      長均線(30~100,以2增加)

資料型態:30分鐘K線圖

交易成本:2000元/每筆

區間範圍:以三年為歷史一段區間,比較2004到2008年獲利

實驗結果:

上圖是直接利用完整的歷史資料跑出最佳化的結果,每個間距以年為單位,可
以觀察出該策略,從2002年到2008年9月有1862800的獲利,就波段程式而言
算是滿弱的,但是至少有獲利。根據這些資料發現,2003年的獲利賠了40800
,其他每年都賺有不錯獲利。


這張實驗主要是假設,如果這個想法是2001年寫出來的,那以當時的歷史資料
來最佳化,往後每年資料增加,就將歷史資料重新跑最佳化來跑下一年的績效
。上圖發現,獲利跟完整的歷史回測是有出入的,而且2003年反而是賺錢的,
賠最多的居然是2006與2007年,總績效卻降到1046400。


這個實驗以每三年做區間,往後每個一年,區間就跟著移動跑新的最佳化,來
驗證之後的績效,從這張圖發現,每年都有賺錢呢,雖然獲利依舊不如預期,
但是總績效也有1510000。


總結:
根據這次的實驗,我們發現最佳化的參數的確不適合應用在往後的市場上,但是
要如何取最佳化的方法,這又是另一個議題。
在這次簡單的實驗中,區間最佳化比累積長歷史區間最佳化的績效來的好,是否
都適合每種策略?或者把間距拉小用在5分K或更短是否也是有一樣的結果?這
就等之後的實驗在給大家報告了。

3 則留言: