求帮我改成正常的DMI指标,4条线的那种

Params
    Numeric DMI_N(14);                    //DMI的N值
    Numeric DMI_M(6);                    //DMI的M值, 本策略中用不到
    Numeric ADXLevel(25);                //ADX低于此值时被认为行情处于震荡中
    Numeric ADXLowThanBefore(3);        //入场条件中ADX需要弱于之前值的天数
    Numeric ConsecBars(3);                //入场条件中连续阳线或阴线的个数
    Numeric ATRLength(10);                //ATR值
    Numeric ProtectStopATRMulti(0.5);        //保护性止损的ATR乘数
    Numeric ProactiveStopBars(10);        //入场后主动平仓的等待根数
    
Vars
    //DMI最终输出
    Series<Numeric> oDMIPlus;
    Series<Numeric> oDMIMinus;
    Series<Numeric> oDMI;
    Series<Numeric> oADX;
    Series<Numeric> oADXR;
    Series<Numeric> oVolty;
    //DMI过程计算
    Series<Numeric> sDMI;
    Series<Numeric> sADX;
    Series<Numeric> cumm;
    Series<Numeric> sVolty;
    Numeric PlusDM;
    Numeric MinusDM;
    Numeric UpperMove;
    Numeric LowerMove;
    Numeric SumPlusDM(0);
    Numeric SumMinusDM(0);
    Numeric SumTR(0);
    Series<Numeric> AvgPlusDM;
    Series<Numeric> AvgMinusDM;
    Numeric SF;                        // smoothing factor
    Numeric Divisor;
    Numeric i;
    Series<Numeric> TRValue;
    //--------------------
    Series<Numeric> ATR(0);                //ATR值
    Series<Numeric> ConsecBarsCount(0);    //连续阳线或阴线计数
    
    Series<Numeric> ProtectStopL;            //基于ATR的保护性止损
    Series<Numeric> MP;                    //MarketPosition的状态记录
    
Events
    OnBar(ArrayRef<Integer> indexs)
    {
        
        
        //系统设置
        //DMI指标计算, 最终将输出ADX指标
        //--------------------------DMI计算开始-----------------------------------//
        SF = 1/DMI_N;
        TRValue = TrueRange; 
        If(CurrentBar == DMI_N)
        {
                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 ;
        }Else if(CurrentBar > DMI_N)
        {
                PlusDM = 0 ;
                MinusDM = 0 ; 
                UpperMove = High - High[1] ;
                LowerMove = Low[1] -Low ;
                if (UpperMove > LowerMove And UpperMove > 0 )
                {
                        PlusDM = UpperMove;
                }else if (LowerMove > UpperMove And LowerMove > 0 )
                {
                        MinusDM = LowerMove ;
                }
                AvgPlusDM = AvgPlusDM[1] + SF * ( PlusDM - AvgPlusDM[1] ) ;
                AvgMinusDM = AvgMinusDM[1] + SF * ( MinusDM - AvgMinusDM[1] ) ;
                sVolty = sVolty[1] + SF * ( TRValue  - sVolty[1] ) ;
        }Else
        { 
                oDMIPlus = InvalidNumeric;
                oDMIMinus = InvalidNumeric;
                oDMI = InvalidNumeric;
                oADX = InvalidNumeric;
                oADXR = InvalidNumeric;
                oVolty = InvalidNumeric;
        }
        
        if (sVolty > 0)
        {
                oDMIPlus = 100 * AvgPlusDM / sVolty ;
                oDMIMinus = 100 * AvgMinusDM / sVolty ;
        }else
        {
                oDMIPlus = 0 ;
                oDMIMinus = 0 ;
        }
        Divisor = oDMIPlus + oDMIMinus ;
        if (Divisor > 0)
        {
                sDMI = 100 * Abs( oDMIPlus - oDMIMinus ) / Divisor;
        }else
        {
                sDMI = 0 ;
        }
        cumm=Cum( sDMI );
        if(CurrentBar > 0)
        {
                if (CurrentBar <= DMI_N)
                {
                        sADX = Cumm / CurrentBar ;
                        oADXR = ( sADX + sADX[ CurrentBar - 1 ] ) * 0.5 ;
                }else  
                {
                        sADX = sADX[1] + SF * ( sDMI - sADX[1] ) ;
                        oADXR = ( sADX + sADX[ DMI_M - 1 ] ) * 0.5 ;
                }
        }
        oVolty = sVolty;
        oDMI = sDMI;
        oADX = sADX;
        PlotNumeric("sVolty",sVolty);
        PlotNumeric("oDMI",oDMI);
        PlotNumeric("oADX",oADX);
        //--------------------------DMI计算结束-----------------------------------//

    }

系统中咋没找到DMI指标
交易开拓者怎么没有DMI指标
公式管理器中,Traffic_Jam_L中DMI指标的ADX走势与其他期货软件上DMI指标的ADX走势不一样,乱编的吧。
老师帮我修改成开拓者用的
DMI_ADX
求老师帮我写个简单策略代码
PlotNumeric 函数影响K线的正常显示问题
求一份SAR抛物线指标带交易的版本,谢谢
麻烦老师帮我改成TB语言
EMA指标无法正常显示

建议投稿

谢谢老师!静等您的讲解