【问题标题】:How to pull +DI and -DI values from an iADX() indicator in MQL4 / MQL5?如何从 MQL4 / MQL5 中的 iADX() 指标中提取 +DI 和 -DI 值?
【发布时间】:2017-05-05 23:04:10
【问题描述】:

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

【问题讨论】:

  • 嗨机会。当您有时间时,请查看 Stack Overflow 的使用指南,并特别注意其他人可能会编辑您的帖子。我们倾向于编辑问候语、提前致谢、明确的帮助请求等——它们是“绒毛”,除了要阅读的单词之外不会添加任何内容。请把它倒回去好吗?
  • @halfer 谢谢,我不知道。感谢您的信息!

标签: mql4 mql5


【解决方案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 )
                        );
       }

【讨论】:

    【解决方案2】:

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

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

    另外,我不确定在OnInit() 中调用指标是否是个好主意 - 有时您没有加载条形图,有时您已经加载了,也许它已修复,但我记得几个月前我的客户尤其遇到过这样的问题更改时间范围时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 2022-11-24
      • 2011-01-09
      • 2011-10-28
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      相关资源
      最近更新 更多