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()か?

+DIandの値を取得して、コードで使用できるようにしたいだけ-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 には 1 つのパラメーターがあります - その期間です。期間 = 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 に答える