您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

请问TB的DMI算法与其他软件DMI算法区别在哪里? [开拓者 TB]

  • 咨询内容: http://bbs.tb18.net/forum.php?mo ... 7&highlight=dmi
    这个页面下版主写了个DMI代码。应该是移植于TS的?
    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.             Numeric sADX0;                       
    13.             NumericSeries sVolty;
    14.             Numeric PlusDM;
    15.             Numeric MinusDM;
    16.             Numeric UpperMove;
    17.             Numeric LowerMove;
    18.             Numeric SumPlusDM(0);
    19.             Numeric SumMinusDM(0);
    20.             Numeric SumTR(0);
    21.             NumericSeries AvgPlusDM;
    22.             NumericSeries AvgMinusDM;
    23.             Numeric SF;                        // smoothing factor
    24.             Numeric Divisor;
    25.             Numeric i;
    26.             NumericSeries TRValue;
    27.     Begin
    28.             SF = 1/length;
    29.             TRValue = TrueRange;
    30.             If(CurrentBar == Length)
    31.             {
    32.                     for i = 0 To Length - 1
    33.                     {
    34.                             PlusDM = 0 ;
    35.                             MinusDM = 0 ;
    36.                             UpperMove = High[i] - High[ i + 1 ] ;
    37.                             LowerMove = Low[ i + 1 ] - Low[i] ;
    38.                             if (UpperMove > LowerMove and UpperMove > 0 )
    39.                             {
    40.                                     PlusDM = UpperMove;
    41.                             }else if (LowerMove > UpperMove and LowerMove > 0)
    42.                             {
    43.                                     MinusDM = LowerMove ;
    44.                             }
    45.                             SumPlusDM = SumPlusDM + PlusDM ;
    46.                             SumMinusDM = SumMinusDM + MinusDM ;
    47.                             SumTR = SumTR + TRValue[i] ;
    48.                     }
    49.                     AvgPlusDM = SumPlusDM / Length ;
    50.                     AvgMinusDM = SumMinusDM / Length ;
    51.                     sVolty = SumTR / Length ;
    52.             }Else if(CurrentBar > Length)
    53.             {
    54.                     PlusDM = 0 ;
    55.                     MinusDM = 0 ;
    56.                     UpperMove = High - High[1] ;
    57.                     LowerMove = Low[1] - Low ;
    58.                     if (UpperMove > LowerMove and UpperMove > 0 )
    59.                     {
    60.                             PlusDM = UpperMove;
    61.                     }else if (LowerMove > UpperMove and LowerMove > 0 )
    62.                     {
    63.                             MinusDM = LowerMove ;
    64.                     }
    65.                     AvgPlusDM = AvgPlusDM[1] + SF * ( PlusDM - AvgPlusDM[1] ) ;
    66.                     AvgMinusDM = AvgMinusDM[1] + SF * ( MinusDM - AvgMinusDM[1] ) ;
    67.                     sVolty = sVolty[1] + SF * ( TRValue  - sVolty[1] ) ;
    68.             }Else
    69.             {
    70.                     oDMIPlus = InvalidNumeric;
    71.                     oDMIMinus = InvalidNumeric;
    72.                     oDMI = InvalidNumeric;
    73.                     oADX = InvalidNumeric;
    74.                     oADXR = InvalidNumeric;
    75.                     oVolty = InvalidNumeric;
    76.                     Return True;
    77.             }
    78.            
    79.             if (sVolty > 0)
    80.             {
    81.                     oDMIPlus = 100 * AvgPlusDM / sVolty ;
    82.                     oDMIMinus = 100 * AvgMinusDM / sVolty ;
    83.             }else
    84.             {
    85.                     oDMIPlus = 0 ;
    86.                     oDMIMinus = 0 ;
    87.             }

    88.             Divisor = oDMIPlus + oDMIMinus ;
    89.             if (Divisor > 0)
    90.             {
    91.                     sDMI = 100 * Abs( oDMIPlus - oDMIMinus ) / Divisor;
    92.             }else
    93.             {
    94.                     sDMI = 0 ;
    95.             }
    96.                             sADX0 = Cum( sDMI ) / CurrentBar ;
    97.             if(CurrentBar > 0)
    98.             {
    99.                     if (CurrentBar <= Length)
    100.                     {
    101.                             sADX = sADX0 ;
    102.                             oADXR = ( sADX + sADX[ CurrentBar - 1 ] ) * 0.5 ;
    103.                     }else  
    104.                     {
    105.                             sADX = sADX[1] + SF * ( sDMI - sADX[1] ) ;
    106.                             oADXR = ( sADX + sADX[ Length - 1 ] ) * 0.5 ;
    107.                     }
    108.             }
    109.             oVolty = sVolty;
    110.             oDMI = sDMI;
    111.             oADX = sADX;
    112.             Return True;

     

  • TB技术人员: 顶起,请管理员回答!

     

  • TB客服: 我们提供的代码移植于TS,至于文华移植的代码就不知道算法是什么样的了

     

  • 网友回复:
    nopain 发表于 2013-7-25 14:36
    我们提供的代码移植于TS,至于文华移植的代码就不知道算法是什么样的了

    Params
            Numeric N(22);
            Numeric M(6);
                    Numeric k_ADXRUp(70);
                    Numeric k_ADXRDown(30);
                   
    Vars
            numericseries TR;
            numericseries HD;
            numericseries LD;
            numericseries DMP;
            numericseries DMM;
            numericseries PDI;
            numericseries MDI;        
            NumericSeries ADX;                                
            NumericSeries ADXR;        
    Begin
            //计算ADX公式
            TR = AvgTrueRange(N);
            HD = HIGH-HIGH[1];
            LD = LOW[1]-LOW;
            DMP = XAverage(IIF(HD>0&&HD>LD,HD,0),N);
            DMM = XAverage(IIF(LD>0&&LD>HD,LD,0),N);
            PDI = DMP*100/TR;
            MDI = DMM*100/TR;
            ADX = ABS(MDI-PDI)/(MDI+PDI)*100;
            ADXR = Average(ADX,M);
            
            PlotNumeric("PDI",PDI);
            PlotNumeric("MDI",MDI);
            PlotNumeric("ADX", adx);
                    PlotNumeric("ADXR",ADXR);
    End
    文华的代码就是这么短一段

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容