if文の書き方を覚えても、実際に自分のインジケーターやEAでどう条件分岐を組み立てればいいのか分からない——という人向けの記事です。この記事では、if文・else・elseifの基本に加えて、実際にMetaEditorでコンパイルして確認できるサンプルコードを紹介します。
if文

プログラムは上から順番に実行されていきます。
しかし、ある条件によっては処理を分けたい場合もあります。
条件に従って処理を分岐させるために使われるのがif文になります。
if文の宣言
if文の宣言は以下のように記述します。
if (条件式) 条件式が真の時に実行する処理;
else
if文で条件に当てはまらなかった場合スキップするのではなく、
条件に含まれない場合の別の処理を行いたい場合はelseを使います。

elseは以下のように記述します。
if (条件式) {
条件式が満足されるときに実行される命令(命令は複数行あっても可能)
} else {
条件式が満足されないときに実行される命令(命令は複数行あっても可能)
}
elseif
ifだけではなく、複数条件したい場合はelseifを使います。

elseifは以下のように記述します。
if (条件式A) {
条件式Aが満足されるときに実行される命令
} else if (条件式B) {
条件式Aが満足されず、条件式Bが満足されるときに実行される命令
} else {
条件式AもBも満足されないときに実行される命令
}
関係演算子
if文などで条件分岐の時には条件式の内容が真か偽かによって処理を分けます。
条件式には「xxxと等しい」とか「xxxよりも大きい」などを指定することになります。
この条件式の中で使用されるのが関係演算子です。
| 演算子 | 使い方 | 意味 |
|---|---|---|
| == | a == b | aとbの値が等しければ1、そうでなければ(等しくない場合)0 |
| != | a != b | aとbの値が等しくなければ1、そうでなければ(等しい場合)0 |
| < | a < b | aがbより小さければ1、そうでなければ(等しいまたは大きい場合)0 |
| > | a > b | aがbより大きければ1、そうでなければ(等しいまたは小さい場合)0 |
| <= | a <= b | aがb以下であれば1、そうでなければ(大きい場合)0 |
| >= | a >= b | aがb以上であれば1、そうでなければ(小さい場合)0 |
関係演算子では演算子の左辺と右辺を比較し、等しいかどうかや大きいかどうかなどを判別します。
そして結果として真か偽かを評価します。
論理演算子
関係演算子は簡単な条件判断は可能ですが、
論理演算子を使うことで「a と bが等しい」かつ「c は dよりも大きい」といった
条件式を組み合わせたより複雑な条件式を記述することができます。
| 演算子 | 名前 | 記述例 | 意味 |
|---|---|---|---|
| && | 論理積 AND | a && b | aとbが共に真の場合に真 |
| || | 論理和 OR | a || b | aかbの少なくとも1つが真の場合に真 |
| ! | 否定 NOT | !a | aが真の時に偽、偽の時に真 |
上記においてaやbの箇所にはそれぞれ関係演算子を使った条件式が入ります。
記述方は以下のようになります。
条件式 論理演算子 条件式
具体的には以下のように使用します。
if (条件式A && 条件式B) {
条件式AもBも満足されるときに実行される命令
}
もしくは
if (条件式A || 条件式B) {
条件式AかBか、どちらかが満足されるときに実行される命令
}
実際にコンパイルして確認する
現在値が20MA(20期間移動平均線)より上か下かを、if・else・関係演算子を使ってチャートに表示するインジケーターで確認してみましょう。
//+------------------------------------------------------------------+
//| IfStatement.mq4 |
//| Copyright 2020, FX-EA System Project Creator |
//| https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link "https://creator.fx-ea-system-project.com/"
#property version "1.00"
#property strict
#property indicator_chart_window
int OnInit()
{
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
Comment("");
}
void OnTick()
{
double current_price = Bid;
double ma20 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
if(current_price > ma20)
{
Comment("現在値はMA20より上です(上昇トレンドの可能性)");
}
else if(current_price < ma20)
{
Comment("現在値はMA20より下です(下降トレンドの可能性)");
}
else
{
Comment("現在値はMA20と一致しています");
}
}
//+------------------------------------------------------------------+
current_price > ma20という関係演算子での比較を、if・elseif・elseで分岐させています。相場ではcurrent_priceとma20がぴったり一致することは稀ですが、条件分岐の練習として3パターンを用意しています。
まとめ
今回はif文についてでした。if文はプログラムでもかなりの頻度で出てくるので非常に重要です。
しっかりと理解しておきましょう。
if文:条件に従って処理を分岐させるために使用
関係演算子:条件式の内容が真か偽かによって処理を分けるために使用
論理演算子:より複雑な条件式を記述するために使用
else:条件に含まれない場合の別の処理を行う場合に使用
elseif:複数条件したい場合
コメント