
MQL4MQL5 テクニカル指標
iADX()
- できること
- ADX(トレンドの強さ)と +DI・−DI の値を取得する
- 対応
- MQL4・MQL5
iADX() とは
ADX(平均方向性指数)と +DI・−DI を計算する関数です。ADX はトレンドの強さ、+DI と −DI の大小はトレンドの向きの目安になります。
iADX() の書式と引数
MQL4 の場合MT4
double iADX(
string symbol,
int timeframe,
int period,
int applied_price,
int mode,
int shift
)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
timeframe | int | 必須 | 時間足。0 または PERIOD_CURRENT でチャートの時間足。 |
period | int | 必須 | ADX の期間(よく使われるのは 14)。 |
applied_price | int | 必須 | 計算に使う価格。PRICE_CLOSE(終値)、PRICE_OPEN、PRICE_HIGH、PRICE_LOW、PRICE_MEDIAN((高値+安値)/2)、PRICE_TYPICAL など。MQL5 では、別のインジケーターのハンドルを渡して、そのインジケーターの値をもとに計算させることもできます(そのため型は int です)。 |
mode | int | 必須 | 取得するライン。MODE_MAIN(ADX)、MODE_PLUSDI(+DI)、MODE_MINUSDI(−DI)。 |
shift | int | 必須 | 値を取得するバーの位置。0 が現在(未確定)のバー、1 がひとつ前の確定したバー。 |
戻り値(MQL4)
指定したラインの値。
MQL5 の場合MT5
int iADX(string symbol, ENUM_TIMEFRAMES period, int adx_period)| 引数 | 型 | 省略時 | 説明 |
|---|---|---|---|
symbol | string | 必須 | 銘柄名。チャートの銘柄なら _Symbol(NULL も可)。 |
period | ENUM_TIMEFRAMES | 必須 | 時間足。PERIOD_CURRENT でチャートの時間足。 |
adx_period | int | 必須 | ADX の期間(よく使われるのは 14)。 |
戻り値(MQL5)
インジケーターのハンドル。バッファ番号は 0 が ADX(MAIN_LINE)、1 が +DI(PLUSDI_LINE)、2 が −DI(MINUSDI_LINE)です。
iADX() の使い方(コード例)
MQL4
double adx = iADX(_Symbol, 0, 14, PRICE_CLOSE, MODE_MAIN, 1);
double pdi = iADX(_Symbol, 0, 14, PRICE_CLOSE, MODE_PLUSDI, 1);
double mdi = iADX(_Symbol, 0, 14, PRICE_CLOSE, MODE_MINUSDI, 1);
if(adx > 25)
Print(pdi > mdi ? "強い上昇トレンド" : "強い下降トレンド");MQL5
int hAdx = INVALID_HANDLE;
int OnInit()
{
hAdx = iADX(_Symbol, PERIOD_CURRENT, 14);
return hAdx == INVALID_HANDLE ? INIT_FAILED : INIT_SUCCEEDED;
}
void OnTick()
{
double adx[], pdi[], mdi[];
if(CopyBuffer(hAdx, MAIN_LINE, 1, 1, adx) < 1 || CopyBuffer(hAdx, PLUSDI_LINE, 1, 1, pdi) < 1 || CopyBuffer(hAdx, MINUSDI_LINE, 1, 1, mdi) < 1)
return;
if(adx[0] > 25)
Print(pdi[0] > mdi[0] ? "強い上昇トレンド" : "強い下降トレンド");
}OnTick()・OnStart() などの関数の中に書いて使う例です。MetaEditor でコンパイルできることを確認済みです。
iADX() の注意点
- MQL5 では値ではなく「ハンドル」(インジケーターの番号)が返ります。ハンドルは OnInit() で1回だけ作り、OnTick() などで CopyBuffer() を使って値を読み出します。毎ティック作り直すと動作が重くなります。
MQL4 と MQL5 の違い
MQL5 の iADX() には適用価格の引数がありません。












