因為這種K棒畫出來的K棒,如果我們是直覺的用圖表上呈現的開高低收去寫策略的話,跑出來的訊號就會跟我們想像的不一樣,訊號發生位置與價位都常常不同,原因很簡單 Heikin-Ashi 的開高低收不能在程式語法裡面直接寫 Open、High、Low、Close 去表示的。Heikin-Ashi 在圖表上的開高低收是有經過轉換的。
我參考這邊介紹的轉換定義做了範例給大家參考,如何讓 Heikin-Ashi bar chart 可以讓交易訊號與回測做到─所視即所得。
如果你很喜歡用這種K棒的話,我建議乾脆就把這個四個需要經過轉換的價格做成函數方便呼叫。自行製作四個數值型函數,名稱分別為 haClose、haOpen、haHigh、haLow ,這裡注意的是函數建立的順序要照剛剛的順序。四個函數程式碼分別如下:
函數haClose: haClose=(Open+High+Low+Close)/4; 函數haOpen: haOpen=iff(currentbar=1,Open,(haOpen[1]+haClose[1])/2); 函數haHigh: haHigh=Maxlist(High,haOpen,haClose); 函數haLow: haLow=Minlist(Low,haOpen,haClose);
如果你用 MultiCharts6 版的話,得要自己做這種K棒的圖來用,在 MultiCharts7 說是有內建了。做個指標(_Heikin-Ashi),程式碼:
if haClose > haOpen then
PlotPaintBar(haHigh,haLow,haOpen,haClose,"Heikin-Ashi",Red);
if haClose < haOpen then
PlotPaintBar(haHigh,haLow,haOpen,haClose,"Heikin-Ashi",Green);
如果你把這個 _Heikin-Ashi指標直接放到圖表上,大概就成了這副醜樣子=_=,它會跟原本的"蠟燭線"重疊在一起。
我們得先把原本圖表上K棒弄成...看不見,在沒放上 _Heikin-Ashi指標之前,先在圖表上本來的K線點兩下,隱藏它。
把舊的K棒設成隱藏線之後,圖表大概就成了全黑,接著再把 _Heikin-Ashi指標新增上來。你會發現這不是K"棒",是啊...其實我不知道要怎麼弄成蠟燭線啦,將就點吧XD:
到目前都是在做美工的動作,屬於「所視即所得」的前半段,視覺的部分。接下來我弄個簡單的交易策略做範例 ─ 用 Heikin-Ashi的開盤價做EMA,當 Heikin-Ashi的收盤站上EMA就在下一根K棒突破 Heikin-Ashi的高點作多,放空反之。訊號程式碼如下:
input:length(10);
var:haMA(0);
haMA=xAverage(haOpen,length);
if haClose > haMA then
Buy next bar haHigh stop;
if haClose < haMA then
Sellshort next bar haLow stop;
這樣你就能得到圖表上按照你想的規則進出訊號的位置與回測都一樣的交易策略了,不會是本來眼睛看圖表應該有訊號,卻沒有訊號,或是看來應該應該是在圖表上某個價位動作的,但是訊號的發生價位卻不一樣囉。
好吧,這個範例用到比較多的東西,我把這個範例用到的函數、指標、訊號都打包起來直接給你下載啦~不過,日後如果下載點失效的話,就請自己慢慢照上面順序做一遍吧。
下載連結:http://goo.gl/irrRi