设为首页收藏本站

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

求助:DMI公式V4中无法使用 [复制链接]

Rank: 3Rank: 3

精华
0
UID
116243
积分
152
帖子
129
主题
9
阅读权限
40
注册时间
2013-3-20
最后登录
2022-9-13
跳转到指定楼层
1#
发表于 2013-8-19 22:07:16 |只看该作者 |倒序浏览
管理员:您好,老版本开拓者中,使用的交易系统,使用DMI的公式在V4中无法使用,学习了本版中的DMI公式的帖子,按照帖子重新编公式,在V4中也无法显示,也不能编译通过。提示:被调用公式要求引用参数时,该参数只能以普通变量或引用参数方式传入。请管理员能否看看问题在哪,帮助解决问题,谢谢。


01.Params

02.        Numeric Length(14);

03.        NumericRef oDMIPlus;

04.        NumericRef oDMIMinus;

05.        NumericRef oDMI;

06.        NumericRef oADX;

07.        NumericRef oADXR;

08.        NumericRef oVolty;

09.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.

88.        Divisor = oDMIPlus + oDMIMinus ;

89.        if (Divisor > 0)

90.        {

91.                sDMI = 100 * Abs( oDMIPlus - oDMIMinus ) / Divisor;

92.        }else

93.        {

94.                sDMI = 0 ;

95.        }

96.

97.        if(CurrentBar > 0)

98.        {

99.                if (CurrentBar <= Length)

100.                {

101.                        sADX = Cum( sDMI ) / CurrentBar ;

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;

113.End
复制代码2、新建技术指标,取名DMI,代码如下:

01.Params

02.        Numeric Length(14);

03.Vars

04.        Numeric oDMIPlus( 0 );

05.        Numeric oDMIMinus( 0 );

06.        Numeric oDMI( 0 );

07.        Numeric oADX( 0 );

08.        Numeric oADXR( 0 );

09.        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
您需要登录后才可以回帖 登录 | 注册

bottom

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

GMT+8, 2024-5-3 16:30

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部