3

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

4

2 回答 2

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 )
                        );
       }
于 2016-10-07T14:11:01.610 回答
0

ADX 有一个参数 - 它的周期。并且您使用句点 = 0 的指标,在​​这种情况下它返回零...

double a;
int period = 14;

int OnInit() {
   a = iADX( NULL, 0, period, PRICE_CLOSE, MODE_PLUSDI, 0 );
   Alert( a );
}

此外,我不确定调用指标是否是一个好主意OnInit()- 有时你没有加载柱形图,有时你已经加载了,也许它是固定的,但我记得几个月前我的客户遇到了这样的问题,尤其是在更改时间框架时。

于 2016-10-07T14:02:20.990 回答