设为首页收藏本站

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

ADX代码,PDI,MDI对,ADX线有点问题,高手帮看看? [复制链接]

Rank: 3Rank: 3

精华
0
UID
111381
积分
174
帖子
76
主题
12
阅读权限
40
注册时间
2012-7-7
最后登录
2014-1-11
跳转到指定楼层
1#
发表于 2012-8-16 15:39:45 |只看该作者 |倒序浏览
Params
        Numeric Length(7);
        Numeric Length2(14);
Vars

       
        NumericSeries AvgTR(0);
        NumericSeries PDI(0);
        NumericSeries MDI(0);
        NumericSeries DM(0);
        NumericSeries mDM(0);
        NumericSeries dmsum(0);.
        NumericSeries mdmsum(0);
        NumericSeries DID(0);
        NumericSeries DIS(0);
        NumericSeries DX(0);
        NumericSeries ADX(0);
        Numeric N;
       
Begin
        DM = IIF((H[1]-H[2])>Abs(L[1] - L[2]), H[1] - H[2],0);
        mDM = IIF((L[2] - L[1])>Abs(H[1] - L[2]), L[2]-L[1],0);
        AvgTR = XAverage(TrueRange, Length);
        N = AvgTR[1];
        dmsum = XAverage(DM, Length);
        mdmsum = XAverage(mDM, Length);
        PDI = dmsum[1]*100/N;
        MDI = mdmsum[1]*100/N;
        DID = Abs(dmsum[1]*100/N-mdmsum[1]*100/N);
        DIS = dmsum[1]*100/N + mdmsum[1]*100/N;
        DX = 100*DID/DIS;
        ADX =AverageFC(DX,Length2);
       
        PlotNumeric("PDI",PDI);
        PlotNumeric("MDI", MDI);
        PlotNumeric("ADX",ADX);
       
       
       
End

Rank: 3Rank: 3

精华
0
UID
111381
积分
174
帖子
76
主题
12
阅读权限
40
注册时间
2012-7-7
最后登录
2014-1-11
2#
发表于 2012-8-16 15:52:20 |只看该作者
找到问题了,可能出现除0的情况。

使用道具 举报

Rank: 1

精华
0
UID
237434
积分
17
帖子
10
主题
5
阅读权限
10
注册时间
2016-7-21
最后登录
2018-2-22
3#
发表于 2016-7-30 11:44:26 |只看该作者
//------------------------------------------------------------------------
// 简称: U_F_ADX2
// 名称: 文华财经定义的ADX
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
//TR :true range
//HD := HIGH-REF(HIGH,1);
//LD := REF(LOW,1)-LOW;
//DMP:= SUM(IFELSE(HD>0 && HD>LD,HD,0),N);
//DMM:= SUM(IFELSE(LD>0 && LD>HD,LD,0),N);
//PDI: DMP*100/TR;
//MDI: DMM*100/TR;
//ADX: MA(ABS(MDI-PDI)/(MDI+PDI)*100,M);
//ADXRADX+REF(ADX,M))/2;


Params
        Numeric DMI_N(14);        //DMI的N值
    Numeric DMI_M(30);        //ADX均线周期 ,DMI的M值
Vars
//DMI最终输出
        NumericSeries DMIPlus;
        NumericSeries DMIMinus;
        NumericSeries ADX;
//DMI过程计算
        NumericSeries sDMI;
        NumericSeries sADX;
        NumericSeries cumm;
        Numeric PlusDM;
        Numeric MinusDM;
        Numeric UpperMove;
        Numeric LowerMove;
        Numeric SumPlusDM(0);
        Numeric SumMinusDM(0);
        Numeric SumTR(0);
        NumericSeries AvgPlusDM;
        NumericSeries AvgMinusDM;
        NumericSeries sVolty;
        NumericSeries DX;
        Numeric i;
        NumericSeries TRValue;
//--------------------       
        NumericSeries ADXValue(20); //计算ADX均线
Begin
       
        TRValue=TrueRange;
       
        if (CurrentBar < DMI_N)
           Return InvalidNumeric;
       
        // 计算DM ,可以根据定义再细化
        For i = 0 To DMI_N - 1
       {       
                                        PlusDM = 0 ;
                                        MinusDM = 0 ;
                                        UpperMove = High[i] - High[ i + 1 ] ;
                                        LowerMove = Low[ i + 1 ] - Low[i] ;
                                        If (UpperMove > LowerMove and UpperMove > 0 )
                                    {
                                                        PlusDM = UpperMove;
                                        } Else if (LowerMove > UpperMove and LowerMove > 0)
                                    {
                                                        MinusDM = LowerMove ;
                                        }
                                       
                                        SumPlusDM = SumPlusDM + PlusDM ;
                                        SumMinusDM = SumMinusDM + MinusDM ;
                                        SumTR = SumTR + TRValue[i] ;
                       
                }

               
        AvgPlusDM = SumPlusDM / DMI_N ;
        AvgMinusDM = SumMinusDM / DMI_N;
        sVolty = SumTR / DMI_N ;
               
       
        DMIPlus=AvgPlusDM/sVolty;
    DMIMinus=AvgMinusDM/sVolty;
        DX=100*Abs(DMIPlus-DMIMinus)/(DMIPlus+DMIMinus);
       
        PlotNumeric("DMI_PLUS",DMIPlus);
        PlotNumeric("DMI_MINUS",DMIMinus);
        PlotNumeric("DX",DX);
       
        ADXValue=Average(DX,DMI_M);
       
       
        Return ADXValue;
End

使用道具 举报

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

bottom

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

GMT+8, 2024-5-14 01:30

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部