當DMI遇上VHF

By | 2016-04-06

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

 

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

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

1// DirectionMovement function (for DMI相關指標)
2// Input: length
3// Return: pdi_value(+di), ndi_value(-di), adx_value(adx)
4//
5input: 
6 length(numericsimple),
7 pdi_value(numericref),
8 ndi_value(numericref),
9 adx_value(numericref);
10 
11variable:
12 padm(0), nadm(0), radx(0),
13 atr(0), pdm(0), ndm(0), tr(0),
14 dValue0(0), dValue1(0), dx(0),
15 idx(0);
16
17if currentbar = 1 then
18 begin
19 padm = close / 10000;
20 nadm = padm;
21 atr = padm * 5;
22 radx = 20;
23 end
24else
25 begin
26 pdm = maxlist(High - High[1], 0);
27 ndm = maxlist(Low[1] - Low, 0);
28//先算出pdm及ndm
29 if pdm < ndm then
30 pdm = 0
31 else 
32 begin
33 if pdm > ndm then
34 ndm = 0
35 else
36 begin
37 pdm = 0;
38 ndm = 0;
39 end; 
40 end;
41//那一邊的力量比較大,另一邊就以零來計算
42 if Close[1] > High then
43 tr = Close[1] - Low
44 else 
45 begin
46 if Close[1] < Low then
47 tr = High - Close[1]
48 else 
49 tr = High - Low;
50 end;
51//  計算true range
52 padm = padm[1] + (pdm - padm[1]) / length;
53 nadm = nadm[1] + (ndm - nadm[1]) / length;
54 atr = atr[1] + (tr - atr[1]) / length;
55 
56 dValue0 = 100 * padm / atr;
57 dValue1 = 100 * nadm / atr;
58 
59 if dValue0 + dValue1 <> 0 then
60 dx = AbsValue(100 * (dValue0 - dValue1) / (dValue0 + dValue1));
61
62 radx = radx[1] + (dx - radx[1]) / length;
63 end;
64
65pdi_value = dValue0;
66ndi_value = dValue1;
67adx_value = radx;

 

 

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

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

這時候市場老手們就引進了VHF這個指標,用它來過濾掉一些DMI在盤整時可能出現的假訊號。

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

對應的腳本如下:

1// XQ: VHF指標
2//
3input: Length(42);
4Variable: hp(0), lp(0), numerator(0), denominator(0), _vhf(0);
5
6SetInputName(1, "天數");
7
8hp = highest(Close, Length);
9lp = lowest(Close, Length);
10
11numerator = hp - lp;
12denominator = Summation(absvalue((Close - Close[1])), Length);
13
14if denominator <> 0 then
15 _vhf = numerator / denominator
16else
17 _vhf = 0;
18
19Plot1(_vhf, "VHF");

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

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

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

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

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

下圖是加權指數過去一陣子與這兩個指標的對照圖

040601

大家不妨對照一下看看是否加了VHF之後的DMI,對於大盤的真正轉折點更能有效的呈現出來。

下圖是現在這兩個指標與大盤之間的關係,敬供參考。

040602