認識HMA指標

HMA (Hull Moving Average) Hull 移動平均線,是一條經過特殊處理移動平均線,和一般傳統的移動平均線計算方式不同。通常一般的看盤軟體找不到這個指標,在Multicharts裡面內建指標也沒有內建函數。必須自行新增。

函數如下

Inputs: price(NumericSeries), length(NumericSimple);
Vars: halvedLength(0), sqrRootLength(0);
if ((ceiling(length / 2) – (length / 2)) <= 0.5) then halvedLength = ceiling(length / 2) else halvedLength = floor(length / 2);
if ((ceiling(SquareRoot(length)) – SquareRoot(length)) <= 0.5) then sqrRootLength = ceiling(SquareRoot(length)) else sqrRootLength = floor(SquareRoot(length));
Value1 = 2 * WAverage(price, halvedLength);
Value2 = WAverage(price, length);
Value3 = WAverage((Value1 – Value2), sqrRootLength);
HMA=Value3;

n週期的Hull平均線是以「n÷2日WMA乘以2倍,然後減掉n日WMA,將所得結果以n的平方根日WMA平均」計算。從公式的定義來看,比較靠近近期的收盤價這一半給予比較高的權重 讓均線看起來比較貼近行情,改善了傳統均線反應過慢的缺點

利用HMA來開發台指期交易策略 (希望使用的最佳化參數在2個以內,年化風報比大於1)

當收盤價站上HMA 就買進多單 跌破HMA就買進空單,這是均線基本的操作原理,先看看原型的表現如何

套用在60分鐘K 程式碼如下

if Close cross over HMA(c,HullLen) then buy next bar at market;
if Close cross under HMA(c,HullLen) then sellshort next bar at market;

發現雜訊比較多 交易次數也太頻繁

稍微改良 必須交叉往上且突破前一根K棒高點才做多,跌破HMA且破前一根K棒低點才放空

if Close cross over HMA(c,HullLen) then buy next bar at high stop;
if Close cross under HMA(c,HullLen) then sellshort next bar at low stop

似乎變得比較平滑

把周期拉長到90分K ,利用Multicharts 的最佳化功能 重新優化

看起來的權益曲線會比較平滑 最大策略虧損報酬有來到9 平均的年化風報比是1.5

缺點是交易次數太多 可能交易成本侵蝕了許多獲利

我認為策略的核心邏輯很簡單 HMA有別傳統的均線,相對反應比較靈敏,使用長周期的K棒 似乎比較少雜訊,只用到了一個最佳化的參數

把做多和做空分開回測

空單的權益曲線比較鳥 ,也許 選擇只做多不做空,也是一種改良的策略

程式碼只有短短幾行 另外需要自行加入停損停利或是結算日平倉

if C > HMA(c,HullLen) then buy next bar at High stop;
if C < HMA(c,HullLen) then sellshort next bar at Low stop;

到底是指標有價值 還是邏輯本身正確? 還是剛好就遇到了對的行情?

有更理想的做法或套用到其他商品也有好表現 請記得和我分享!!

分享你的喜愛