在老鳥的眼中,本篇文所談的東西其實不值一訕,但實際上也還有許多人不知道 Set開頭指令這類 ThisBar 模式運作其實是暗藏陷阱的!
我舉一個很簡單的例子做範例說明。策略描述:當均線往上時往上觸碰現在K棒高點時作多、當均線往下時往下觸碰現在K棒低點時放空,另外加上移動出場─當獲利大於等於10點後,折返獲利1%就出場。
程式碼如下:
input:length(30);
if Average(C,length) > Average(C,length)[1] and marketposition >=0 then
buy next bar High stop;
if Average(C,length) < Average(C,length)[1] and marketposition <=0 then
sellshort next bar Low stop;
setpercenttrailing(10*bigpointvalue,1);
設定交易成本(滑價+稅費)為每口單邊 600元,可以如下的回測績效曲線。哇靠,這麼容易就賺錢啊耶!一口喔,2001~2012 累積獲利千萬以上,這可不是那種不算交易成本的爛方法呢 XD
接著,我們來跑一下均線的參數最佳化,看看有沒有參數績效高原的現象?從以下的 NetProfit 的遞增排列看到第一行(淨利最差)都有 900萬以上的獲利,可以想見這個參數從 5~100 的均線策略通通可以獲利。你有這麼穩健的聖杯嗎?程式碼都免費送給你了 XD
如果你在開發交易策略的時候看到這個現象就很興奮的以為自己發現聖杯的話... 錢有這麼好賺就好了啦 =_=。這樣的回測報表一整個就是垃圾!因為那些出場點位幾乎可以說都是做不到的!!下面這張訊號圖,空心三角形就是出場位置的標示,看看那個出場標示在哪邊?沒錯,就是K棒的最高點,請想一想這有沒有問題?我們定下的出場除了多空翻單外,就是移動出場,既然移動出場要有折返才會出場,那出場點在K棒的最高點有可能嗎?
這篇簡單的範例不是想指出用很靈敏的移動出場是不可行的,而是我們得知道要如何讓軟體告訴我,這樣的移動出場策略,真實運作時會是怎樣的狀況?至於,造成這個垃圾回測報表的原因,我就不多敘述了。直接告訴你如何呈現實況:細部回測─Tick。
一樣的策略一樣的參數,當把細部回測打開後,回測報表完全不一樣了。很不幸的,這個聖杯立馬就變成了...靠杯。
值得一提的是,你要打開細部回測這個功能最好先確定你的電腦效能夠力,最好是用 x64 的版本,因為這會把整個 Tick 資料(大約 10G)Load 進 RAM 裡面去,每個 Tick 都去做測試,而不只是拿K棒的開高低收去做回測而已。
因此,如果當你得到一個很棒回測績效的策略,按奈一下雀躍的心情,強烈建議你,先把"細部回測"打開看看吧。