DMI(ADX・ADXR)(計算式、チャート、エクセルVBAコード)テクニカル指標


2009年3月4日



 

DMI(ADX・ADXR)についてです。計算式、エクセルVBAコード、チャートを掲載

 

DMIはDirectional Movment Indexの略で、相場にトレンドがあるかどうか、どの程度方向性を持っているかを表す指標で、ロウソク足のはらみ線の判断なども使用して計算され、±DI、ADX、ADXRの4本の線からなります。

 

 

 

DMI(ADX・ADXR)の計算式

はらみ線の場合 +DM=0 -DM=0

はらみ線以外 ○現在の高値-直前の高値 > 直前の安値-現在の安値 なら

+DM=現在の高値-直前の高値

-DM=0

○現在の高値-直前の高値 < 直前の安値-現在の安値 なら

+DM=0

-DM=直前の安値-現在の安値

○現在の高値-直前の高値 = 直前の安値-現在の安値 なら

+DM=0

-DM=0

tr = 現在の高値-現在の安値、現在の高値-直前終値、直前の終値-現在の終値のうち一番大きいもの

+DI = 過去X本の+DMの平均/過去X本のtrの平均

-DI = 過去X本の-DMの平均/過去X本のtrの平均

ADX = DXのX本単純平均

ADXR = DXの2X 本単純移動平均

※DX = |+DI-(-DI)| / |+DI+(-DI)|  (|・・・|は絶対値)

 

 

DMI(ADX・ADXR)の判断

 

ADX,ADXRはトレンドの大きさ、1方向への移動の大きさを表し、±DIは上昇方向、下降方向へのトレンドの強さを示します。

相場の上昇時は、+DIは上昇、ADX、ADXRはその上昇の勢いと比例し、-DIは下降、下降時は-DIが上昇しADX、ADXRはその下降の勢いと比例し、+DIは下降するという形になります。

売買の判断としては、+DIと-DIのゴールデンクロスで買い、デッドクロスで売り、またはクロス後、下降中の±DIとADXやADXRとのクロスにてより正確なポイントを探ることも可能です。

 

 

DMI(ADX・ADXR)のチャート

 

< ±DI:14 ADX:9 ADXR:9 >

(水色:+DI 赤:-DI 黄色:ADX 緑:ADXR)

 

< ±DI:26 ADX:31 ADXR:31 >

(水色:+DI 赤:-DI 黄色:ADX 緑:ADXR)

 

 

DMI(ADX・ADXR)のエクセルVBAコード

 

‘※ エクセルの1列目(A列)に行番号、2列目(B列)に日時、
‘※ 3列目(C列)~6列目(F列)に始値・高値・安値・終値
‘********************************
‘ di :±DIの採用本数
‘ adx :ADXの採用本数
‘ adxr :ADXRの採用本数
‘ num:現在の行
‘ cell_dmp:+DM計算値書込み列
‘ cell_dmm:-DM計算値書込み列
‘ cell_tr:tr計算値書込み列
‘ cell_dip:+DI計算値書込み列
‘ cell_dim:-DI計算値書込み列
‘ cell_dx:DX計算値書込み列
‘ cell_adx:ADX計算値書込み列
‘ cell_adxr:ADXR計算値書込み列
‘********************************

If Cells(num – 1, 4) < Cells(num, 4) Then
f1 = Cells(num, 4) – Cells(num – 1, 4)
Else
f1 = 0
End If

If Cells(num – 1, 5) > Cells(num, 5) Then
f2 = Abs(Cells(num, 5) – Cells(num – 1, 5))
Else
f2 = 0
End If

If f1 < f2 Then Cells(num, cell_dmp) = 0 Else Cells(num, cell_dmp) = f1
If f1 > f2 Then Cells(num, cell_dmm) = 0 Else Cells(num, cell_dmm) = f2

Cells(num, cell_tr) = Application.Max(Cells(num, 4) – Cells(num, 5), _
Cells(num, 4) – Cells(num – 1, 6), Cells(num – 1, 6) _
– Cells(num, 5))

If num < 2 + di Then GoTo offend

adip = Application.Average(Range(Cells(num – (di – 1), cell_dmp), _
Cells(num, cell_dmp)))
adim = Application.Average(Range(Cells(num – (di – 1), cell_dmm), _
Cells(num, cell_dmm)))
atr = Application.Average(Range(Cells(num – (di – 1), cell_tr), _
Cells(num, cell_tr)))
Cells(num, cell_dip) = adip / atr * 100
Cells(num, cell_dim) = adim / atr * 100
Cells(num, cell_dx) = Abs(Cells(num, cell_dip) – Cells(num, cell_dim)) _
/ (Cells(num, cell_dip) + Cells(num, cell_dim)) * 100

If num < 2 + di + adx Then Exit Sub
Cells(num, cell_adx) = Application.Average _
(Range(Cells(num – (adx – 1), cell_dx), Cells(num, cell_dx)))

If num < 2 + di + adx + adxr Then Exit Sub
Cells(num, cell_adxr) = (Cells(num – (adxr – 1), cell_adx) + _
Cells(num, cell_adx)) / 2

 

 

テクニカル指標一覧

罫線談義一覧

(外部リンク)テクニカル指標(Wikipedia)