DMI大家很常用,不過跟大部份的趨勢指標一樣,踫到盤整就GG。 今天我想介紹一個VHF指標,這個指標能過濾盤整的情況,我們可以把這兩個指標合起來一起使用,來過濾掉盤整時DMI所出現的交易訊號。
DMI是一個很常用的指標,從下面這張圖可以很清楚地看到,它代表的每天多頭新攻佔的地盤,與空頭新斬獲間的角力。
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
),
d
Value0
(
0
), d
Value1
(
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;
d
Value0
=
100
* padm /
atr
;
d
Value1
=
100
* nadm /
atr
;
if
d
Value0
+ d
Value1
<>
0
then
dx =
AbsValue
(
100
* (d
Value0
- d
Value1
) / (d
Value0
+ d
Value1
));
radx = radx[
1
] + (dx - radx[
1
]) / length;
end
;
pdi_
value
= d
Value0
;
ndi_
value
= d
Value1
;
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;
這個腳本是用來挑出真正趨勢剛成形的標的市場
用這個策略來回測基金市場,回測報告如下
回測報告顯示,雖然勝率有六成多,但虧錢的時候損失不輕,如果要用這個策略,要善設停損,另外在檢視虧損比較嚴重的交易後發現,這個策略可能追到初昇段的高點,然後在拉回整理時被洗出場,因此,使用這個策略時,不妨再搭配其他短線指標,如果有超買現象時先別急著進場,等價格修正後回再進場。