DMI指標翻多(被VHF過濾過的DMI)

By | 2018-11-02

DMI大家很常用,不過跟大部份的趨勢指標一樣,踫到盤整就GG。 今天我想介紹一個VHF指標,這個指標能過濾盤整的情況,我們可以把這兩個指標合起來一起使用,來過濾掉盤整時DMI所出現的交易訊號。

DMI是一個很常用的指標,從下面這張圖可以很清楚地看到,它代表的每天多頭新攻佔的地盤,與空頭新斬獲間的角力。

 

dmii

DMI相關的數據,我們用了directionmovement這個函數來計算

// DirectionMovement function (for DMI相關指標)
// Input: length
// Return: pdi_value(+di), ndi_value(-di), adx_value(adx)
//
input:
 length(numericsimple),
 pdi_value(numericref),
 ndi_value(numericref),
 adx_value(numericref);
 
variable:
 padm(0), nadm(0), radx(0),
 atr(0), pdm(0), ndm(0), tr(0),
 dValue0(0), dValue1(0), dx(0),
 idx(0);
if currentbar = 1 then
 begin
 padm = close / 10000;
 nadm = padm;
 atr = padm * 5;
 radx = 20;
 end
else
 begin
 pdm = maxlist(High - High[1], 0);
 ndm = maxlist(Low[1] - Low, 0);
//先算出pdm及ndm
 if pdm < ndm then
 pdm = 0
 else
 begin
 if pdm > ndm then
 ndm = 0
 else
 begin
 pdm = 0;
 ndm = 0;
 end;
 end;
//那一邊的力量比較大,另一邊就以零來計算
 if Close[1] > High then
 tr = Close[1] - Low
 else
 begin
 if Close[1] < Low then
 tr = High - Close[1]
 else
 tr = High - Low;
 end;
//  計算true range
 padm = padm[1] + (pdm - padm[1]) / length;
 nadm = nadm[1] + (ndm - nadm[1]) / length;
 atr = atr[1] + (tr - atr[1]) / length;
 
 dValue0 = 100 * padm / atr;
 dValue1 = 100 * nadm / atr;
 
 if dValue0 + dValue1 <> 0 then
 dx = AbsValue(100 * (dValue0 - dValue1) / (dValue0 + dValue1));
 radx = radx[1] + (dx - radx[1]) / length;
 end;
pdi_value = dValue0;
ndi_value = dValue1;
adx_value = radx;

而透過上述的計算公式,我們可以了解,DMI是透過多空雙方的力量變化,來呈現何者佔上風。

但在盤整的時候,DMI會因為多方或空方一時的表現,而呈現相互交叉的鋸齒狀走勢,
這代表了多空拉鋸,但在這種時候,如果貿然也以+DI突破-DI為買進訊號,或者 -DI突破
+DI為買進訊號,那麼就很突易出現過度交易的現象。

VHF的全名是垂直水平過濾指標,它是把一段時間以來的最高點減去一段時間以來的最低點,然後去除以這段時間每天漲跌的絕對值的總和。

對應的腳本如下:

// XQ: VHF指標
//
input: Length(42);
Variable: hp(0), lp(0), numerator(0), denominator(0), _vhf(0);
SetInputName(1, "天數");
hp = highest(Close, Length);
lp = lowest(Close, Length);
numerator = hp - lp;
denominator = Summation(absvalue((Close - Close[1])), Length);
if denominator <> 0 then
 _vhf = numerator / denominator
else
 _vhf = 0;
Plot1(_vhf, "VHF");

由於這個指標的計算方式是這麼來的,所以它的值主要是受分子與分母的影響而在以下的情況時,會有較大的波動

1。當這段時間的新高或新低改變時,不管是創新高,還是創新低,VHF的分子都會變大。

2。 當股價變動突然變劇烈,這時分母變大,VHF會急遽變小

當股價陷入盤整時,由於分子跟分母都會變小,所以VHF就不會有很大的變大。

因此,當我們把DMI跟VHF兩個指標拿來一起看時,它的原則就是: 當DMI出現交易訊號時,如果VHF有明顯的波動,那麼這個訊號可信度較高,相反地,如果DMI出現交易訊號,而VHF沒有明顯變化,那麼這個盤還是盤整的機率比較大。

在基金投資上,把這兩個指標綜合起來,可以寫出以下的腳本

input: Length(24, "天數");
Variable: hp(0), lp(0), numerator(0), denominator(0), _vhf(0);

 
hp = highest(Close, Length);
lp = lowest(Close, Length);
 
numerator = hp - lp;
denominator = Summation(absvalue((Close - Close[1])), Length);
 
if denominator <> 0 then
 _vhf = numerator / denominator
else
 _vhf = 0;

 
input:period(14); setinputname(1,"計算期數");
variable: pdi(0), ndi(0), adx_value(0);
DirectionMovement(period, pdi, ndi, adx_value);

 

if pdi>pdi[1] and ndi<ndi[1] and pdi crosses over ndi
and rsi(_vhf,5)>70

then ret=1;

這個腳本是用來挑出真正趨勢剛成形的標的市場

用這個策略來回測基金市場,回測報告如下

2018110201

回測報告顯示,雖然勝率有六成多,但虧錢的時候損失不輕,如果要用這個策略,要善設停損,另外在檢視虧損比較嚴重的交易後發現,這個策略可能追到初昇段的高點,然後在拉回整理時被洗出場,因此,使用這個策略時,不妨再搭配其他短線指標,如果有超買現象時先別急著進場,等價格修正後回再進場。