【MQL4勉強プログラミング】EAやインジケーターの開発でADXを使う方法!

ザフナーラボブログ

iADX()関数は、ADX(Average Directional Movement Index)及び+DI(Plus Directional Indicator)・-DI(Minus Directional Indicator)の値を取得するために使用します。

iADX()関数は、以下のように定義されています。

double iADX(
string symbol,
int timeframe,
int period,
int applied_price,
int mode,
int shift
);

各引数の意味は、以下のとおりです。

  • string symbol
    ADXの値を計算する通貨ペア名を指定します。
    通貨ペア名は、「気配値表示ウィンドウ」に表示されているとおりに記述します。
    特定の通貨ペア名を指定せず、EA等を適用したチャートの通貨ペアのADXの値を取得したい場合は、「NULL」と記述します。
  • int timeframe
    以下の表に従って、ADXの値を計算する時間軸を指定します。

    種 類
    定 数
    内 容
    PERIOD_CURRENT
    現在の時間足
    PERIOD_M1
    1分足
    PERIOD_M5
    5分足
    PERIOD_M15
    15
    15分足
    PERIOD_M30
    30
    30分足
    PERIOD_H1
    60
    1時間足
    PERIOD_H4
    240
    4時間足
    PERIOD_D1
    1440
    日 足
    PERIOD_W1
    10080
    週 足
    PERIOD_MN1
    43200
    月 足
  • int period
    ADXの値を計算する期間を指定します。
    通常は「14」です。
  • int applied_price
    以下の表に従って、ADXの計算に使用する価格データを指定します。

    種 類
    定 数
    内 容
    PRICE_CLOSE
    終 値
    PRICE_OPEN
    始 値
    PRICE_HIGH
    高 値
    PRICE_LOW
    安 値
    PRICE_MEDIAN
    中央値
    (高値+安値)÷2
    PRICE_TYPICAL
    代表値
    (高値+安値+終値)÷3
    PRICE_WEIGHTED
    加重終値
    (高値+安値+終値+終値)÷4
  • int mode
    ライン番号を指定します。
    ADXの値を取得したい場合は「0」と記述します。
    +DIの値を取得したい場合は「1」と記述します。
    -DIの値を取得したい場合は「2」と記述します。
  • int shift
    ADX及び+DI・-DIの値を取得したいバーの位置を指定します。
    ADX及び+DI・-DIの値を取得したいバーが現在のバーであれば「0」、1本前のバーであれば「1」、2本前のバーであれば「2」……と記述します。

戻り値

第五引数の指定に従って、「ADX」、「+DI」、「-DI」の値が返されます。

具体例

2本前のバーの+DIの値が2本前のバーの-DIの値以下で、1本前のバーの+DIの値が1本前のバーの-DIの値よりも大きく、かつ、1本前のバーのADXの値が25以上であれば、買いエントリーしたい場合は、以下のように記述します(ADXのパラメーター:計算期間「14」、計算に使用する価格データ「終値」)。


double Plus_DI_1  = iADX(NULL,0,14,0,1,1);
double Plus_DI_2  = iADX(NULL,0,14,0,1,2);
double Minus_DI_1 = iADX(NULL,0,14,0,2,1);
double Minus_DI_2 = iADX(NULL,0,14,0,2,2);
double ADX_1      = iADX(NULL,0,14,0,0,1);

if(Plus_DI_2 <= Minus_DI_2 && Plus_DI_1 > Minus_DI_1
   && ADX_1 >= 25)
  {
    int Ticket
    = OrderSend(Symbol(),OP_BUY,0.1,Ask,10,0,0,
                NULL,1359,0,clrMagenta);
  }