FX自動売買で使われるEA(エキスパートアドバイザー)では、移動平均線(SMA)を基にトレンドを判定することがよくあります。本記事では、1時間足の20SMAが上向きか下向きかを判定し、その結果を変数 EntryLogic
に保存する方法を紹介します。
コード例
以下は、MQL4を使用して1時間足の20SMAの向きを判定するコードです。
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// 初期化処理(必要に応じて記述)
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
// エントリーロジックを格納する変数
int EntryLogic = 0;
// 1時間足の20SMAの値を取得
double SMA_Current = iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0); // 現在のSMA
double SMA_Previous = iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 1); // 1つ前のSMA
// SMAの向きを判定
if (SMA_Current > SMA_Previous)
{
EntryLogic = 1; // 上向きの場合
}
else if (SMA_Current < SMA_Previous)
{
EntryLogic = -1; // 下向きの場合
}
// 結果を表示(デバッグ用)
Comment("SMA_Current: ", DoubleToString(SMA_Current, 5),
"\nSMA_Previous: ", DoubleToString(SMA_Previous, 5),
"\nEntryLogic: ", EntryLogic);
}
//+------------------------------------------------------------------+
コードの解説
iMA
関数を使用して移動平均線を取得iMA
関数は、指定した移動平均線の値を取得します。NULL
は現在の通貨ペアを指定します。PERIOD_H1
は1時間足を意味します。20
は移動平均線の期間です。PRICE_CLOSE
は終値を基に計算することを指定しています。- 最後の引数
0
と1
は、現在のバーと1つ前のバーの値を取得するためのインデックスです。
- SMAの向きを判定
- 現在の20SMA(
SMA_Current
)が1つ前の20SMA(SMA_Previous
)より大きければ、SMAは上向きです。 - 逆に、小さければSMAは下向きと判定します。
- 現在の20SMA(
EntryLogic
に結果を格納- 上向きの場合は
EntryLogic = 1
。 - 下向きの場合は
EntryLogic = -1
。
- 上向きの場合は
- デバッグ用に結果を表示
Comment
関数を使って、SMAの値とEntryLogic
の値をチャート上に表示しています。
実際に使用する際の注意点
- このコードは
OnTick
関数内で動作します。そのため、新しいティック(価格変動)が発生するたびに更新されます。 - 実際のトレードロジックに組み込む際は、この
EntryLogic
を基に売買ルールを追加する必要があります。
これで、1時間足の20SMAを基にトレンドを判定するEAの基礎が完成しました。
Step5で紹介した基本構文と組み合わせてみてください。
つづく