2014年10月25日 星期六

直接採用 Heikin-Ashi 回測的問題

過去,我們已經知道直接採用 Heikin-Ashi 圖表來做交易策略的回測報告,基本上跟垃圾是沒什麼兩樣的。因為我們直接採用該圖表 Open, High, Low, Close 去做的規則或是進場判斷,所得價位根本就不存在真實的世界,一個不存在真實世界的價位所記錄起來回測報告,如果這不是垃圾,什麼才是垃圾呢 XD

以下,所有的測試與範例,都用這個 code 來試驗。規則很簡單,就是用最近的三根K棒,去判斷是否發生"轉彎"?有就把轉彎的高點與低點記錄下來,而後等 K棒的收盤價大於轉彎高點就買進作多, K棒收盤價小於轉彎低點就賣出放空。

var:toShort(0), toBuy(999999);


if H<=H[1] and H[1]>=H[2] then begin
  toBuy= highest(H,3);
  toShort= 0;
end;

if L>=L[1] and L[1]<=L[2] then begin
  toShort= lowest(L,3);
  toBuy= 999999;
end;  

if marketposition<=0 and C>toBuy then  
  buy next bar market;
if marketposition>=0 and C<toShort then  
  sellshort next bar market;


讓我們先用 Heikin-Ashi 圖表來看看這簡單規則,能有多好的回測績效?以下測試時間週期都定用 300秒,避免 Tick base bar 的歷史資料其實無法盤中取得的問題。交易成本每口單邊500元,資料區間:2008/01/01~2014/10/25。


苦惱於沒有表現優秀的簡單策略嗎?別說我小氣,這個就送給你了 ^^。不過,要是你真的拿去交易下單,發生的任何損益都與我無關啊!

那麼... 為什麼直接用 Heikin-Ashi 做出的回測報表會是垃圾呢?讓我們把 Heikin-Ashi 圖表與傳統 K棒(真實世界)圖表並列做一下比較就很清楚了。看看下圖,我們測試的策略都是動作在 next bar market,所以訊號發生的價格就會是條件成立的下一根的開盤價。Heikin-Ashi 的回測卻看到多翻空在 8731,而真實世界的報價,訊號發生點卻在...8717!!!更妙的是,條件成立的下根K棒(訊號發生),最高點也不過 8719 @_@,我都不知道要如何在這根K棒,才能跟我下單的期貨商要到 8731 的空單成交價 XD



以上這樣的回測訊號價格,發生在每一筆回測的交易明細中。因此,如果人家單純給你看 Heikin-Ashi 圖表上很讚訊號,說真的... 看爽的而已,說它是純欣賞都算是過高的評語。因為它的訊號價位點不存在真實世界,這一類的回測報表有多好都沒有意義,基本上就是個垃圾報表。

看到這裡,希望你能了解,不是掛上程式交易就以為是絕對執行的保證工具是中性的,用來做擬真的歷史評估是為了交易,或許有人有其不同的目的,不予置評。但有一句老話:「害人之心不可有,防人之心不可無」。

但是,類似 Heikin-Ashi ,其實 MultiCharts 還內建了多種非傳統 K棒圖表,它們不是沒有用處,而是...怎麼用?下一篇,我們繼續以 Heikin-Ashi 來做示範,如何用這類的特殊圖表做接近真實的擬真回測,我們是可以用非傳統圖表來開發策略的。