如何从MQL4 / MQL5中的iADX()指标中提取+ DI和-DI值?

时间:2016-10-06 20:52:08

标签: mql4 mql5

我是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的值,以便我可以在我的代码中使用它们。

2 个答案:

答案 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()中调用指示器是个好主意 - 有时候你没有已经装好的酒吧,有时候你已经装好了,也许它已经修好但我记得几个月前我的客户有这样的问题尤其是在改变时间表时。