MC的DirMovement系列函數(shù)[MC公式]
相關(guān)標(biāo)簽:期貨與期權(quán)套利策略 、 期貨期權(quán)組合策略 、 期權(quán)與期貨的區(qū)別 、 期貨期權(quán)學(xué)院 、 期貨期權(quán)入門 、 期貨期權(quán)遠(yuǎn)期 、 期貨與期權(quán)論文 、 商品期貨期權(quán) 、 豆粕期貨期權(quán) 、 期權(quán)對沖期貨 、 期權(quán)和期貨優(yōu)劣 、 期貨期權(quán)交易 、 期貨期權(quán)實(shí)訓(xùn) 、 期貨期權(quán)的比較 、 期貨投資與期權(quán) 、 本帖最后由 Alex 于 2017-7-25 20:19 編輯
DirMovement系列函數(shù)
DirMovement系列函數(shù)包括函數(shù)DirMovement、DMI、DMIMinus、DMIPlus、ADX、AvgTrueRange等函數(shù),詳細(xì)的請看表1 DirMovement系列函數(shù),它們是由威爾斯·懷爾德(Welles Wilder)創(chuàng)造出來的。
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? 表1 DirMovement系列函數(shù)
??DirMovement系列??功能DirMovement全稱Directional Movement,被函數(shù)DMI、DMIMinus、DMIPlus、ADX和Volatility調(diào)用DMI計算DX指數(shù)(Directional Movement Index,動向指數(shù))DMICustom和函數(shù)DMI相同,不同的是多了三個價格輸入?yún)?shù)DMIMinus計算-DI指數(shù)(負(fù)向指數(shù))DMIMinusCustom和函數(shù)DMIMinus相同,不同的是多了三個價格輸入?yún)?shù)DMIPlus計算+DI指數(shù)(正向指數(shù))DMIPlusCustom和函數(shù)DMIPlus相同,不同的是多了三個價格輸入?yún)?shù)ADX計算ADX指數(shù)(Average Directional Movement Index,平均動向指數(shù))ADXCustom和函數(shù)ADX相同,不同的是多了三個價格輸入?yún)?shù)ADXClassic和函數(shù)ADX相同,不同的是ADXClassic對結(jié)果取整ADXCustomClassic和函數(shù)ADXCustom相同,不同的是ADXCustomClassic對結(jié)果取整ADXR計算(ADX(len)+ADX(len)[len-1])/2的值,len需要計算bar的數(shù)量ADXRCustom和函數(shù)ADXR相同,不同的是多了三個價格輸入?yún)?shù)ADXRClassic和函數(shù)ADXR相同,不同的是ADXRClassic對結(jié)果取整ADXRCustomClassic和函數(shù)ADXRCustom相同,不同的是ADXRCustomClassic對結(jié)果取整Volatility計算平均真實(shí)波幅,使用加權(quán)平均計算平均真實(shí)波幅XAverageOrig懷爾德平滑(Wilder’s Smoothing),以1/len和1-1/len為權(quán)重的加權(quán)移動平均TrueHigh當(dāng)根bar的最高價與前一根bar的收盤價,取最高值TrueLow當(dāng)根bar的最低價與前一根bar的收盤價,取最低值TrueRange計算真實(shí)波幅,TrueHigh-TrueLowXAverage指數(shù)移動平均函數(shù)TrueRangeCustom和TrueRange相同,不同的是多了三個價格輸入?yún)?shù)AvgTrueRange平均真實(shí)波幅(Average True Range,簡稱ATR指數(shù)),使用簡單平均函數(shù)計算平均真實(shí)波幅
表1中總共有23個MC內(nèi)置的函數(shù),大部分是通過直接或間接調(diào)用DirMovement來計算,所以我們只需要將DirMovement函數(shù)背后的原理及邏輯弄清楚,其它的函數(shù)也就會很清楚,進(jìn)一步,由這些函數(shù)組合得到的指標(biāo)也能很快掌握并且熟練應(yīng)用。下面主要通過對ADX指數(shù)的計算來介紹DirMovement函數(shù)的邏輯,然后再介紹其它函數(shù)及相同功能函數(shù)之間的比較。
1. ADX
1.1 ADX簡介
絕大多數(shù)指標(biāo)的計算都是以每一日的收盤價的走勢及漲跌幅的累計數(shù)計算出不同的分析數(shù)據(jù),其不足之處在于忽略了每一日的高低價之間的波動幅度。比如某個股票的兩天的收盤價可能是一樣的,但是其中一天的波動幅度只有2%,而另一天的波動幅度是10%,如果僅僅考慮收盤價而忽略了每天市場的價格波動幅度,那么并不能很好的判斷和分析市場行情。ADX指數(shù)的出現(xiàn)彌補(bǔ)了這一不足,它主要用于分析市場的漲跌力度,但并不反應(yīng)市場漲跌的方向;ADX全稱為Average Directional Movement Index,是對Directional Movement Index(動向指數(shù),簡稱DX)的加權(quán)平均,而DX是市場正向波動和市場負(fù)向波動的絕對差除以市場正向波動和市場負(fù)向波動之和得到的,其中市場正向波動和市場負(fù)向波動分別由+DI和-DI指數(shù)(前面的”+“和”-“只是代表方向,并不起到數(shù)學(xué)符號的作用)衡量。當(dāng)市場出現(xiàn)一波上漲或者下跌時,ADX指數(shù)會隨之上升,在實(shí)盤操作中,常將ADX與+DI和-DI指標(biāo)結(jié)合起來判斷市場買賣點(diǎn)。
1.2 ADX指數(shù)計算邏輯
通過當(dāng)根bar的最高價與前一根bar的最高價進(jìn)行比較,計算得到當(dāng)根bar的正向波動值+DM=max(high-high[1],0);通過前一根bar的最低價與當(dāng)根bar的最低價進(jìn)行比較,計算得到當(dāng)根bar的負(fù)向波動值-DM=max(low[1]-low,0);但是每一根bar只允許有一個波動方向,也就是說只允許有一個波動值,不能同時存在正向波動值和負(fù)向波動值,這時,我們需要對+DM和-DM進(jìn)行比較,取最大值作為當(dāng)根bar的波動值,波動的方向和最大波動方向一致,另一個波動值賦值為0;舉例說明,如果計算出+DM=2.3,-DM=2.1,那么+DM就是當(dāng)根bar的波動值,方向是正向波動,同時-DM重新賦值為0。
在計算完當(dāng)根bar的波動之后,還需要計算當(dāng)根bar的真實(shí)波動幅度,真實(shí)波動幅度和之前的正向波動及負(fù)向波動不一樣,真實(shí)波動幅度沒有方向,只是用來衡量當(dāng)根bar價格波動幅度,簡稱TR(True Range);它是通過max(high,close[1])-min(low,close[1])計算得到。將TR進(jìn)行移動平均計算之后,可以得到Volatility和ATR,即平均真實(shí)波動幅度(Average True Range),具體使用加權(quán)平均還是指數(shù)平均因策略而異,ADX中計算的Volatility是使用XAverageOrig函數(shù)進(jìn)行計算的。
對于不同的商品合約及不同的周期,每一根bar正向波動和負(fù)向波動值差異很大,為了使用統(tǒng)一的標(biāo)準(zhǔn)對市場進(jìn)行判斷分析,需要先對正向波動、負(fù)向波動及真實(shí)波動幅度進(jìn)行加權(quán)移動平均計算,然后通過平均正向波動與平均真實(shí)波幅的比值得到正向指數(shù)+DI,通過平均負(fù)向波動與平均真實(shí)波幅的比值得到負(fù)向指數(shù)-DI,這里的平均計算統(tǒng)一使用XAverageOrig函數(shù)進(jìn)行計算,平均計算使用多少根bar來計算沒有統(tǒng)一的規(guī)定(本文以len代替)。
+DI和-DI計算出來之后,可以很容易得到DX指數(shù)、ADX指數(shù)和ADXR指數(shù)。DX=|(+DI)-(-DI)|/((+DI)+(-DI)),這里+DI和-DI都被括起來了;ADX是DX的加權(quán)移動平均;ADXR=(ADX+ADX[len-1])*0.5;下面通過DirMovement函數(shù)的代碼來進(jìn)一步嚴(yán)謹(jǐn)?shù)慕榻BADX指數(shù)計算的邏輯。
1.3 DirMovement函數(shù)代碼
inputs: ? ?? ? PriceValueH( numericseries ),
?
//?來源:程序化99( www.tumamayizhan.com )最高價? ?? ? PriceValueL( numericseries ),
?
//?來源:程序化99( www.tumamayizhan.com )最低價? ?? ? PriceValueC( numericseries ),
?
//?來源:程序化99( www.tumamayizhan.com )收盤價? ?? ? Len( numericsimple ),? ?? ?? ?? ?
?
//?來源:程序化99( www.tumamayizhan.com )Len根bar ? ?? ? oDMIPlus( numericref ),? ?? ?? ?
?
//?來源:程序化99( www.tumamayizhan.com )代指+DI? ?? ? oDMIMinus( numericref ),? ?? ?
?
//?來源:程序化99( www.tumamayizhan.com )代指-DI? ?? ? oDMI( numericref ),? ?? ?? ?? ?
?
//?來源:程序化99( www.tumamayizhan.com )代指DX? ?? ? oADX( numericref ),? ?? ?? ?? ?
?
//?來源:程序化99( www.tumamayizhan.com )代指ADX? ?? ? oADXR( numericref ),? ?? ?? ???
?
//?來源:程序化99( www.tumamayizhan.com )代指ADXR? ?? ? oVolty( numericref ) ;? ?? ???
?
//?來源:程序化99( www.tumamayizhan.com )代指Volatility{這里,類似于oDMIPlus前面有o的參數(shù),后面的括號中都是使用numericref,這個是使用在函數(shù)的參數(shù)聲明語句中,定義為傳址數(shù)值,它使函數(shù)可以輸出多個結(jié)果,并且傳遞給調(diào)用該函數(shù)的腳本;powerlanguage中這種類型的參數(shù)還有numericarrayref、stringarrayref、stringref、truefalsearrayref、truefalseref}variables:? ?? ? var0( 0 ),? ?
?
//?來源:程序化99( www.tumamayizhan.com )計算每根bar的正向波動值? ?? ? var1( 0 ),? ?
?
//?來源:程序化99( www.tumamayizhan.com )計算每根bar的負(fù)向波動值? ?? ? var2( 0 ),? ?? ?? ? var3( 0 ),? ?? ?? ? var4( 0 ),? ?
?
//?來源:程序化99( www.tumamayizhan.com )計算len根bar的累計正向波動值? ?? ? var5( 0 ),? ?
?
//?來源:程序化99( www.tumamayizhan.com )計算len根bar的累計負(fù)向波動值? ?? ? var6( 0 ),? ?
?
//?來源:程序化99( www.tumamayizhan.com )計算len根bar的累計真實(shí)波動幅度 ? ?? ? var7( 0 ),? ?
?
//?來源:程序化99( www.tumamayizhan.com )正向波動值的加權(quán)移動平均? ?? ? var8( 0 ),? ?
?
//?來源:程序化99( www.tumamayizhan.com )負(fù)向波動值的加權(quán)移動平均? ?? ? var9( 1 / Len ),? ???
?
//?來源:程序化99( www.tumamayizhan.com )計算中使用的加權(quán)移動平均的權(quán)重為1/len和1-1/len??? ?? ?? ?? ???? ?? ? var10( 0 ) ;? ?
?
//?來源:程序化99( www.tumamayizhan.com )正向指數(shù)與負(fù)向指數(shù)之和if CurrentBar = 1 then? ?? ? begin? ?? ? for Value1 = 0 to Len - 1 ? ?? ?? ?? ???begin? ?? ?? ?? ???var0 = 0 ;? ?? ?? ?? ???var1 = 0 ;? ?? ?? ?? ???var2 = PriceValueH[Value1] - PriceValueH[ Value1 + 1 ] ;? ?? ?? ?? ???var3 = PriceValueL[ Value1 + 1 ] - PriceValueL[Value1] ;? ?? ?? ?? ???condition1 = var2 > var3 and var2 > 0 ;? ?? ?? ?? ???if condition1 then? ?? ?? ?? ?? ?? ?? ?var0 = var2{當(dāng)condition1條件成立的時候,當(dāng)根bar為正向波動,波動值賦給var0,var1取默認(rèn)值0}? ?? ?? ?? ???else ? ?? ?? ?? ???begin? ?? ?? ?? ???condition1 = var3 > var2 and var3 > 0 ;? ?? ?? ?? ???if condition1 then? ?? ?? ?? ?? ?? ?? ?var1 = var3 ;{condition1被重新賦值之后,如果條件滿足,當(dāng)根bar為負(fù)向波動,波動值賦給var1,var0取默認(rèn)值0}? ?? ?? ?? ?? ?? ?? ?end;? ? {到這里,for循環(huán)內(nèi)部最大的if判斷結(jié)束,下面是for循環(huán)內(nèi)部其它語句}? ?? ?? ?? ???var4 = var4 + var0 ;? ?
?
//?來源:程序化99( www.tumamayizhan.com )累加正向波動值,總共計算len次? ?? ?? ?? ???var5 = var5 + var1 ;? ?
?
//?來源:程序化99( www.tumamayizhan.com )累加負(fù)向波動值,總共計算len次? ?? ?? ?? ???var6 = var6 + TrueRangeCustom( PriceValueH, PriceValueL, PriceValueC )[Value1] ;??{累加真實(shí)波動幅度,總共計算len次,第len次之后,循環(huán)結(jié)束}? ?? ?? ?? ???end ;? ?? ? var7 = var4 / Len ;??{正向波動值的平均值,第一次平均是通過簡單平均計算的,之后是通過加權(quán)移動平均計算的}? ?? ? var8 = var5 / Len ;??
?
//?來源:程序化99( www.tumamayizhan.com )負(fù)向波動值的平均值? ?? ? oVolty = var6 / Len ;
?
//?來源:程序化99( www.tumamayizhan.com )真實(shí)波動幅度的平均值? ?? ? end else? ? {上面是判斷當(dāng)currentbar=1成立時,使用簡單平均去計算平均正向波動值、平均負(fù)向波動值和平均真實(shí)波動幅度,之后else部分(即,currentbar>1時)使用加權(quán)移動平均去計算平均正向波動值、平均負(fù)向波動值和平均真實(shí)波動幅度}? ?? ? begin? ?? ? var0 = 0 ;? ?? ? var1 = 0 ;? ?? ? var2 = PriceValueH - PriceValueH[1] ;? ?? ? var3 = PriceValueL[1] - PriceValueL ;? ?? ? condition1 = var2 > var3 and var2 > 0 ;? ?? ? if condition1 then? ?? ?? ?? ???var0 = var2? ?? ? else ? ?? ? begin ? ?? ? condition1 = var3 > var2 and var3 > 0 ;? ?? ? if condition1 then? ?? ?? ?? ???var1 = var3 ;? ?? ?? ?? ???end;? ?? ? var7 = var7[1] + var9 * ( var0 - var7[1] ) ;{即,var7=(1-1/len)*var7[1]+1/len*var0,權(quán)重分別為1-1/len和1/len}? ?? ? var8 = var8[1] + var9 * ( var1 - var8[1] ) ;? ?? ? oVolty = oVolty[1] + var9 * ( TrueRangeCustom( PriceValueH, PriceValueL, PriceValueC ) ? ?? ???- oVolty[1] ) ;? ?? ? end ;if oVolty > 0 then? ?? ? begin? ?? ? oDMIPlus = 100 * var7 / oVolty ;? ?? ? oDMIMinus = 100 * var8 / oVolty ;{平均正向波動值與平均真實(shí)波動幅度的比值得到+DI,之所以乘以100,是為了使DI的值落在區(qū)間[0,100]內(nèi);平均負(fù)向波動值與平均真實(shí)波動幅度的比值得到-DI。}? ?? ? end else? ?? ? begin? ?? ? oDMIPlus = 0 ;? ?? ? oDMIMinus = 0 ;{這里當(dāng)oVolty=0成立時,因?yàn)槭欠帜笧?沒有意義,會導(dǎo)致編譯出現(xiàn)錯誤,為了避免這種情況,需要在代碼中進(jìn)行判斷,此時需要將+DI和-DI分別賦值為0}? ?? ? end ;var10 = oDMIPlus + oDMIMinus ;if var10 > 0 then
?
//?來源:程序化99( www.tumamayizhan.com )在代碼的編寫時,所有的變量做分母時都需要判斷一下? ?? ? oDMI = 100 * AbsValue( oDMIPlus - oDMIMinus ) / var10 {計算得到DX值}else? ?? ? oDMI = 0 ;??condition1 = CurrentBar <= Len and CurrentBar > 0 ;{從這里之后的部分,需要計算ADX和ADXR,ADX是DX的平均計算,而DX的計算已經(jīng)是基于len根bar的平均計算,所以ADX的計算是二次平均計算,是基于2*len根bar的平均計算}if condition1 then? ?? ? begin? ?? ? oADX = Cum( oDMI ) / CurrentBar ;? ?? ? oADXR = ( oADX + oADX[ CurrentBar - 1 ] ) * .5 ;? ?{這里,由于currentbar<=len,即bar的數(shù)目不夠,所以需要進(jìn)行一次特殊的平均計算,計算ADX使用的分母是currentbar;同樣,ADXR的計算也進(jìn)行了特殊的計算}??? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? ? ?? ? endelse? ?? ? begin? ?? ? oADX = oADX[1] + var9 * ( oDMI - oADX[1] ) ;? ?? ? oADXR = ( oADX + oADX[ Len - 1 ] ) * .5 ;{對ADX進(jìn)行加權(quán)移動平均計算,權(quán)重分別為1-1/len和1/len;ADXR的計算見代碼}? ?? ? end ;DirMovement = 1 ;??
?
//?來源:程序化99( www.tumamayizhan.com )這個函數(shù)的返回值沒有意義,關(guān)鍵是傳址參數(shù)的使用1.4 DirMovement系列函數(shù)使用說明
DirMovement函數(shù)代碼在上面已經(jīng)介紹過了,這個函數(shù)的返回值沒有意義,關(guān)鍵是傳址參數(shù)的使用。
DMI函數(shù)內(nèi)部調(diào)用了DirMovement,DMI函數(shù)的返回值就是DX指數(shù)的值;DMI(len)的參數(shù)是需要計算的bar的數(shù)目len,然后返回DX指數(shù)的值。
DMICustom函數(shù)的功能及內(nèi)部的代碼邏輯和DMI函數(shù)一樣,不同的是多了三個價格參數(shù),DMICustom(high,low,close,len)的參數(shù)分別是最高價、最低價、收盤價和bar的數(shù)目len,返回DX指數(shù)的值。
DMIMinus函數(shù)內(nèi)部調(diào)用了DirMovement,它的返回值就是-DI指數(shù)的值;DMIMinus(len)的參數(shù)是需要計算的bar的數(shù)目len,然后返回-DI指數(shù)的值。
DMIMinusCustom函數(shù)的功能及內(nèi)部的代碼邏輯和DMIMinus函數(shù)完全一樣,不同的是多了三個價格參數(shù),DMIMinusCustom(high,low,close,len)的參數(shù)分別是最高價、最低價、收盤價和bar的數(shù)目len,返回-DI指數(shù)的值。
ADX函數(shù)調(diào)用了DirMovement函數(shù);ADX(len)的參數(shù)是需要計算的bar的數(shù)目len,然后返回ADX指數(shù)的值。
ADXCustom函數(shù)的功能及內(nèi)部代碼邏輯和ADX函數(shù)完全一樣,不同的是多了三個價格參數(shù);ADXCustom(high,low,close,len)的參數(shù)分別是最高價、最低價、收盤價和bar的數(shù)目len,返回ADX指數(shù)的值。
ADXClassic函數(shù)功能及計算邏輯和ADX函數(shù)是一樣,參數(shù)也是一樣的,不同的是代碼的編寫不一樣;ADXClassic函數(shù)調(diào)用了DMI函數(shù)來計算DX指數(shù),然后再對DX指數(shù)使用加權(quán)移動平均來計算ADX指數(shù)的值,最后再使用intportion關(guān)鍵字對ADX指數(shù)取整;ADXClassic(len)的參數(shù)是需要計算的bar的數(shù)目len,然后返回ADX指數(shù)的取整值(即將小數(shù)點(diǎn)之后的值去除)。
ADXCustomClassic函數(shù)是ADXClassic和ADXCustom的結(jié)合,即使用了三個價格參數(shù),然后在內(nèi)部調(diào)用了DMI函數(shù)來計算DX指數(shù),然后再對DX指數(shù)使用加權(quán)移動平均來計算ADX指數(shù)的值,最后再使用關(guān)鍵字intportion對ADX指數(shù)取整數(shù)值;ADXCustomClassic(high,low,close,len)的參數(shù)是最高價、最低價、收盤價和需要計算的bar的數(shù)目len。
ADXR函數(shù)調(diào)用了DirMovement函數(shù);ADXR(len)的參數(shù)是需要計算的bar的數(shù)目len,然后返回ADXR指數(shù)的值。
ADXRCustom、ADXRClassic、ADXRCustomClassic函數(shù)的計算、使用及相互區(qū)別可以參考ADX。
XAverageOrig是加權(quán)移動平均函數(shù);XAverageOrig(pricevalue,len)的參數(shù)分別是價格值和需要計算的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的最高價與前一根bar的收盤價的最高值,這個函數(shù)沒有參數(shù)。
TrueLow函數(shù)返回當(dāng)根bar的最低價與前一根bar的收盤價的最低值,這個函數(shù)沒有參數(shù)。
TrueRange函數(shù)返回當(dāng)根bar的真實(shí)波動幅度,TrueRange=TrueHigh-TrueLow,這個函數(shù)沒有參數(shù)。
TrueRangeCustom函數(shù)的邏輯和TrueRange的計算邏輯是一樣的,不同的是它有三個價格參數(shù);TrueRangeCustom(high,low,close)的參數(shù)是當(dāng)根bar的最高價、最低價和收盤價,返回當(dāng)根bar的真實(shí)波動幅度。
Volatility的值等于XAverageOrig(TrueRange,len),這個函數(shù)的內(nèi)部調(diào)用函數(shù)XAverageOrig對真實(shí)波動幅度進(jìn)行加權(quán)移動平均計算;Volatility(len)的參數(shù)是需要計算的bar的數(shù)目len,返回平均真實(shí)波動幅度。
XAverage是指數(shù)移動平均函數(shù),它是一種特殊的加權(quán)平均函數(shù);XAverage(pricevalue,len)的參數(shù)分別是價格值和需要計算的bar的數(shù)目,返回pricevalue的指數(shù)移動平均值,即XAverage=(len-1)/(len+1)*XAverage[1]+2/(len+1)*pricevalue。
AvgTrueRange函數(shù)調(diào)用Average函數(shù)計算平均真實(shí)波動幅度,即先累加真實(shí)波動幅度,然后再除以數(shù)目;AvgTrueRange(len)的參數(shù)是需要計算的bar的數(shù)目,返回平均真實(shí)波動幅度值。
本主題由 Alex 于 14?小時前 限時置頂
?
?
公式導(dǎo)入教程: 【通達(dá)信公式源碼導(dǎo)入方法教程】 【同花順公式源碼導(dǎo)入方法教程】 【大智慧新一代公式源碼導(dǎo)入方法教程】
?
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 511411198 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容