我是MQL4
的菜鸟,我正在写第一个EA。
我的目标是获取ADX指标的 +DI
和 -DI
的变量。
我使用了 iADX()
函数,如下所示:
double a;
int OnInit() {
a = iADX( NULL, 0, 0, PRICE_CLOSE, MODE_PLUSDI, 0 );
Alert( a );
}
但它一直打印0.0
我是否在 iADX()
功能中输入了错误的参数?
我只想提取+DI
和-DI
的值,以便我可以在我的代码中使用它们。
答案 0 :(得分:1)
double iADX( string symbol, // BEST AS: _Symbol
int timeframe, // BEST AS: one of {}-ENUMs ~ PERIOD_CURRENT
int period, // averaging period
int applied_price, // BEST AS: one of {}-ENUMs ~ PRICE_CLOSE
int mode, // BEST AS: one of {}-ENUMs ~ MODE_PLUSDI
int shift // shift
);
0.0
?在我们读入调用界面后,要求对当前 PRICE_CLOSE
(Symbol()
)保留的NULL
条记录的所选序列进行平均,但请注意,为零连续条形图执行此操作会指示不执行任何操作,而不是采用SUM( Close[i..j] )/period
的合理微积分来允许任何有意义的处理。
尝试非零时段,您将重新回到目标。
double DI_plus,
DI_minus;
int ADX_PERIOD = 8;
int OnInit() {
ObjectCreate( ChartID(), "GUI-SHOW+DI", ... ); // LABEL for +DI
ObjectCreate( ChartID(), "GUI-SHOW-DI", ... ); // LABEL for -DI
}
int OnTick() {
DI_plus = iADX( _Symbol,
PERIOD_CURRENT,
ADX_PERIOD,
PRICE_CLOSE,
MODE_PLUSDI,
0
);
DI_minus = iADX( _Symbol,
PERIOD_CURRENT,
ADX_PERIOD,
PRICE_CLOSE,
MODE_MINUSDI,
0
);
ObjectSetString( Chart_ID(),
"GUI-SHOW+DI",
OBJPROP_TEXT,
StringFormat("+DI %12.6f", DI_plus )
);
ObjectSetString( Chart_ID(),
"GUI-SHOW-DI",
OBJPROP_TEXT,
StringFormat("-DI %12.6f", DI_minus )
);
}
答案 1 :(得分:0)
ADX有一个参数 - 它的周期。并且你使用周期= 0的指标,在这种情况下它返回零......
double a;
int period = 14;
int OnInit() {
a = iADX( NULL, 0, period, PRICE_CLOSE, MODE_PLUSDI, 0 );
Alert( a );
}
另外我不确定在OnInit()
中调用指示器是个好主意 - 有时候你没有已经装好的酒吧,有时候你已经装好了,也许它已经修好但我记得几个月前我的客户有这样的问题尤其是在改变时间表时。