设为首页收藏本站

 找回密码
 注册
查看: 55659|回复: 48
打印 上一主题 下一主题

用TB实现DMI指标! [复制链接]

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
跳转到指定楼层
1#
发表于 2007-10-20 15:17:30 |只看该作者 |倒序浏览
DMI(趋向指标)常识详解

属于趋势类指标,是非常好用的指标。

DMI指标
  指示投资人避免在盘整的市场中交易,一旦市场变得有利润时,DMI立刻引导投资人进场,并且在适当时机退场。

买卖原则:
1、+DI上交叉-DI时,做买。
2、+DI下交叉-DI时,做卖。
3、ADX于50以上向下转折时,对表市场趋势终了。
4、当ADX滑落至+DI之下时,不宜进场交易。
5、当ADXR介于20-25时,宜采用TBP及CDP中之反应秘诀为交易参考。


一、DMI所包含的内容
1. ±DI
2. DX (Directional Movement Index)
3. ADX (Average Directional Movement Index)
4. ADXR

二、DMI的应用法则及注意事项
1. ±DI的应用法则
2. DX和ADX的应用法则
3. ADXR的应用
4. 其他注意事项

分析曲线:DMI

一、DMI所包含的内容

  DMI是英文Directioal Movement Index的缩写,中文名称“趋势指标。
  DMI是由发明RSI的技术分析大师J·W·Wilder发明的,是判断股价走向的实用性的技术分析工具。
  DMI一共包括±DI、DX、ADX和ADXR四项内容。

1.±DI

  DI是Directional Indicator的缩写,中文名称为方向线。
        +DI表示上升方向线(你把它看成是牛,是多),-DI表示下降方向线(你把它看成是熊,是空)。
        DI的取值永远在0~100之间。DI的实际含义就是变动中在全部变动中所占的比例。如果占的比例大,那么,这个方向的力量就大,如果占的比例小,那么这个方向的力量就小。
        ±DI是多空双方力量的绝对强度。
        这一点恰好是DMI的构造的基本思想。

2. DX(Directional Movement Index)

  中文名称叫动向值,也叫比例数,是鉴于±DI的一些不足而产生的新的技术指标。
  DX是以+-DI两者之差与两者之和的比值作为对当前市场动向的缩合评判的,
  由于+DI和-DI都是正数,可以很明确地知道,DX的取值范围是0~100。
  从直观上讲,如果+DI=-DI,则说明向上和向下的力量相等,那么股价将没有趋势和方向,而这时,DX=0。从另一个极端看,如果±DI中有一个为0,比如说+DI为0,那么,向下的力量完全战胜向上的力量,而这时DX=100。由此可知,DX越大,股价越具有趋势和行动的方向,而DX越小,股价就没有明确的趋势和行动方向。
  从DX的表达式中也可以看出,DX表明的是多空双方差异的相对水平。

3. ADX(Average Directional Movement Index)

  这是DMI中的主角,中文名字为平均动向值。从名字中就可以知道ADX是DX的移动平均。
  之所以选择ADX而不选择DX的原因,是为了避免某一天的偶然取值的大幅变动,引起我们对总体形势的错误判断。
  说到移动平均就涉及到参数,即天数。一般以10作为求ADX的参数,读者当然可以自己选择自己习惯的参数,不能拘泥于书本。

4. ADXR

  ADX在高位的反转向下,是指明一个趋势的结束的标志。但是,真正的确信ADX已经调头向下了的时候,往往已经有些晚了,这使得在应用ADX时出现麻烦。
  ADXR的引入在一定程度上可以弥补ADX的上述不足。可以增强ADX在高位反转的尽早确认。
  ADXR实际是今日ADX与前面某一日的ADX的平均值。ADXR在高位与ADX同步下滑,可以增加对ADX已经调头的尽早确认。ADXR是ADX的附属产品,在应用时,应以ADX为主,ADXR为辅。有很多的文献在介绍DMI时,都不介绍ADXR,而只介绍ADX就结束了。  

二、DMI的应用法则及注意事项

1.±DI的应用法则

  利用±DI和-DI这两条曲线可以很容易判断出行情的发展趋势并以此作为依据确立自己的买入卖出价位。
  从±DI的含义知,±DI表示的是上升动力和下降动力的绝对数字的大小,所以,当+DI上升,-DI下降时,就说明目前多方力量强大。如果+DI从低位向上,而-DI从高位向下,当+DI上穿-DI时,为多方最终占优的局面,是买入的信号。
  与上述方向相反,-DI上升,+DI下降,则说明目前市场是空方力量渐渐增强,而多方力量渐渐减弱。如果-DI从低向上,而+DI从高向下,当-DI上穿+DI时,是空方最终占优标志,这时,是卖出的信号。

2. DX和ADX的应用法则

  DX和ADX的应用法则是相同的,我们以下只叙述ADX的应用法则,不单独再列举DX的了。
  在多头市场中,股价会不断地上涨,从而导致,+DI的上升和-DI的下降,ADX也会上升。而在空头市场中,股价不断地下降,+DI下降,-DI会上升,最终ADX还是上升。这就是说,无论是在空头还是在多头市场,ADX总是呈上升的趋势。这就告诉我们,ADX只能帮助我们判断是否有趋势存在,也即股价目前是否是按照某一方向移动的,而不能帮助我们弄清楚股价具体是向上移动还是向下移动。
        a.当ADX的曲线持续上到高位(具体到什么数字要根据参数的参数和股票的种类而定),这说明目前股价正朝着一个固定的方向运动,可能是向上也可能是下降。
        b.当ADX上升到高位,并转折向下时,说明原来的趋势可能遇到了麻烦,不能再象原来那样沿原来方向畅快的运动了,甚至可能是这一轮趋势的反转开始。所以,一旦ADX在高位回头向下,是特别应该引起注意的现象。
        c.股价不断创高或创低,而ADX也不断创高,则股价这种创新高和创新低的行为还将保持一段时间,不会立即停下来。这就是ADX的助涨和助跌作用。ADX可以坚定我们的信心。
        d.ADX进入低位时(具体低到什么数字才算低,要根据具体的情况而定),说明+DI和-DI已经接近,多空双方的力量对比基本相当,谁也不占大的优势。这个时候,股价进入盘整阶段,没有明确的运动方向。ADX一旦进入低位就失去了作用。ADX的价值体现在ADX处在高位时的表现,当处低位时,对我们今后的工作没有任何帮助。

3. ADXR的应用

  前文已经说过了,ADXR的产生是为了弥补ADX的不足。ADX在高位调头时,可能不能被立即确认,因为ADX有可能作出暂时的停顿,然后继续向上。如果ADXR和ADX同步调头向下,则ADX的转折将被确认。
  ADXR可以单独使用,它的应用方法则同ADX一样,因为从某种意义上讲,ADX就是ADXR。

4.其他注意事项

  DMI包括了几个技术指标,这些技术指标都可以单独运用于股价的预测。但是,DMI最好同股价和别的技术指标结合使用,因为那样一来,推测的结果会更加准确。与DMI结合使用得最多的技术指标是RSI。RSI和DMI都是描述多空双方力量对比的技术指标。
  DMI是以最高价和最低价的角度,RSI是从收盘价的角度。在大多数情况下,DMI与RSI是一致的,是同步的。一旦DMI和RSI所显示的多空双方力量发生矛盾时,这时的行情可能将有大的动作。
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
2#
发表于 2007-10-20 15:19:47 |只看该作者
1、新建一个用户函数,取名为DirMovement,设置返回值为布尔型!
代码如下:
  1. Params
  2.         Numeric Length(14);
  3.         NumericRef oDMIPlus;
  4.         NumericRef oDMIMinus;
  5.         NumericRef oDMI;
  6.         NumericRef oADX;
  7.         NumericRef oADXR;
  8.         NumericRef oVolty;
  9. Vars
  10.         NumericSeries sDMI;
  11.         NumericSeries sADX;
  12.         NumericSeries sVolty;
  13.         Numeric PlusDM;
  14.         Numeric MinusDM;
  15.         Numeric UpperMove;
  16.         Numeric LowerMove;
  17.         Numeric SumPlusDM(0);
  18.         Numeric SumMinusDM(0);
  19.         Numeric SumTR(0);
  20.         NumericSeries AvgPlusDM;
  21.         NumericSeries AvgMinusDM;
  22.         Numeric SF;                        // smoothing factor
  23.         Numeric Divisor;
  24.         Numeric i;
  25.         NumericSeries TRValue;
  26. Begin
  27.         SF = 1/length;
  28.         TRValue = TrueRange;
  29.         If(CurrentBar == Length)
  30.         {
  31.                 for i = 0 To Length - 1
  32.                 {
  33.                         PlusDM = 0 ;
  34.                         MinusDM = 0 ;
  35.                         UpperMove = High[i] - High[ i + 1 ] ;
  36.                         LowerMove = Low[ i + 1 ] - Low[i] ;
  37.                         if (UpperMove > LowerMove and UpperMove > 0 )
  38.                         {
  39.                                 PlusDM = UpperMove;
  40.                         }else if (LowerMove > UpperMove and LowerMove > 0)
  41.                         {
  42.                                 MinusDM = LowerMove ;
  43.                         }
  44.                         SumPlusDM = SumPlusDM + PlusDM ;
  45.                         SumMinusDM = SumMinusDM + MinusDM ;
  46.                         SumTR = SumTR + TRValue[i] ;
  47.                 }
  48.                 AvgPlusDM = SumPlusDM / Length ;
  49.                 AvgMinusDM = SumMinusDM / Length ;
  50.                 sVolty = SumTR / Length ;
  51.         }Else if(CurrentBar > Length)
  52.         {
  53.                 PlusDM = 0 ;
  54.                 MinusDM = 0 ;
  55.                 UpperMove = High - High[1] ;
  56.                 LowerMove = Low[1] - Low ;
  57.                 if (UpperMove > LowerMove and UpperMove > 0 )
  58.                 {
  59.                         PlusDM = UpperMove;
  60.                 }else if (LowerMove > UpperMove and LowerMove > 0 )
  61.                 {
  62.                         MinusDM = LowerMove ;
  63.                 }
  64.                 AvgPlusDM = AvgPlusDM[1] + SF * ( PlusDM - AvgPlusDM[1] ) ;
  65.                 AvgMinusDM = AvgMinusDM[1] + SF * ( MinusDM - AvgMinusDM[1] ) ;
  66.                 sVolty = sVolty[1] + SF * ( TRValue  - sVolty[1] ) ;
  67.         }Else
  68.         {
  69.                 oDMIPlus = InvalidNumeric;
  70.                 oDMIMinus = InvalidNumeric;
  71.                 oDMI = InvalidNumeric;
  72.                 oADX = InvalidNumeric;
  73.                 oADXR = InvalidNumeric;
  74.                 oVolty = InvalidNumeric;
  75.                 Return True;
  76.         }
  77.        
  78.         if (sVolty > 0)
  79.         {
  80.                 oDMIPlus = 100 * AvgPlusDM / sVolty ;
  81.                 oDMIMinus = 100 * AvgMinusDM / sVolty ;
  82.         }else
  83.         {
  84.                 oDMIPlus = 0 ;
  85.                 oDMIMinus = 0 ;
  86.         }

  87.         Divisor = oDMIPlus + oDMIMinus ;
  88.         if (Divisor > 0)
  89.         {
  90.                 sDMI = 100 * Abs( oDMIPlus - oDMIMinus ) / Divisor;
  91.         }else
  92.         {
  93.                 sDMI = 0 ;
  94.         }

  95.         if(CurrentBar > 0)
  96.         {
  97.                 if (CurrentBar <= Length)
  98.                 {
  99.                         sADX = Cum( sDMI ) / CurrentBar ;
  100.                         oADXR = ( sADX + sADX[ CurrentBar - 1 ] ) * 0.5 ;
  101.                 }else  
  102.                 {
  103.                         sADX = sADX[1] + SF * ( sDMI - sADX[1] ) ;
  104.                         oADXR = ( sADX + sADX[ Length - 1 ] ) * 0.5 ;
  105.                 }
  106.         }
  107.         oVolty = sVolty;
  108.         oDMI = sDMI;
  109.         oADX = sADX;
  110.         Return True;
  111. End
复制代码
2、新建技术指标,取名DMI,代码如下:
  1. Params
  2.         Numeric Length(14);
  3. Vars
  4.         Numeric oDMIPlus( 0 );
  5.         Numeric oDMIMinus( 0 );
  6.         Numeric oDMI( 0 );
  7.         Numeric oADX( 0 );
  8.         Numeric oADXR( 0 );
  9.         Numeric oVolty( 0 );
  10. Begin
  11.         DirMovement(Length, oDMIPlus, oDMIMinus, oDMI, oADX, oADXR, oVolty ) ;
  12.         PlotNumeric( "DMI+" ,oDMIPlus);
  13.         PlotNumeric( "DMI-" ,oDMIMinus);
  14.         PlotNumeric( "ADX" ,oADX);
  15. End
复制代码
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
3#
发表于 2007-10-20 15:23:24 |只看该作者
使用界面如下:
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
37
积分
719
帖子
96
主题
28
阅读权限
60
注册时间
2007-7-24
最后登录
2013-5-23
4#
发表于 2007-10-20 21:28:54 |只看该作者
好,
支持,
顶一个

使用道具 举报

Rank: 4

精华
0
UID
41
积分
498
帖子
67
主题
8
阅读权限
50
注册时间
2007-7-25
最后登录
2019-3-24
5#
发表于 2007-10-22 17:00:55 |只看该作者
贴图上怎么少了ADXR?一般为四条线啊?

指标之王!  
好贴,顶!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
6#
发表于 2007-10-22 20:33:42 |只看该作者
没有输出ADXR,直接在指标中加入以下一行就行了
  1. PlotNumeric( "ADXR" ,oADXR);
复制代码
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 4

精华
0
UID
584
积分
501
帖子
63
主题
10
阅读权限
50
注册时间
2007-10-22
最后登录
2019-2-4
7#
发表于 2007-10-22 23:00:49 |只看该作者
初来乍到,四处学习。看了此帖,收获很大。

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
1057
积分
824
帖子
158
主题
8
阅读权限
60
注册时间
2008-1-11
最后登录
2021-10-24
8#
发表于 2008-2-14 22:51:53 |只看该作者
学习,支持版主把一些常用指标用TB实现啊。

好像,ADX、ADXR的计算有问题:你用的参数仍然是Numeric Length(14);应该是不同,楼主查查看。问题应该出在DirMovement函数上,不知我的理解对否?

[ 本帖最后由 stevenx8 于 2008-2-14 23:17 编辑 ]

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
9#
发表于 2008-2-15 09:28:09 |只看该作者
默认是相同的,您想设置成不同,增加一个参数就可以了

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
1057
积分
824
帖子
158
主题
8
阅读权限
60
注册时间
2008-1-11
最后登录
2021-10-24
10#
发表于 2008-2-15 15:50:52 |只看该作者
原帖由 nopain 于 2008-2-15 09:28 发表
默认是相同的,您想设置成不同,增加一个参数就可以了

请教:是不是这样修改

Params
        Numeric Length(14);
        Numeric Length2(6);
Vars
        NumericSeries oDMIPlus( 0 );
        NumericSeries oDMIMinus( 0 );
        Numeric oDMI( 0 );
        Numeric oADX( 0 );
        Numeric oADXR( 0 );
        Numeric oVolty( 0 );
        NumericSeries nTrend(0);
Begin
        DirMovement(Length, Length2, oDMIPlus, oDMIMinus, oDMI, oADX, oADXR, oVolty ) ;
        PlotNumeric( "DMI+" ,oDMIPlus);
        PlotNumeric( "DMI-" ,oDMIMinus);
        PlotNumeric( "ADX" ,oADX);
        PlotNumeric( "ADXR" ,oADXR);
End

DirMovement函数
Params
        Numeric Length(14);
                Numeric Length2(6);
        NumericRef oDMIPlus;
        NumericRef oDMIMinus;
        NumericRef oDMI;
        NumericRef oADX;
        NumericRef oADXR;
        NumericRef oVolty;
Vars
        NumericSeries sDMI;
        NumericSeries sADX;
        NumericSeries sVolty;
        Numeric PlusDM;
        Numeric MinusDM;
        Numeric UpperMove;
        Numeric LowerMove;
        Numeric SumPlusDM(0);
        Numeric SumMinusDM(0);
        Numeric SumTR(0);
        NumericSeries AvgPlusDM;
        NumericSeries AvgMinusDM;
        Numeric SF;                        // smoothing factor
        Numeric SF2;                       // smoothing factor2
        Numeric Divisor;
        Numeric i;
        NumericSeries TRValue;
Begin
        SF = 1/length;
        SF2 = 1/length2;
(这部分相同省略)

        if(CurrentBar > 0)
        {
                if (CurrentBar <= Length)
                {
                        sADX = Cum( sDMI ) / CurrentBar ;
                        oADXR = ( sADX + sADX[ CurrentBar - 1 ] ) * 0.5 ;
                }else  
                {
                        sADX = sADX[1] + SF2 * ( sDMI - sADX[1] ) ;
                        oADXR = ( sADX + sADX[ Length2 - 1 ] ) * 0.5 ;
                }
        }
        oVolty = sVolty;
        oDMI = sDMI;
        oADX = sADX;
        Return True;
End

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-8 18:40

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部