DirMovement系列函數(shù)包括函數(shù)DirMovement、DMI、DMIMinus、DMIPlus、ADX、AvgTrueRange等函數(shù),詳細(xì)的請(qǐng)看表1 DirMovement系列函數(shù),它們是由威爾斯·懷爾德(Welles Wilder)創(chuàng)造出來(lái)的。
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 表1 DirMovement系列函數(shù)
??DirMovement系列??功能DirMovement全稱Directional Movement,被函數(shù)DMI、DMIMinus、DMIPlus、ADX和Volatility調(diào)用DMI計(jì)算DX指數(shù)(Directional Movement Index,動(dòng)向指數(shù))DMICustom和函數(shù)DMI相同,不同的是多了三個(gè)價(jià)格輸入?yún)?shù)DMIMinus計(jì)算-DI指數(shù)(負(fù)向指數(shù))DMIMinusCustom和函數(shù)DMIMinus相同,不同的是多了三個(gè)價(jià)格輸入?yún)?shù)DMIPlus計(jì)算+DI指數(shù)(正向指數(shù))DMIPlusCustom和函數(shù)DMIPlus相同,不同的是多了三個(gè)價(jià)格輸入?yún)?shù)ADX計(jì)算ADX指數(shù)(Average Directional Movement Index,平均動(dòng)向指數(shù))ADXCustom和函數(shù)ADX相同,不同的是多了三個(gè)價(jià)格輸入?yún)?shù)ADXClassic和函數(shù)ADX相同,不同的是ADXClassic對(duì)結(jié)果取整ADXCustomClassic和函數(shù)ADXCustom相同,不同的是ADXCustomClassic對(duì)結(jié)果取整ADXR計(jì)算(ADX(len)+ADX(len)[len-1])/2的值,len需要計(jì)算bar的數(shù)量ADXRCustom和函數(shù)ADXR相同,不同的是多了三個(gè)價(jià)格輸入?yún)?shù)ADXRClassic和函數(shù)ADXR相同,不同的是ADXRClassic對(duì)結(jié)果取整ADXRCustomClassic和函數(shù)ADXRCustom相同,不同的是ADXRCustomClassic對(duì)結(jié)果取整Volatility計(jì)算平均真實(shí)波幅,使用加權(quán)平均計(jì)算平均真實(shí)波幅XAverageOrig懷爾德平滑(Wilder’s Smoothing),以1/len和1-1/len為權(quán)重的加權(quán)移動(dòng)平均TrueHigh當(dāng)根bar的最高價(jià)與前一根bar的收盤價(jià),取最高值TrueLow當(dāng)根bar的最低價(jià)與前一根bar的收盤價(jià),取最低值TrueRange計(jì)算真實(shí)波幅,TrueHigh-TrueLowXAverage指數(shù)移動(dòng)平均函數(shù)TrueRangeCustom和TrueRange相同,不同的是多了三個(gè)價(jià)格輸入?yún)?shù)AvgTrueRange平均真實(shí)波幅(Average True Range,簡(jiǎn)稱ATR指數(shù)),使用簡(jiǎn)單平均函數(shù)計(jì)算平均真實(shí)波幅表1中總共有23個(gè)MC內(nèi)置的函數(shù),大部分是通過(guò)直接或間接調(diào)用DirMovement來(lái)計(jì)算,所以我們只需要將DirMovement函數(shù)背后的原理及邏輯弄清楚,其它的函數(shù)也就會(huì)很清楚,進(jìn)一步,由這些函數(shù)組合得到的指標(biāo)也能很快掌握并且熟練應(yīng)用。下面主要通過(guò)對(duì)ADX指數(shù)的計(jì)算來(lái)介紹DirMovement函數(shù)的邏輯,然后再介紹其它函數(shù)及相同功能函數(shù)之間的比較。
1. ADX絕大多數(shù)指標(biāo)的計(jì)算都是以每一日的收盤價(jià)的走勢(shì)及漲跌幅的累計(jì)數(shù)計(jì)算出不同的分析數(shù)據(jù),其不足之處在于忽略了每一日的高低價(jià)之間的波動(dòng)幅度。比如某個(gè)股票的兩天的收盤價(jià)可能是一樣的,但是其中一天的波動(dòng)幅度只有2%,而另一天的波動(dòng)幅度是10%,如果僅僅考慮收盤價(jià)而忽略了每天市場(chǎng)的價(jià)格波動(dòng)幅度,那么并不能很好的判斷和分析市場(chǎng)行情。ADX指數(shù)的出現(xiàn)彌補(bǔ)了這一不足,它主要用于分析市場(chǎng)的漲跌力度,但并不反應(yīng)市場(chǎng)漲跌的方向;ADX全稱為Average Directional Movement Index,是對(duì)Directional Movement Index(動(dòng)向指數(shù),簡(jiǎn)稱DX)的加權(quán)平均,而DX是市場(chǎng)正向波動(dòng)和市場(chǎng)負(fù)向波動(dòng)的絕對(duì)差除以市場(chǎng)正向波動(dòng)和市場(chǎng)負(fù)向波動(dòng)之和得到的,其中市場(chǎng)正向波動(dòng)和市場(chǎng)負(fù)向波動(dòng)分別由+DI和-DI指數(shù)(前面的”+“和”-“只是代表方向,并不起到數(shù)學(xué)符號(hào)的作用)衡量。當(dāng)市場(chǎng)出現(xiàn)一波上漲或者下跌時(shí),ADX指數(shù)會(huì)隨之上升,在實(shí)盤操作中,常將ADX與+DI和-DI指標(biāo)結(jié)合起來(lái)判斷市場(chǎng)買賣點(diǎn)。
1.2 ADX指數(shù)計(jì)算邏輯
通過(guò)當(dāng)根bar的最高價(jià)與前一根bar的最高價(jià)進(jìn)行比較,計(jì)算得到當(dāng)根bar的正向波動(dòng)值+DM=max(high-high[1],0);通過(guò)前一根bar的最低價(jià)與當(dāng)根bar的最低價(jià)進(jìn)行比較,計(jì)算得到當(dāng)根bar的負(fù)向波動(dòng)值-DM=max(low[1]-low,0);但是每一根bar只允許有一個(gè)波動(dòng)方向,也就是說(shuō)只允許有一個(gè)波動(dòng)值,不能同時(shí)存在正向波動(dòng)值和負(fù)向波動(dòng)值,這時(shí),我們需要對(duì)+DM和-DM進(jìn)行比較,取最大值作為當(dāng)根bar的波動(dòng)值,波動(dòng)的方向和最大波動(dòng)方向一致,另一個(gè)波動(dòng)值賦值為0;舉例說(shuō)明,如果計(jì)算出+DM=2.3,-DM=2.1,那么+DM就是當(dāng)根bar的波動(dòng)值,方向是正向波動(dòng),同時(shí)-DM重新賦值為0。
在計(jì)算完當(dāng)根bar的波動(dòng)之后,還需要計(jì)算當(dāng)根bar的真實(shí)波動(dòng)幅度,真實(shí)波動(dòng)幅度和之前的正向波動(dòng)及負(fù)向波動(dòng)不一樣,真實(shí)波動(dòng)幅度沒有方向,只是用來(lái)衡量當(dāng)根bar價(jià)格波動(dòng)幅度,簡(jiǎn)稱TR(True Range);它是通過(guò)max(high,close[1])-min(low,close[1])計(jì)算得到。將TR進(jìn)行移動(dòng)平均計(jì)算之后,可以得到Volatility和ATR,即平均真實(shí)波動(dòng)幅度(Average True Range),具體使用加權(quán)平均還是指數(shù)平均因策略而異,ADX中計(jì)算的Volatility是使用XAverageOrig函數(shù)進(jìn)行計(jì)算的。
對(duì)于不同的商品合約及不同的周期,每一根bar正向波動(dòng)和負(fù)向波動(dòng)值差異很大,為了使用統(tǒng)一的標(biāo)準(zhǔn)對(duì)市場(chǎng)進(jìn)行判斷分析,需要先對(duì)正向波動(dòng)、負(fù)向波動(dòng)及真實(shí)波動(dòng)幅度進(jìn)行加權(quán)移動(dòng)平均計(jì)算,然后通過(guò)平均正向波動(dòng)與平均真實(shí)波幅的比值得到正向指數(shù)+DI,通過(guò)平均負(fù)向波動(dòng)與平均真實(shí)波幅的比值得到負(fù)向指數(shù)-DI,這里的平均計(jì)算統(tǒng)一使用XAverageOrig函數(shù)進(jìn)行計(jì)算,平均計(jì)算使用多少根bar來(lái)計(jì)算沒有統(tǒng)一的規(guī)定(本文以len代替)。
+DI和-DI計(jì)算出來(lái)之后,可以很容易得到DX指數(shù)、ADX指數(shù)和ADXR指數(shù)。DX=|(+DI)-(-DI)|/((+DI)+(-DI)),這里+DI和-DI都被括起來(lái)了;ADX是DX的加權(quán)移動(dòng)平均;ADXR=(ADX+ADX[len-1])*0.5;下面通過(guò)DirMovement函數(shù)的代碼來(lái)進(jìn)一步嚴(yán)謹(jǐn)?shù)慕榻BADX指數(shù)計(jì)算的邏輯。
1.3 DirMovement函數(shù)代碼DirMovement函數(shù)代碼在上面已經(jīng)介紹過(guò)了,這個(gè)函數(shù)的返回值沒有意義,關(guān)鍵是傳址參數(shù)的使用。
DMI函數(shù)內(nèi)部調(diào)用了DirMovement,DMI函數(shù)的返回值就是DX指數(shù)的值;DMI(len)的參數(shù)是需要計(jì)算的bar的數(shù)目len,然后返回DX指數(shù)的值。
DMICustom函數(shù)的功能及內(nèi)部的代碼邏輯和DMI函數(shù)一樣,不同的是多了三個(gè)價(jià)格參數(shù),DMICustom(high,low,close,len)的參數(shù)分別是最高價(jià)、最低價(jià)、收盤價(jià)和bar的數(shù)目len,返回DX指數(shù)的值。
DMIMinus函數(shù)內(nèi)部調(diào)用了DirMovement,它的返回值就是-DI指數(shù)的值;DMIMinus(len)的參數(shù)是需要計(jì)算的bar的數(shù)目len,然后返回-DI指數(shù)的值。
DMIMinusCustom函數(shù)的功能及內(nèi)部的代碼邏輯和DMIMinus函數(shù)完全一樣,不同的是多了三個(gè)價(jià)格參數(shù),DMIMinusCustom(high,low,close,len)的參數(shù)分別是最高價(jià)、最低價(jià)、收盤價(jià)和bar的數(shù)目len,返回-DI指數(shù)的值。
ADX函數(shù)調(diào)用了DirMovement函數(shù);ADX(len)的參數(shù)是需要計(jì)算的bar的數(shù)目len,然后返回ADX指數(shù)的值。
ADXCustom函數(shù)的功能及內(nèi)部代碼邏輯和ADX函數(shù)完全一樣,不同的是多了三個(gè)價(jià)格參數(shù);ADXCustom(high,low,close,len)的參數(shù)分別是最高價(jià)、最低價(jià)、收盤價(jià)和bar的數(shù)目len,返回ADX指數(shù)的值。
ADXClassic函數(shù)功能及計(jì)算邏輯和ADX函數(shù)是一樣,參數(shù)也是一樣的,不同的是代碼的編寫不一樣;ADXClassic函數(shù)調(diào)用了DMI函數(shù)來(lái)計(jì)算DX指數(shù),然后再對(duì)DX指數(shù)使用加權(quán)移動(dòng)平均來(lái)計(jì)算ADX指數(shù)的值,最后再使用intportion關(guān)鍵字對(duì)ADX指數(shù)取整;ADXClassic(len)的參數(shù)是需要計(jì)算的bar的數(shù)目len,然后返回ADX指數(shù)的取整值(即將小數(shù)點(diǎn)之后的值去除)。
ADXCustomClassic函數(shù)是ADXClassic和ADXCustom的結(jié)合,即使用了三個(gè)價(jià)格參數(shù),然后在內(nèi)部調(diào)用了DMI函數(shù)來(lái)計(jì)算DX指數(shù),然后再對(duì)DX指數(shù)使用加權(quán)移動(dòng)平均來(lái)計(jì)算ADX指數(shù)的值,最后再使用關(guān)鍵字intportion對(duì)ADX指數(shù)取整數(shù)值;ADXCustomClassic(high,low,close,len)的參數(shù)是最高價(jià)、最低價(jià)、收盤價(jià)和需要計(jì)算的bar的數(shù)目len。
ADXR函數(shù)調(diào)用了DirMovement函數(shù);ADXR(len)的參數(shù)是需要計(jì)算的bar的數(shù)目len,然后返回ADXR指數(shù)的值。
ADXRCustom、ADXRClassic、ADXRCustomClassic函數(shù)的計(jì)算、使用及相互區(qū)別可以參考ADX。
XAverageOrig是加權(quán)移動(dòng)平均函數(shù);XAverageOrig(pricevalue,len)的參數(shù)分別是價(jià)格值和需要計(jì)算的bar的數(shù)目len,權(quán)重分別為1-1/len和1/len,函數(shù)返回pricevalue的加權(quán)平均值,即XAverageOrig=(1-1/len)*XAverageOrig[1]+1/len*pricevalue。
TrueHigh函數(shù)返回當(dāng)根bar的最高價(jià)與前一根bar的收盤價(jià)的最高值,這個(gè)函數(shù)沒有參數(shù)。
TrueLow函數(shù)返回當(dāng)根bar的最低價(jià)與前一根bar的收盤價(jià)的最低值,這個(gè)函數(shù)沒有參數(shù)。
TrueRange函數(shù)返回當(dāng)根bar的真實(shí)波動(dòng)幅度,TrueRange=TrueHigh-TrueLow,這個(gè)函數(shù)沒有參數(shù)。
TrueRangeCustom函數(shù)的邏輯和TrueRange的計(jì)算邏輯是一樣的,不同的是它有三個(gè)價(jià)格參數(shù);TrueRangeCustom(high,low,close)的參數(shù)是當(dāng)根bar的最高價(jià)、最低價(jià)和收盤價(jià),返回當(dāng)根bar的真實(shí)波動(dòng)幅度。
Volatility的值等于XAverageOrig(TrueRange,len),這個(gè)函數(shù)的內(nèi)部調(diào)用函數(shù)XAverageOrig對(duì)真實(shí)波動(dòng)幅度進(jìn)行加權(quán)移動(dòng)平均計(jì)算;Volatility(len)的參數(shù)是需要計(jì)算的bar的數(shù)目len,返回平均真實(shí)波動(dòng)幅度。
XAverage是指數(shù)移動(dòng)平均函數(shù),它是一種特殊的加權(quán)平均函數(shù);XAverage(pricevalue,len)的參數(shù)分別是價(jià)格值和需要計(jì)算的bar的數(shù)目,返回pricevalue的指數(shù)移動(dòng)平均值,即XAverage=(len-1)/(len+1)*XAverage[1]+2/(len+1)*pricevalue。
AvgTrueRange函數(shù)調(diào)用Average函數(shù)計(jì)算平均真實(shí)波動(dòng)幅度,即先累加真實(shí)波動(dòng)幅度,然后再除以數(shù)目;AvgTrueRange(len)的參數(shù)是需要計(jì)算的bar的數(shù)目,返回平均真實(shí)波動(dòng)幅度值。