- 精华
- 0
- 在线时间
- 89 小时
- UID
- 116243
- 积分
- 152
- 帖子
- 129
- 阅读权限
- 40
- 注册时间
- 2013-3-20
- 最后登录
- 2022-9-13
- 精华
- 0
- UID
- 116243
- 积分
- 152
- 帖子
- 129
- 主题
- 9
- 阅读权限
- 40
- 注册时间
- 2013-3-20
- 最后登录
- 2022-9-13
|
管理员:您好,老版本开拓者中,使用的交易系统,使用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
|
|