ADXは、上昇、下落に関係なく方向性(トレンド)の大きさを表す指標です。どちらのトレンドが強いかは、高値の上昇する強さ+DIラインと、安値の下落する強さ-DIラインで判断できます。
順張りシグナルの一例として、+DIが-DIを上抜けたときに買いシグナル、下抜けたときに売りシグナルを出します。
<aside> 💡 買いシグナル:2本前から1本前にかけて+DIが-DIを下から上に交差したとき 売りシグナル:2本前から1本前にかけて+DIが-DIを上から下に交差したとき
</aside>
//共通ライブラリ
#include "LibEA.mqh"
sinput double Lots = 0.1; //売買ロット数
//ティック時実行関数
void Tick()
{
int sig_entry = EntrySignal(); //仕掛けシグナル
//成行売買
MyOrderSendMarket(sig_entry, sig_entry, Lots);
}
input int ADXPeriod = 20; //ADXの期間
//仕掛けシグナル関数
int EntrySignal()
{
//1本前と2本前のADXの±DI
double PDI1 = iADX(_Symbol, 0, ADXPeriod, PRICE_CLOSE, MODE_PLUSDI, 1);
double PDI2 = iADX(_Symbol, 0, ADXPeriod, PRICE_CLOSE, MODE_PLUSDI, 2);
double MDI1 = iADX(_Symbol, 0, ADXPeriod, PRICE_CLOSE, MODE_MINUSDI, 1);
double MDI2 = iADX(_Symbol, 0, ADXPeriod, PRICE_CLOSE, MODE_MINUSDI, 2);
int ret = 0; //シグナルの初期化
//買いシグナル
if(PDI2 <= MDI2 && PDI1 > MDI1) ret = 1;
//売りシグナル
if(PDI2 >= MDI2 && PDI1 < MDI1) ret = -1;
return ret; //シグナルの出力
}
ADXは、iADX()
というテクニカル指標関数で求められます。
ADXの期間として、別途宣言した変数ADXPeriod
を引数period
に代入します。
mode
の引数には、+DIラインを求める場合、MODE_PLUSDI
を、-DIラインを求める場合、MODE_MINUSDI
をそれぞれ代入します。
2本前の+DIラインPDI2
と-DIラインMDI2
、1本前の+DIラインPDI1
と-DIラインMDI1
の大小関係により、シグナルを判定します。